WordPress は、インターネット上でブログやウェブサイトをデプロイするために使用される、最も人気のあるコンテンツ管理システムの1つです。また、Docker イメージとして DockerHub レジストリでも利用可能です。このDockerイメージを使用して、信頼性が高くスケーラブルなウェブサイトプラットフォームを Kubernetes クラスター上に構築できます。Kubernetes上にWordPressをデプロイすることで、CI/CDパイプラインの実装が容易になり、新しいアップデートのリリースにかかる時間を短縮できます。また、WordPressウェブサイトの水平スケーリングを有効にして、ウェブサイトのトラフィック急増に対応することもできます。
このガイドでは、WordPressと MySQL を、Persistent Volume とともにKubernetesクラスター上にデプロイする方法を説明します。
前提条件
- Kubernetes(k8s)とそのオブジェクトに関する基本的な理解。詳細については、こちらのガイドの Kubernetesエコシステムの詳細な概要.
- Kubernetesクラスターが稼働していること。こちらのチュートリアルに従って、Ubuntu 20.04にKubernetesクラスターをインストール.
Kubernetesクラスターの検証
開始する前に、Kubernetesクラスターの状態を確認することをお勧めします。次の kubectl コマンドを使用して、Kubernetesを検証できます。
|
1 |
kubectl get nodes |
すべてが正常であれば、次の出力が表示されます。

MySQL用のSecretの作成
Secret(シークレット)は、パスワードやキーなどの機密データを保存できるオブジェクトです。この投稿では、Secretを使用してMySQLのパスワードを保存します。
まず、次のコマンドを使用して、base64 でエンコードされたパスワードを作成します。
|
1 |
echo -n 'your_secure_password' | base64 |
次の出力にシークレットパスワードが表示されます。
|
1 |
eW91cl9zZWN1cmVfcGFzc3dvcmQ= |
次に、MySQLとWordPress用の secret.yaml ファイルを作成します。
|
1 |
nano secret.yaml |
次の設定を追加します。
|
1 2 3 4 5 6 7 |
apiVersion: v1 kind: Secret metadata: name: mysql-pass type: Opaque data: password: eW91cl9zZWN1cmVfcGFzc3dvcmQ= |
ファイルを保存して閉じます。次に、以下のコマンドを使用して、上記の設定をKubernetesクラスターに適用します。
|
1 |
kubectl apply -f secret.yaml |
次の出力が表示されます。
|
1 |
secret/mysql-pass created |
MySQLおよびWordPress用のPersistentVolumeの作成
MySQLとWordPressのデータを保存するために、PersistentVolumeを作成する必要もあります。
それでは、 pvc-mysql-wp.yaml ファイルを作成しましょう。
|
1 |
nano pvc-mysql-wp.yaml |
次の設定を追加します。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: mysql-pv-claim labels: app: wordpress spec: accessModes: - ReadWriteOnce resources: requests: storage: 40Gi --- apiVersion: v1 kind: PersistentVolumeClaim metadata: name: wp-pv-claim labels: app: wordpress spec: accessModes: - ReadWriteOnce resources: requests: storage: 40Gi |
完了したら、ファイルを保存して閉じます。
次に、以下のコマンドを使用して、Kubernetesクラスター上にMySQLとWordPressの両方のPersistentVolumeを作成します。
|
1 |
kubectl apply -f pvc-mysql-wp.yaml |
次の出力に両方のPersistentVolumeが表示されるはずです。
|
1 2 |
persistentvolumeclaim/mysql-pv-claim created persistentvolumeclaim/wp-pv-claim created |
これで、次のコマンドを使用して両方のPersistentVolumeを確認できます。
|
1 |
kubectl get pv |
次の出力が表示されるはずです。
|
1 2 3 |
名前 容量 アクセス モード 回収 ポリシー ステータス 要求 ストレージクラス 理由 経過時間 pvc-873a458352594103 40Gi RWO Delete Bound default/wp-pv-claim your-block-storage 3s pvc-de7d7de5e53a40e8 40Gi RWO Delete Bound default/mysql-pv-claim your-block-storage 3s |
MySQL デプロイメントの作成
次に、MySQLのDockerイメージをダウンロードし、コンテナを作成して、PersistentVolumeを以下にマウントするためのMySQLデプロイメント設定ファイルを作成します。 /var/lib/mysql.
|
1 |
nano mysql-deployment.yaml |
次の設定を追加します。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
apiVersion: v1 kind: Service metadata: name: wordpress-mysql labels: app: wordpress spec: ports: - port: 3306 selector: app: wordpress tier: mysql clusterIP: None --- apiVersion: apps/v1 kind: Deployment metadata: name: wordpress-mysql labels: app: wordpress spec: selector: matchLabels: app: wordpress tier: mysql strategy: type: Recreate template: metadata: labels: app: wordpress tier: mysql spec: containers: - image: mysql:5.6 name: mysql 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-pv-claim |
完了したら、ファイルを保存して閉じます。次に、上記の構成をKubernetesクラスターにデプロイします。
|
1 |
kubectl apply -f mysql-deployment.yaml |
次の出力が表示されるはずです。

