In diesem Beispiel-Lernprogramm wird die Bereitstellung der WordPress-Anwendung mithilfe von vSphere-Pods in der vSphere IaaS control plane-Umgebung beschrieben.

Die WordPress-Bereitstellung umfasst Container für das WordPress-Frontend und das MySQL-Back-End sowie Dienste für beides. Geheimschlüsselobjekte sind ebenfalls erforderlich.

In diesem Lernprogramm wird ein Bereitstellungsobjekt verwendet. In einer Produktionsumgebung sollten Sie normalerweise StatefulSets sowohl für WordPress- als auch für MySQL-Container verwenden.

Voraussetzungen

WordPress bereitstellen

Verwenden Sie diesen Workflow, um die WordPress-Anwendung mithilfe von vSphere-Pods bereitzustellen.

Teil 1. Zugreifen auf Ihren Namespace

Führen Sie diese Schritte aus, um auf Ihren Namespace zuzugreifen.

Prozedur

  1. Melden Sie sich beim Supervisor an.
     kubectl vsphere login --server=SVC-IP-ADDRESS --vsphere-username [email protected] 
  2. Führen Sie einen Kontextwechsel zum vSphere-Namespace durch.
     kubectl config use-context VSPHERE-PODS-NAMESPACE
  3. Stellen Sie sicher, dass die von Ihnen erstellte Speicherrichtlinie vwt-storage-policy im Namespace als Speicherklasse verfügbar ist.
    Weitere Informationen hierzu finden Sie unter Anzeigen von Speicherklassen in einem vSphere-Namespace.

Teil 2. WordPress-PVCs erstellen

Verwenden Sie diese Befehle, um WordPress-PVCs zu erstellen.

Prozedur

  1. Erstellen Sie die MySQL-PVC.
     kubectl apply -f mysql-pvc.yaml
  2. Erstellen Sie die WordPress-PVC.
     kubectl apply -f wordpress-pvc.yaml
  3. Verifizieren Sie die PVCs.C
     kubectl get pvc,pv

Teil 3. Geheimnisse erstellen

Der öffentliche Docker-Hub ist die standardmäßige Containerregistrierung für Kubernetes. Docker-Hub schränkt jetzt Image-Abrufe ein. Sie müssen über ein bezahltes Konto verfügen und den Kontoschlüssel zur geheimen YAML im Feld data.dockerconfigjson hinzufügen.

Prozedur

  1. Erstellen Sie den geheimen Registrierungsschlüssel für Docker-Hub.
     kubectl apply -f regcred.yaml
  2. Erstellen Sie den geheimen mysql-Kennwortschlüssel.
    Das MySQL-DB-Kennwort ist erforderlich. Innerhalb des geheimen Schlüssels muss das Kennwort base64-codiert sein.
    kubectl apply -f mysql-pass.yaml
  3. Verifizieren Sie die Geheimnisse.
    kubectl get secrets

Teil 4. Dienste erstellen

Folgen Sie diesen Schritten, um Dienste zu erstellen.

Prozedur

  1. Erstellen Sie den MySQL-Dienst.
    kubectl apply -f mysql-service.yaml
  2. Erstellen Sie den WordPress-Service.
    kubectl apply -f wordpress-service.yaml
  3. Verifizieren Sie die Dienste.
    kubectl get services

Teil 5. Pod-Bereitstellungen erstellen

Verwenden Sie diese Aufgabe, um Pod-Bereitstellungen zu erstellen.

In diesem Lernprogramm werden Bereitstellungsobjekte verwendet. In einer Produktionsumgebung sollten Sie StatefulSets sowohl für WordPress- als auch für MySQL-Container verwenden.

Prozedur

  1. Erstellen Sie die MySQL-Bereitstellung.
    kubectl apply -f mysql-deployment-vsphere-pod.yaml
    Hinweis: Wenn ein vSphere Pod erstellt wird, erstellt das System eine VM für die Container im Pod. Standardmäßig hat die VM einen RAM-Grenzwert von 512 MB. Der MySQL-Container benötigt mehr Arbeitsspeicher. Die Spezifikation mysql-deployment-vsphere-pod.yaml für die Pod-Bereitstellung enthält einen Abschnitt, der den Arbeitsspeicher erhöht, der der vSphere Pod-VM zugewiesen ist. Wenn Sie diesen Abschnitt nicht einschließen, schlägt die Pod-Bereitstellung mit einer Ausnahme aufgrund von nicht genügend Arbeitsspeicher (OOM) fehl. Sie müssen den Arbeitsspeicher nicht erhöhen, wenn Sie einen MySQL-Pod in einem TKG-Cluster bereitstellen.
  2. Erstellen Sie die WordPress-Bereitstellung.
    kubectl apply -f wordpress-deployment.yaml
  3. Verifizieren Sie die Bereitstellung.
    kubectl get deployments	

