VMware Cloud Foundation(VCF)5.2.1 に構築したスーパーバイザーに作成した vSphere Kubernetes Service(VKS)クラスタで、Helm を使用して Wordprsss を起動してみます。
前回はこちら。
今回の内容です。
- 今回の環境
- 1. Helm のインストール
- 2. VKS クラスタへの接続
- 3. Helm リリース(Wordprsss)のインストール
- 4. アプリ起動後の様子
- Helm リリース(Wordprsss)の削除
今回の環境
VCF 5.2.1 で展開したスーパーバイザー上に、下記のように VKS クラスタを作成してあります。
今回も、VMware Validated Solutions の「Developer Ready Infrastructure for VMware Cloud Foundation」で紹介されている例を参考に、Helm で Wordprsss をインストールしてみます。
1. Helm のインストール
kubectl を実行する Linux マシンに、Helm の tar.gz アーカイブをダウンロードします。
gowatana [ ~ ]$ curl -kOL https://get.helm.sh/helm-v3.16.3-linux-amd64.tar.gz
tar.gz ファイルを展開します。
gowatana [ ~ ]$ tar zxvf helm-v3.16.3-linux-amd64.tar.gz linux-amd64/ linux-amd64/LICENSE linux-amd64/helm linux-amd64/README.md
helm のバイナリを、kubectl と同じディレクトリ($HOME/bin)にインストールします。
gowatana [ ~ ]$ install linux-amd64/helm $HOME/bin/
tar.gz を展開したファイルは、削除しておきます。
gowatana [ ~ ]$ rm -rf linux-amd64
今回は kubectl のインストールで $HOME/bin ディレクトリにパスを通してあるので、helm が実行できるはずです。
gowatana [ ~ ]$ helm version version.BuildInfo{Version:"v3.16.3", GitCommit:"cfd07493f46efc9debd9cc1b02a0961186df7fdf", GitTreeState:"clean", GoVersion:"go1.22.7"}
2. VKS クラスタへの接続
Helm でも kubeconfig をもとに Kubernetes クラスタに接続するので、kubectl で VKS クラスタに接続しておきます。手順は下記の投稿と同様です。
3. Helm リリース(Wordprsss)のインストール
Helm のリリース(アプリ)をインストールする Namespace を作成します。
- Namespace:app-ns-02
gowatana [ ~ ]$ kubectl create ns app-ns-02 namespace/app-ns-02 created
Bitnami の Helm リポジトリを追加します。
gowatana [ ~ ]$ helm repo add bitnami https://charts.bitnami.com/bitnami "bitnami" has been added to your repositories
リポジトリの情報を更新します。
gowatana [ ~ ]$ helm repo update Hang tight while we grab the latest from your chart repositories... ...Successfully got an update from the "bitnami" chart repository Update Complete. ⎈Happy Helming!⎈
利用可能な Wordprss の Helm Chart(bitnami/wordpress)を確認しておきます。
gowatana [ ~ ]$ helm search repo bitnami/wordpress NAME CHART VERSION APP VERSION DESCRIPTION bitnami/wordpress 24.0.8 6.7.1 WordPress is the world's most popular blogging ... bitnami/wordpress-intel 2.1.31 6.1.1 DEPRECATED WordPress for Intel is the most popu...
Helm Chart のインストール時に指定するため、VKS に作成されている StorageClass の名前を確認しておきます。
gowatana [ ~ ]$ kubectl get storageclasses.storage.k8s.io NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE vcf-w01-cl01-vsan-storage-policy csi.vsphere.vmware.com Delete Immediate true 5h47m vcf-w01-cl01-vsan-storage-policy-latebinding csi.vsphere.vmware.com Delete WaitForFirstConsumer true 5h47m
Wordprss の Helm Chart は、下記のようにインストールします。
- Helm アプリの名前は wp01 にしています。
- Wordpress 管理者のユーザー名は wp-admin、パスワードは VMware1! にします。
helm install wp01 bitnami/wordpress \ --version 24.0.8 \ --namespace app-ns-02 \ --set global.storageClass=vcf-w01-cl01-vsan-storage-policy \ --set wordpressBlogName="Wordpress Instance" \ --set wordpressUsername=wp-admin \ --set wordpressPassword='VMware1!'
helm install を実際に実行すると、Wordprss にアクセスするための情報を確認する方法が表示されます。
gowatana [ ~ ]$ helm install wp01 bitnami/wordpress \ --version 24.0.8 \ --namespace app-ns-02 \ --set global.storageClass=vcf-w01-cl01-vsan-storage-policy \ --set wordpressBlogName="Wordpress Instance" \ --set wordpressUsername=wp-admin \ --set wordpressPassword='VMware1!' NAME: wp01 LAST DEPLOYED: Sat Nov 30 09:06:53 2024 NAMESPACE: app-ns-02 STATUS: deployed REVISION: 1 TEST SUITE: None NOTES: CHART NAME: wordpress CHART VERSION: 24.0.8 APP VERSION: 6.7.1 ** Please be patient while the chart is being deployed ** Your WordPress site can be accessed through the following DNS name from within your cluster: wp01-wordpress.app-ns-02.svc.cluster.local (port 80) To access your WordPress site from outside the cluster follow the steps below: 1. Get the WordPress URL by running these commands: NOTE: It may take a few minutes for the LoadBalancer IP to be available. Watch the status with: 'kubectl get svc --namespace app-ns-02 -w wp01-wordpress' export SERVICE_IP=$(kubectl get svc --namespace app-ns-02 wp01-wordpress --template "{{ range (index .status.loadBalancer.ingress 0) }}{{ . }}{{ end }}") echo "WordPress URL: http://$SERVICE_IP/" echo "WordPress Admin URL: http://$SERVICE_IP/admin" 2. Open a browser and access WordPress using the obtained URL. 3. Login with the following credentials below to see your blog: echo Username: wp-admin echo Password: $(kubectl get secret --namespace app-ns-02 wp01-wordpress -o jsonpath="{.data.wordpress-password}" | base64 -d) WARNING: There are "resources" sections in the chart not set. Using "resourcesPreset" is not recommended for production. For production installations, please set the following values according to your workload needs: - resources +info https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
Wordpress の Helm アプリがインストールされました。
gowatana [ ~ ]$ helm list -n app-ns-02 NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION wp01 app-ns-02 1 2024-11-30 09:06:53.483093819 +0000 UTC deployed wordpress-24.0.8 6.7.1
Kubernetes クラスタには、下記のようなリソースが作成されます。
gowatana [ ~ ]$ kubectl get all -n app-ns-02 NAME READY STATUS RESTARTS AGE pod/wp01-mariadb-0 1/1 Running 0 2m42s pod/wp01-wordpress-687c8c56cb-dg852 1/1 Running 0 2m43s NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/wp01-mariadb ClusterIP 172.16.188.33 <none> 3306/TCP 2m43s service/wp01-mariadb-headless ClusterIP None <none> 3306/TCP 2m43s service/wp01-wordpress LoadBalancer 172.16.139.238 192.168.82.4 80:31397/TCP,443:30651/TCP 2m43s NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/wp01-wordpress 1/1 1 0 2m43s NAME DESIRED CURRENT READY AGE replicaset.apps/wp01-wordpress-687c8c56cb 1 1 1 2m43s NAME READY AGE statefulset.apps/wp01-mariadb 1/1 2m43s
4. アプリ起動後の様子
Wordpress にアクセスするための IP アドレスを確認します。LoadBalancer Service には、「192.168.82.4」が設定されました。ちなみにこの IP アドレスは、NSX LB によるものです。
gowatana [ ~ ]$ kubectl get service wp01-wordpress -n app-ns-02 NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE wp01-wordpress LoadBalancer 172.16.139.238 192.168.82.4 80:31397/TCP,443:30651/TCP 8m12s
Web ブラウザから LoadBalancer Service の IP アドレスにアクセスすると、Wordpress による Blog サイトが表示されるはずです。
Web ブラウザで、/wp-admin にアクセスすると、管理画面にアクセスできます。
- URL:http://<LoadBalancer の IP アドレス>/wp-admin
- helm install で指定した管理者ユーザー(wp-admin / VMware1!)
下記のように、管理画面にログインできます。
Wordpress の Helm アプリでは、データを Kubernetes の PersistentVolume(PV)に格納します。VKS クラスタでは、下記のように PersistentVolumeClaim(PVC)が作成されています。
gowatana [ ~ ]$ kubectl get pvc -n app-ns-02 NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS VOLUMEATTRIBUTESCLASS AGE data-wp01-mariadb-0 Bound pvc-fe9aa02f-6be5-4365-a8e7-dfe90ab0c965 8Gi RWO vcf-w01-cl01-vsan-storage-policy <unset> 10m wp01-wordpress Bound pvc-3eafadae-673d-45c8-9cb9-e4eeb8e5abbb 10Gi RWO vcf-w01-cl01-vsan-storage-policy <unset> 10m
PVC で、PV が動的に作成されています。
gowatana [ ~ ]$ kubectl get pv NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS VOLUMEATTRIBUTESCLASS REASON AGE pvc-3eafadae-673d-45c8-9cb9-e4eeb8e5abbb 10Gi RWO Delete Bound app-ns-02/wp01-wordpress vcf-w01-cl01-vsan-storage-policy <unset> 10m pvc-fe9aa02f-6be5-4365-a8e7-dfe90ab0c965 8Gi RWO Delete Bound app-ns-02/data-wp01-mariadb-0 vcf-w01-cl01-vsan-storage-policy <unset> 10m
VKS の PV は、スーパーバイザーの「クラウド ネイティブ ストレージ」画面から確認できます。PV の名前 →「Kubernetes オブジェクト」タブを開きます。
画面を下にスクロールすると、PV(の VMDK)と、対応する VKS クラスタ上のリソースが確認できます。
Helm リリース(Wordprsss)の削除
Helm リリースを削除するには、下記のようにコマンドを実行します。
gowatana [ ~ ]$ helm uninstall wp01 -n app-ns-02 release "wp01" uninstalled
これで、Namespace からリソースが削除されます。
gowatana [ ~ ]$ kubectl get all -n app-ns-02 No resources found in app-ns-02 namespace.
ただし、PVC & PV には自動削除されないものがあります。これは、StatefulSet の volumeClaimTemplates で動的に作成されているためと考えられます。
gowatana [ ~ ]$ kubectl get pvc -n app-ns-02 NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS VOLUMEATTRIBUTESCLASS AGE data-wp01-mariadb-0 Bound pvc-fe9aa02f-6be5-4365-a8e7-dfe90ab0c965 8Gi RWO vcf-w01-cl01-vsan-storage-policy <unset> 17m gowatana [ ~ ]$ kubectl get pv -n app-ns-02 NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS VOLUMEATTRIBUTESCLASS REASON AGE pvc-fe9aa02f-6be5-4365-a8e7-dfe90ab0c965 8Gi RWO Delete Bound app-ns-02/data-wp01-mariadb-0 vcf-w01-cl01-vsan-storage-policy <unset> 17m
PVC & PV を削除するには、下記のようにコマンドを実行します。
gowatana [ ~ ]$ kubectl delete pvc data-wp01-mariadb-0 -n app-ns-02
以上、VCF 5.2.1 で vSphere Supervisor を有効化して、動作確認してみる話でした。