次のコマンドを使用して、MySQLのデプロイを確認できます。
|
1 |
kubectl get deployments |
次の出力にMySQLデプロイのステータスが表示されるはずです。

WordPressデプロイの作成
次に、WordPressイメージをダウンロードし、コンテナを作成し、PersistentVolumeを /var/www/html(ウェブサイトのデータファイル用)にマウントするWordPressデプロイ構成ファイルを作成します。このファイルは、データベースにアクセスするための WORDPRESS_DB_HOST および WORDPRESS_DB_PASSWORD 環境変数も作成します。
|
1 |
nano wordpress-deployment.yaml |
次の構成を追加します。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
apiVersion: v1 kind: Service metadata: name: wordpress labels: app: wordpress spec: ports: - port: 80 selector: app: wordpress tier: frontend type: LoadBalancer --- apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2 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: wp-pv-claim |
完了したらファイルを保存します。次に、以下のコマンドを使用して、上記の構成をKubernetesクラスターに適用します。
|
1 |
kubectl apply -f wordpress-deployment.yaml |
次の出力にデプロイ成功のメッセージが表示されます。
|
1 2 |
service/wordpress created deployment.apps/wordpress created |
WordPressのデプロイを確認するには、次のコマンドを実行します。
|
1 |
kubectl get deployments |
次の出力にWordPressのデプロイステータスが表示されます。

WordPress Web UIへのアクセス
WordPressダッシュボードにアクセスするには、LoadBalancerの外部IPとポート番号が必要です。この情報は、次のコマンドを使用して取得できます。
|
1 |
kubectl get svc |
次の出力にLoadBalancerのIPとポートが表示されます。
|
1 2 3 4 |
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 29m wordpress LoadBalancer 10.100.80.70 78.141.194.181 80:31624/TCP 3m6s wordpress-mysql ClusterIP None <none> 3306/TCP 4m14s |
WordPressポッドに関する詳細情報を取得するには、次のコマンドを実行します。
|
1 |
kubectl describe svc wordpress |
次の出力にWordPressの詳細情報が表示されます。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
Name: wordpress Namespace: default Labels: app=wordpress Annotations: <none> Selector: app=wordpress,tier=frontend Type: LoadBalancer IP Family Policy: SingleStack IP Families: IPv4 IP: 10.100.80.70 IPs: 10.100.80.70 LoadBalancer Ingress: 78.141.194.181 Port: <unset> 80/TCP TargetPort: 80/TCP NodePort: <unset> 31624/TCP Endpoints: 10.244.23.66:80 Session Affinity: None External Traffic Policy: Cluster |
それでは、Webブラウザを開き、次のURLを使用してWordPressのインストールページにアクセスしてください。 http://78.141.194.181:3162. 次の画面にWordPressのインストールページが表示されるはずです。

言語を選択し、必要な手順を完了してインストールプロセスを終了します。
まとめ
この記事では、Kubernetesクラスター上に永続ボリュームを使用してMySQLとWordPressをデプロイする方法を説明しました。また、ウェブサイトのトラフィックに基づいてWordPressのデプロイをスケーリングすることもできます。開発のニーズに応じて、上記のデプロイを使用できるようになりました。
さらに、当社のブログに掲載されているDockerとKubernetesに焦点を当てた他のチュートリアルもご覧ください。
コメント
コメントはまだありません。最初のコメントを投稿しましょう。