Deployment&Serviceの作成
WordPressとMySQLのDeployment、WordPressからMySQLに接続するServiceと外部からWordPressのPodにアクセスするServiceをLoadBalancerタイプで作成します。
Deployment & Serviceの作成
20 | #MySQLのrootパスワードを参照する定義 |
22 | - name: MYSQL_ROOT_PASSWORD |
32 | - name: mysql-local-storage |
33 | mountPath: /var/lib/mysql |
36 | - name: mysql-local-storage |
37 | persistentVolumeClaim: |
18 | - image: wordpress:5.6.2 |
21 | #Service名「mysql-service」を定義 |
22 | - name: WORDPRESS_DB_HOST |
24 | #MySQLのデータベースパスワードを参照する定義 |
25 | - name: WORDPRESS_DB_PASSWORD |
35 | - name: wordpress-local-storage |
36 | mountPath: /var/www/html |
37 | #「wordpress-pvc」を指定する定義 |
39 | - name: wordpress-local-storage |
40 | persistentVolumeClaim: |
41 | claimName: wordpress-pvc |
下表は、Pod内にあるコンテナ(WordPress / MySQL)の定義概要です。
定義 |
説明 |
containers |
・image: イメージレジストリ指定 ・env: 環境変数指定、ここでは環境変数としてMYSQL_ROOT_PASSWORDを定義し、Secretsに登録したパスワードを参照 ・containerPort: コンテナのポート番号を指定 ・volumeMounts: PersistentVolumeClaimで要求するvolumeをマウントするコンテナ側のディレクトリを指定 ・volumes: 連携する PersistentVolumeClaimを指定 |
次に、Serviceを作成します。WordPress PodからこのServiceを経由して、MySQL Podにアクセスするための定義です。
「type: LoadBalancer」を指定することにより、Control Planeのコンポーネントであるcloud-controller-managerとOCIのリソースが連携して、このServiceにEXTERNAL-IPを適用します。
04 | name: wordpress-service |
06 | service.beta.kubernetes.io/oci-load-balancer-shape: "flexible" |
07 | service.beta.kubernetes.io/oci-load-balancer-shape-flex-min: "10" |
08 | service.beta.kubernetes.io/oci-load-balancer-shape-flex-max: "100" |
12 | #type: LoadBalancerを定義 |
マニフェストを適用します。
1 | $ kubectl apply -f mysql.yaml |
2 | $ kubectl apply -f mysql-service.yaml |
3 | $ kubectl apply -f wordpress.yaml |
4 | $ kubectl apply -f wordpress-service.yaml |
Podのステータスを確認します。
3 | NAME READY STATUS RESTARTS AGE |
4 | mysql-8585f7cbd7-9hz79 1/1 Running 0 25h |
5 | nfs-server-5c9d68c76c-kxq4d 1/1 Running 0 26h |
6 | wordpress-76f698c64-2qh8m 1/1 Running 0 25h |
Serviceのステータスを確認し、wordpress-serviceにあるEXTERNAL-IPをブラウザでアクセスしてWordPressの初期画面が表示されれば完了です。
3 | NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE |
4 | kubernetes ClusterIP 10.96.0.1 <none> 443/TCP,12250/TCP 34d |
5 | mysql-service ClusterIP 10.96.94.102 <none> 3306/TCP 26h |
6 | nfs-service ClusterIP 10.96.211.52 <none> 2049/TCP,20048/TCP,111/TCP 26h |
7 | wordpress-service LoadBalancer 10.96.251.162 150.230.xxx.xxx 80:32516/TCP 25h</none></none></none> |
ブラウザを起動して、http://EXTERNAL-IP/wp-admin/install.php
にアクセスします。
WordPressの初期画面
Podのスケールアウトとイン
WordPressのPodを10個増やしてスケールアウトしてみます。マニフェストファイルのreplicasで定義した後に適用もできますが、以下のようにコマンドでも実行できます。
1 | $ kubectl scale deployment wordpress --replicas 10 |
WordPressのPodが10個あることを確認します。
03 | NAME READY STATUS RESTARTS AGE |
04 | mysql-c468c5548-bh6t5 1/1 Running 0 6m41s |
05 | nfs-server-754d98f49b-zmfld 1/1 Running 0 10m |
06 | wordpress-74d8c99c7f-6dhzg 1/1 Running 0 104s |
07 | wordpress-74d8c99c7f-kg96k 1/1 Running 0 104s |
08 | wordpress-74d8c99c7f-m2dg7 1/1 Running 0 104s |
09 | wordpress-74d8c99c7f-mjrsm 1/1 Running 0 6m19s |
10 | wordpress-74d8c99c7f-nzxkd 1/1 Running 0 104s |
11 | wordpress-74d8c99c7f-pbr57 1/1 Running 0 104s |
12 | wordpress-74d8c99c7f-pfrfz 1/1 Running 0 104s |
13 | wordpress-74d8c99c7f-qqtdc 1/1 Running 0 104s |
14 | wordpress-74d8c99c7f-rknbm 1/1 Running 0 105s |
15 | wordpress-74d8c99c7f-svhpj 1/1 Running 0 104s |
WordPressのPodを1個にスケールインします。
1 | $ kubectl scale deployment wordpress --replicas 1 |
5 | NAME READY STATUS RESTARTS AGE |
6 | mysql-c468c5548-bh6t5 1/1 Running 0 6m41s |
7 | nfs-server-754d98f49b-zmfld 1/1 Running 0 10m |
8 | wordpress-74d8c99c7f-mjrsm 1/1 Running 0 6m19s |
オブジェクトの削除
これまでマニフェストを適用して構築したWordPress環境は、オブジェクトをすべて削除することでアンインストールできます。
WordPressとMySQLのDeploymen、Serviceを削除します。以下は適用したマニフェストファイルを指定して削除しています。
1 | $ kubectl delete -f wordpress-service.yaml |
2 | $ kubectl delete -f wordpress.yaml |
3 | $ kubectl delete -f mysql-service.yaml |
4 | $ kubectl delete -f mysql.yaml |
WordPressとMySQLのPersistentVolume、PersistentVolumeClaimを削除します。以下は各オブジェクト名を指定して削除しています。
1 | $ kubectl delete service nfs-service |
2 | $ kubectl delete deployment nfs-server |
3 | $ kubectl delete pvc nfs-pvc |
Secretを削除します。
1 | $ kubectl delete secret mysql |
削除できたことを確認します。
02 | No resources found in default namespace. |
05 | No resources found in default namespace. |
09 | NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE |
10 | kubernetes ClusterIP 10.96.0.1 <none> 443/TCP,12250/TCP 25h |
14 | No resources found</none> |
オブジェクトは、適用したマニフェストまたはオブジェクト名を指定することで削除できます。
おわりに
これまでのアプリケーション開発における環境の背景から、仮想マシンとコンテナの違いやコンテナ単体としてのBuild/Ship/Runを見てきました。そして、コンテナ単体ではできないことを実現するコンテナオーケストレーションの概要と各コンポーネントを見てきました。最後に、Kubernetesクラスタ上でアプリケーションを動かす例として、WordPressの環境を構築する例を見てきました。Kubernetesクラスタ上でアプリケーションを稼働させるイメージを掴めたでしょうか。
本連載記事の内容はKubernetesの一側面ではありますが、これからKubernetesを始める上でお役に立てれば幸いです。