vm.gowatana.jp

NEOにほんごVMware(仮)

VCF 5.2.1 で vSphere Supervisor を有効化してみる。Part-09:VKS クラスタへのアプリ展開(Helm - Wordpress)

VMware Cloud Foundation(VCF)5.2.1 に構築したスーパーバイザーに作成した vSphere Kubernetes Service(VKS)クラスタで、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 を有効化して、動作確認してみる話でした。