このチュートリアルの例では、vSphere IaaS control plane 環境の vSphere ポッド を使用して WordPress アプリケーションをデプロイする方法について説明します。

WordPress のデプロイには、WordPress フロントエンドと MySQL バックエンド、そして両サービスをまとめたコンテナが含まれます。シークレット オブジェクトも必要です。

このチュートリアルでは、デプロイ オブジェクトを使用します。本番環境では、WordPress コンテナと MySQL コンテナの両方に StatefulSets を使用するのが一般的です。

前提条件

WordPress のデプロイ

このワークフローを使用して、vSphere ポッド で WordPress アプリケーションをデプロイします。

パート 1。名前空間へのアクセス

名前空間にアクセスするには、次の手順を使用します。

手順

  1. Supervisor にログインします。
     kubectl vsphere login --server=SVC-IP-ADDRESS --vsphere-username [email protected] 
  2. vSphere 名前空間に切り替えます。
     kubectl config use-context VSPHERE-PODS-NAMESPACE
  3. 作成したストレージ ポリシー (vwt-storage-policy) がストレージ クラスとして名前空間で使用可能であることを確認します。

パート 2。WordPress PVC の作成

WordPress PVC を作成するには、次のコマンドを使用します。

手順

  1. MySQL PVC を作成します。
     kubectl apply -f mysql-pvc.yaml
  2. WordPress PVC を作成します。
     kubectl apply -f wordpress-pvc.yaml
  3. PVC を確認します。
     kubectl get pvc,pv

パート 3。シークレットの作成

パブリック Docker Hub は、Kubernetes のデフォルトのコンテナ レジストリです。Docker Hub でイメージ プルが制限されるようになりました。有償アカウントを使用していること、および data.dockerconfigjson フィールドのシークレット YAML にアカウント キーを追加することが必要です。

手順

  1. Docker Hub レジストリ シークレットを作成します。
     kubectl apply -f regcred.yaml
  2. mysql パスワード シークレットを作成します。
    MySQL DB のパスワードは必須です。シークレット内では、パスワードは base64 でエンコードする必要があります。
    kubectl apply -f mysql-pass.yaml
  3. シークレットを確認します。
    kubectl get secrets

パート 4。サービスの作成

サービスを作成するには、次の手順を実行します。

手順

  1. MySQL サービスを作成します。
    kubectl apply -f mysql-service.yaml
  2. WordPress サービスを作成します。
    kubectl apply -f wordpress-service.yaml
  3. サービスを確認します。
    kubectl get services

パート 5。ポッドのデプロイの作成

このタスクを使用して、ポッドのデプロイを作成します。

このチュートリアルでは、デプロイ オブジェクトを使用します。本番環境では、WordPress コンテナと MySQL コンテナの両方に StatefulSets を使用する必要があります。

手順

  1. MySQL デプロイを作成します。
    kubectl apply -f mysql-deployment-vsphere-pod.yaml
    注: vSphere ポッド が作成されると、ポッド内にコンテナ用の仮想マシンが作成されます。デフォルトでは、仮想マシンの RAM には 512 MB の制限があります。MySQL コンテナには、より多くのメモリが必要です。ポッドのデプロイ仕様 mysql-deployment-vsphere-pod.yaml には、 vSphere ポッド 仮想マシンに指定されたメモリを増やすセクションが含まれています。このセクションを含めない場合は、メモリ不足 (OOM) 例外が発生してポッドのデプロイは失敗します。MySQL ポッドを TKG クラスタにデプロイするときに RAM を増やす必要はありません。
  2. WordPress デプロイを作成します。
    kubectl apply -f wordpress-deployment.yaml
  3. デプロイを確認します。
    kubectl get deployments	

パート 6。WordPress のテスト

WordPress のデプロイをテストするには、次の手順を実行します。

手順

  1. すべてのオブジェクトが作成され、実行されていることを確認します。
    kubectl get pv,pvc,secrets,rolebinding,services,deployments,pods
  2. WordPress サービスから EXTERNAL-IP アドレスを取得します。
    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. EXTERNAL-IP アドレスを参照します。
  4. WordPress インスタンスを構成します。
    ユーザー名:administrator
    パスワード:指定された強力なパスワードを使用

WordPress 展開のサンプル YAML ファイル

vSphere ポッド を使用して WordPress アプリケーションをデプロイする場合は、次のサンプル YAML ファイルを使用します。

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