VMware Cloud Foundation(VCF)5.2.1 に構築したスーパーバイザーに作成した vSphere Kubernetes Service(VKS)クラスタで、デモ アプリ(Guestbook)を起動してみます。
前回はこちら。
今回の内容です。
今回の環境
VCF 5.2.1 で展開したスーパーバイザー上に、下記のように VKS クラスタを作成してあります。
1. YAML ファイルの用意
VMware Validated Solutions の「Developer Ready Infrastructure for VMware Cloud Foundation」で紹介されている、「Guestbook」というアプリを起動してみます。
YAML ファイルをまとめておくディレクトリを作成します。
gowatana [ ~ ]$ mkdir guestbook
YAML ファイルを、テキスト エディタ(vi など)で作成します。
guestbook/mongo-deployment.yaml
- MongoDB の Pod を起動する Deployment です。
guestbook/mongo-service.yaml
- フロントエンドから MongoDB にアクセスするための Serivce です。
guestbook/frontend-deployment.yaml
- PHP の Web アプリ(フロントエンド)の Pod を起動する Deployment です。
- さりげなく google-samples のイメージがコメントアウトされています。そういえば Guestbook もけっこう歴史のあるデモ アプリのような・・・
guestbook/frontend-service.yaml
- Web ブラウザ(Kubernetes クラスタの外部)からフロントエンドに接続するための Service です。
guestbook ディレクトリには、下記のように4つの YAML ファイルが配置されます。
gowatana [ ~ ]$ ls -1 guestbook/ frontend-deployment.yaml frontend-service.yaml mongo-deployment.yaml mongo-service.yaml
なお、YAML の内容は、下記の guestbook.yml ように 1ファイルにまとめられます。
2. VKS クラスタへの接続
前回の投稿の手順で、kubectl で VKS クラスタに接続します。
VKS クラスタのノードです。
gowatana [ ~ ]$ kubectl get nodes NAME STATUS ROLES AGE VERSION vks01-rl9vz-cswml Ready control-plane 53m v1.30.1+vmware.1-fips vks01-workers-f6dz9-s9x86-vh22p Ready < none > 46m v1.30.1+vmware.1-fips
この時点では、下記のように Namespace が作成されています。
gowatana [ ~ ]$ kubectl get ns NAME STATUS AGE default Active 55m kube-node-lease Active 55m kube-public Active 55m kube-system Active 55m secretgen-controller Active 51m tkg-system Active 51m velero-vsphere-plugin-backupdriver Active 55m vmware-system-antrea Active 51m vmware-system-auth Active 51m vmware-system-cloud-provider Active 55m vmware-system-csi Active 55m vmware-system-tkg Active 55m
3. アプリ(Guestbook)の起動
Guestbook 関連のリソースを作成する Namespace を作成します。
gowatana [ ~ ]$ kubectl create ns app-ns-01 namespace/app-ns-01 created
Guestbook を構成する Pod を起動するために、Namespace のセキュリティ設定を緩和しておきます。
gowatana [ ~ ]$ kubectl label namespace app-ns-01 pod-security.kubernetes.io/enforce=baseline namespace/app-ns-01 labeled
Namespace にラベルが追加されました。
gowatana [ ~ ]$ kubectl get ns app-ns-01 -o yaml | grep pod-security pod-security.kubernetes.io/enforce: baseline
MongoDB の Doployment を作成します。
gowatana [ ~ ]$ kubectl apply -f guestbook/mongo-deployment.yaml -n app-ns-01 deployment.apps/mongo created
下記のように、Deployment から Pod が起動されます。
gowatana [ ~ ]$ kubectl get all -n app-ns-01 NAME READY STATUS RESTARTS AGE pod/mongo-7c55f7b678-bp2dw 1/1 Running 0 77s NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/mongo 1/1 1 1 77s NAME DESIRED CURRENT READY AGE replicaset.apps/mongo-7c55f7b678 1 1 1 77s
MongoDB に接続する Service を作成します。
gowatana [ ~ ]$ kubectl apply -f guestbook/mongo-service.yaml -n app-ns-01 service/mongo created
Service が作成されました。Kubernetes クラスタ内部で通信する Service のため、NSX LB での IP アドレスは設定されません。(EXTERNAL-IP が none のまま)
gowatana [ ~ ]$ kubectl get service -n app-ns-01 NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE mongo ClusterIP 172.16.45.13 <none> 27017/TCP 21s
フロントエンドの Deployment を作成します。
gowatana [ ~ ]$ kubectl apply -f guestbook/frontend-deployment.yaml -n app-ns-01 deployment.apps/frontend created
フロントエンドの Deployment から Pod が起動されました。
gowatana [ ~ ]$ kubectl get all -n app-ns-01 NAME READY STATUS RESTARTS AGE pod/frontend-64b557c8c7-5zpsv 1/1 Running 0 55s pod/frontend-64b557c8c7-7wsmc 1/1 Running 0 55s pod/frontend-64b557c8c7-hmc65 1/1 Running 0 55s pod/mongo-7c55f7b678-bp2dw 1/1 Running 0 5m24s NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/mongo ClusterIP 172.16.45.1327017/TCP 2m57s NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/frontend 3/3 3 3 55s deployment.apps/mongo 1/1 1 1 5m24s NAME DESIRED CURRENT READY AGE replicaset.apps/frontend-64b557c8c7 3 3 3 55s replicaset.apps/mongo-7c55f7b678 1 1 1 5m24s
フロントエンドの Service を作成します。
gowatana [ ~ ]$ kubectl apply -f guestbook/frontend-service.yaml -n app-ns-01 service/frontend created
Web ブラウザからフロントエンドに接続するための Service(TYPE が LoadBalancer) なので、NSX LB による IP アドレス(EXTERNAL-IP)が設定されました。
gowatana [ ~ ]$ kubectl get service -n app-ns-01 NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE frontend LoadBalancer 172.16.35.246 192.168.82.4 80:30477/TCP 20s mongo ClusterIP 172.16.45.13 < none > 27017/TCP 5m10s
4. アプリ起動後の様子
Web ブラウザから、フロントエンドに設定された IP アドレス(192.168.82.4)にアクセスすると、Guestbook アプリの画面が表示できるはずです。
NSX Manager で、VKS クラスタを作成した vSphere 名前空間の名前が含まれるロード バランサの、仮想サーバ欄のリンク「2」を開いてみます。
フロントエンドの Service に設定された IP アドレス(192.168.82.4)が、NSX LB で設定されていることがわかります。
アプリ(Guestbook)の削除
ここまでに作成した Kubernetes リソースを作成する場合は、
gowatana [ ~ ]$ kubectl delete -f guestbook/ -n app-ns-01 deployment.apps "frontend" deleted service "frontend" deleted deployment.apps "mongo" deleted service "mongo" deleted
これで、リソースがすべて削除されました。ちなみに、「kubectl delete ns app-ns-01」で一括削除もできます。
gowatana [ ~ ]$ kubectl get all -n app-ns-01 No resources found in app-ns-01 namespace.
つづく。