Teil 6. WordPress testen

Folgen Sie diesen Schritten, um Ihre WordPress-Installation zu testen.

Prozedur

  1. Stellen Sie sicher, dass alle Objekte erstellt wurden und ausgeführt werden.
    kubectl get pv,pvc,secrets,rolebinding,services,deployments,pods
  2. Rufen Sie die EXTERNAL-IP-Adresse vom WordPress-Dienst ab.
    kubectl get service wordpress
    
    NAME        TYPE           CLUSTER-IP    EXTERNAL-IP     PORT(S)        AGE
    wordpress   LoadBalancer   10.96.9.180   10.197.154.73   80:30941/TCP   87s
  3. Rufen Sie die EXTERNAL-IP-Adresse auf.
  4. Konfigurieren Sie die WordPress-Instanz.
    Benutzername: administrator
    Kennwort: Verwenden Sie das angegebene sichere Kennwort

Beispiel-YAML-Dateien für die WordPress-Bereitstellung

Verwenden Sie diese Beispiel-YAML-Dateien, wenn Sie die WordPress-Anwendung mit vSphere-Pods bereitstellen.

mysql-pvc.yaml

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: mysql-pvc
  labels:
    app: wordpress
spec:
  accessModes:
    - ReadWriteOnce
  storageClassName: vwt-storage-policy
  resources:
    requests:
      storage: 20Gi

wordpress-pvc.yaml

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: wordpress-pvc
  labels:
    app: wordpress
spec:
  accessModes:
    - ReadWriteOnce
  storageClassName: vwt-storage-policy  
  resources:
    requests:
      storage: 20Gi

regcred.yaml

apiVersion: v1
kind: Secret
metadata:
  name: regcred
data:
  .dockerconfigjson: ewoJImF1dGhzIjog....zZG1KcE5WUmtXRUozWpc
type: kubernetes.io/dockerconfigjson

mysql-pass.yaml

apiVersion: v1
data:
  password: YWRtaW4=  #admin base64 encoded
kind: Secret
metadata:
  name: mysql-pass

mysql-service.yaml

apiVersion: v1
kind: Service
metadata:
  name: wordpress-mysql
  labels:
    app: wordpress
spec:
  ports:
    - port: 3306
  selector:
    app: wordpress
    tier: mysql
  clusterIP: None

wordpress-service.yaml

apiVersion: v1
kind: Service
metadata:
  name: wordpress
  labels:
    app: wordpress
spec:
  ports:
    - port: 80
  selector:
    app: wordpress
    tier: frontend
  type: LoadBalancer

mysql-deployment-vsphere-pod.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: wordpress-mysql
  labels:
    app: wordpress
spec:
  replicas: 1
  strategy:
    type: Recreate
  selector:
    matchLabels:
      app: wordpress
      tier: mysql
  template:
    metadata:
      labels:
        app: wordpress
        tier: mysql
    spec:
      containers:
      - image: mysql:5.6
        name: mysql
        #increased resource limits required for this pod vm
        #default pod VM RAM is 512MB; MySQL container needs more 
        #without extra RAM OOM error prevents deployment
        #extra RAM not required for Kuberentes cluster
        resources:
          limits:
            memory: 1024Mi
            cpu: 1
        env:
        - name: MYSQL_ROOT_PASSWORD
          valueFrom:
            secretKeyRef:
              name: mysql-pass
              key: password
        ports:
        - containerPort: 3306
          name: mysql
        volumeMounts:
        - name: mysql-persistent-storage
          mountPath: /var/lib/mysql
      volumes:
      - name: mysql-persistent-storage
        persistentVolumeClaim:
          claimName: mysql-pvc
      imagePullSecrets:
      - name: regcred  

wordpress-deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: wordpress
  labels:
    app: wordpress
spec:
  selector:
    matchLabels:
      app: wordpress
      tier: frontend
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: wordpress
        tier: frontend
    spec:
      containers:
      - image: wordpress:4.8-apache
        name: wordpress
        env:
        - name: WORDPRESS_DB_HOST
          value: wordpress-mysql
        - name: WORDPRESS_DB_PASSWORD
          valueFrom:
            secretKeyRef:
              name: mysql-pass
              key: password
        ports:
        - containerPort: 80
          name: wordpress
        volumeMounts:
        - name: wordpress-persistent-storage
          mountPath: /var/www/html
      volumes:
      - name: wordpress-persistent-storage
        persistentVolumeClaim:
          claimName: wordpress-pvc
      imagePullSecrets:
      - name: regcred