Skip navigation
2020

今回は、Cluster API で、vSphere 環境に Kubernetes クラスタを作成してみます。

Cluster API については、下記のあたりが参考になります。

 

The Cluster API Book

https://cluster-api.sigs.k8s.io/

 

Kubenetes でアプリケーションを稼働させるときには、Kubernetes ならではの API を利用することになり、

たとえば、コンテナを YAML 形式のデータで宣言的に展開したりします。

さらに Cluster API という、Kuberentes のプラットフォームに乗るものだけでなく

Kubernetes クラスタ自体も、Kubernetes スタイルの API で管理するというプロジェクトがあります。

 

Cluster API では、Kubernetes クラスタを作成する前段の、ノード(になる VM)の作成からカバー範囲となるので、

そのノードが稼働するインフラむけに、様々な Provider が用意されています。

ここでの「インフラ」とは、AWS、Azure、GCP、vSphere などです。

 

そして、vSphere にも、Cluster API の Provider として

「Kubernetes Cluster API Provider vSphere」(CAPV)が存在しています。

GitHub - kubernetes-sigs/cluster-api-provider-vsphere

この機能は、vSphere 7 の環境で Kubernetes を活用する場合にも、製品の一部として利用されます。

 

今回は、Cluster API を利用して、vSphere 7.0 の vCenter / ESXi / vSAN 環境に Kubernetes クラスタを作成します。

ただし、技術要素の勉強ということで、VMware の製品に組み込まれたものではなく

あえて素の vSphere と Cluster API を利用してみます。

 

Getting Started を参考に進めていきます。

https://github.com/kubernetes-sigs/cluster-api-provider-vsphere/blob/master/docs/getting_started.md

 

1. 環境。

Cluster API は、比較的 API や利用方法が割と変更されるものです。

今回は下記のバージョンのソフトウェアを利用しています。

  • vSphere: vCenter 7.0 / ESXi 7.0 (あと vSAN 7.0)
  • Cluster API: v1alpha3
    • clusterctl(Cluster API の CLI): v0.3.3
    • cluster-api-provider-vsphere(CAPV): v0.6.3
  • kind(Kubernetes in Docker): v0.6.1
  • Kubernetes: v1.17.3
  • antrea: v0.5.1

 

また、せっかくなので、できるだけ VMware Photon OS を利用してみます。

 

2. 事前準備。

まず、vSphere 環境を用意しておきます。

ただし今回は、vCenter / ESXi まわりのセットアップ手順については省略します。

vCenter Server Appliance のデプロイ、ESXi のインストール、vSphere クラスタは作成ずみです。

3ノードの vSAN クラスタです。

photon-01 という VM だけ(この後の手順で作成する)だけが起動してる状態です。

k8s-capv-01.png

 

2-1. vSphere クラスタ / vCenter インベントリの準備。

vSphere 環境には下記のオブジェクトを作成ずみです。

  • データセンタ: lab-dc-02
  • vSphere クラスタ: vSAN-Cluster-02 (vSAN & DRS 有効化)
  • 共有データストア: vSAN を構成ずみ
  • ポートグループ: pg-vlan-0004

 

Cluster API で作成したクラスタがわかりやすいように、

VM フォルダと、リソースプールを作成してあります。

  • VM フォルダ:
    • VM テンプレートの配置: template-01
    • Kubernetes ノード VM の配置: capi-01
  • リソースプール: rp-capi-01

 

また、上記とは別に下記の準備もしてあります。

  • インターネット接続
  • DHCP サーバ: ポートグループ「pg-vlan-0004」に接続した VM がインターネット接続可能にしてある)
  • DNS サーバ: vCenter や、ゲスト OS の名前解決で利用。vCenter の FQDN も登録してある。
  • NTP サーバ

 

2-2. OVA のデプロイ。

Cluster API が自動的にクローンする OVA をデプロイしておきます。

今回は、ほかの VM / VM テンプレートと区別するため VM フォルダ「template-01」を作成して、そこにデプロイします。

.ova ファイルは、下記サイトからダウンロードできます。

GitHub - kubernetes-sigs/cluster-api-provider-vsphere

 

デプロイする .ova ファイルは 2つです。

  • capv-haproxy-v0.6.3.ova
    • HAProxy。VM 名は「capv-haproxy-v0.6.3」としてデプロイ。
  • photon-3-kube-v1.17.3.ova
    • Kubernetes ノードになる。VM 名は「photon-3-kube-v1.17.3」としてデプロイ。

k8s-capv-02.png

 

cluster-api-provider-vsphere(CAPV)では、リンククローンが利用できます。

そのため、デプロイした OVA で、それぞれ下記を実施しておきます。

  1. VM スナップショットを取得
  2. VM テンプレートに変換

 

3. clusterctl 実行環境の準備。

Cluster API を操作する環境を Photon OS で用意します。

Cluster API の CLI「clusterctl」と、その前提となる Docker、kind、kubectl をインストールしたマシンを用意します。

clusterctl を実行するマシンは、これから Kuberentes クラスタを作成する vSphere の内部でも、

外部でもどちらでも構いません。(物理マシンのサーバや、ノート PC でも構いません)

 

Photon OS 3.0 の OVA をデプロイします。

OVA ファイルは「photon-hw13_uefi-3.0-9355405.ova」を利用します。

ちなみに、root の初期パスワードは changeme です。

http://dl.bintray.com/vmware/photon/3.0/Rev2/ova/photon-hw13_uefi-3.0-9355405.ova

 

OVA をデプロイ、起動したら、ネットワーク、DNS サーバ、ホスト名などの設定を済ませておきます。

今回は、photon-01 というホスト名にしています。

ここから先のコマンドラインでの手順は、すべてこの photon-01 から実施します。

 

Docker は、Photon OS の OVA にデフォルトでインストールされています。

docker などの RPM パッケージを、アップデートしておきます。

root@photon-01 [ ~ ]# tdnf update -y

root@photon-01 [ ~ ]# rpm -q docker

docker-18.09.9-1.ph3.x86_64

 

Docker のサービスを起動しておきます。

root@photon-01 [ ~ ]# systemctl start docker

root@photon-01 [ ~ ]# systemctl enable docker

 

この先の手順で利用する RPM (jq、diff コマンドなど)を追加インストールしておきます。

root@photon-01 [ ~ ]# tdnf install -y jq diffutils

 

OS を再起動しておきます。

root@photon-01 [ ~ ]# reboot

 

Photon OS 3.0 のホストで、docker が起動された状態です。

root@photon-01 [ ~ ]# systemctl is-active docker

active

root@photon-01 [ ~ ]# cat /etc/photon-release

VMware Photon OS 3.0

PHOTON_BUILD_NUMBER=11dd065

 

kubectl をインストールします。

kubectl のバージョンは、Cluster API で作成するつもりの Kuberentes バージョンに合わせています。

root@photon-01 [ ~ ]# curl -L -o /usr/local/bin/kubectl https://storage.googleapis.com/kubernetes-release/release/v1.17.3/bin/linux/amd64/kubectl

root@photon-01 [ ~ ]# chmod +x /usr/local/bin/kubectl

root@photon-01 [ ~ ]# kubectl version --client

Client Version: version.Info{Major:"1", Minor:"17", GitVersion:"v1.17.3", GitCommit:"06ad960bfd03b39c8310aaf92d1e7c12ce618213", GitTreeState:"clean", BuildDate:"2020-02-11T18:14:22Z", GoVersion:"go1.13.6", Compiler:"gc", Platform:"linux/amd64"}

 

kind をインストールします。

root@photon-01 [ ~ ]# curl -L -o /usr/local/bin/kind https://github.com/kubernetes-sigs/kind/releases/download/v0.6.1/kind-linux-amd64

root@photon-01 [ ~ ]# chmod +x /usr/local/bin/kind

root@photon-01 [ ~ ]# kind version

kind v0.6.1 go1.13.4 linux/amd64

 

clusterctl をインストールします。

今回は、v0.3.3 を利用しています。

Release v0.3.3 · kubernetes-sigs/cluster-api · GitHub

root@photon-01 [ ~ ]# curl -L -o /usr/local/bin/clusterctl https://github.com/kubernetes-sigs/cluster-api/releases/download/v0.3.3/clusterctl-linux-amd64

root@photon-01 [ ~ ]# chmod +x /usr/local/bin/clusterctl

root@photon-01 [ ~ ]# clusterctl version

clusterctl version: &version.Info{Major:"0", Minor:"3", GitVersion:"v0.3.3", GitCommit:"ecff70af1b839c4086335234d88b1b8c00c3383c", GitTreeState:"clean", BuildDate:"2020-03-27T22:25:19Z", GoVersion:"go1.13.8", Compiler:"gc", Platform:"linux/amd64"}

 

4. kind での管理クラスタ作成。

Cluster API では、Cluster API で Kuberentes クラスタを管理する「管理クラスタ」を用意して、

そこから、アプリケーションを実行するための「Workload クラスタ」を作成 / 管理します。

まずは「管理クラスタ」を作成します。

 

4-1 kind クラスタの作成。

kind で、Cluster API での処理の起点になる Kuberentes クラスタを作成します。

これは、kind コマンドを実行したマシンに作成される Docker コンテナによる 1 ノードの Kuberentes クラスタです。

[root@lab-kind-01 ~]# kind create cluster

 

「kind」という名前の、1ノードの Kuberentes クラスタが作成されました。

kubernetes に接続する kubeconfig は、kind で生成された $HOME/.kube/config が利用されています。

このクラスタは kind のバージョンにあわせて Kuberentes  v1.16.3 です。

(このあと Cluster API で作成する Kuberentes は別のバージョンにします)

[root@lab-kind-01 ~]# kind get clusters

kind

root@photon-01 [ ~ ]# kubectl get nodes

NAME                 STATUS   ROLES    AGE     VERSION

kind-control-plane   Ready    master   2m14s   v1.16.3

 

この時点で kind クラスタで起動されている Pod を確認しておきます。

root@photon-01 [ ~ ]# kubectl get pods -A

NAMESPACE     NAME                                         READY   STATUS    RESTARTS   AGE

kube-system   coredns-5644d7b6d9-59p6t                     1/1     Running   0          2m33s

kube-system   coredns-5644d7b6d9-qxscv                     1/1     Running   0          2m33s

kube-system   etcd-kind-control-plane                      1/1     Running   0          2m17s

kube-system   kindnet-h6xr6                                1/1     Running   1          2m33s

kube-system   kube-apiserver-kind-control-plane            1/1     Running   2          2m16s

kube-system   kube-controller-manager-kind-control-plane   1/1     Running   1          2m25s

kube-system   kube-proxy-4t6nm                             1/1     Running   0          2m33s

kube-system   kube-scheduler-kind-control-plane            1/1     Running   3          2m53s

 

4-2. CAPV むけの準備。

Kubernetes Cluster API Provider vSphere(CAPV)の利用にむけた準備をします。

 

CAPV でクローンされる VM に自動配置される SSH 鍵を作成します。

今回のマシンは、CAPV 専用に用意しているので、デフォルトのパスにファイルを作成しています。

root@photon-01 [ ~ ]# echo y | ssh-keygen -t rsa -f $HOME/.ssh/id_rsa -P ''

 

ホームディレクトリ直下に、.cluster-api ディレクトリを作成します。

root@photon-01 [ ~ ]# mkdir $HOME/.cluster-api

 

ラボ環境の vSphere にあわせた

cat << EOF > $HOME/.cluster-api/clusterctl.yaml

# Controller settings

VSPHERE_USERNAME: "administrator@vsphere.local"

VSPHERE_PASSWORD: "VMware1!"

 

# Required workload cluster default settings

VSPHERE_SERVER: "lab-vc-02.go-lab.jp"

VSPHERE_DATACENTER: "lab-dc-02"

VSPHERE_DATASTORE: "vsanDatastore-702"

VSPHERE_NETWORK: "pg-vlan-0004"

VSPHERE_RESOURCE_POOL: "vSAN-Cluster-702/Resources/rp-capi-01"

VSPHERE_FOLDER: "vm/capi-01"

VSPHERE_TEMPLATE: "photon-3-kube-v1.17.3"

VSPHERE_HAPROXY_TEMPLATE: "capv-haproxy-v0.6.3"

VSPHERE_SSH_AUTHORIZED_KEY: XXX

EOF

 

前の手順で作成した SSH 公開鍵のファイル(id_rsa.pub)の内容を、clusterctl.yaml の VSPHERE_SSH_AUTHORIZED_KEY に記載します。

sed コマンドを利用していますが、vi などエディタでの編集で大丈夫です。

root@photon-01 [ ~ ]# cp $HOME/.cluster-api/clusterctl.yaml $HOME/clusterctl.yaml_orig

root@photon-01 [ ~ ]# sed -i "s|VSPHERE_SSH_AUTHORIZED_KEY:.*|VSPHERE_SSH_AUTHORIZED_KEY\:\ \"$(cat $HOME/.ssh/id_rsa.pub)\"|" $HOME/.cluster-api/clusterctl.yaml

root@photon-01 [ ~ ]# diff $HOME/clusterctl.yaml_orig $HOME/.cluster-api/clusterctl.yaml

14c14

< VSPHERE_SSH_AUTHORIZED_KEY: XXX

---

> VSPHERE_SSH_AUTHORIZED_KEY: "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDG/NQQ3WH+Wy0UJrfL5ztSIqSYhdxkzHhxfaLnUGPgYMD3uIGQU0A4+3vTDUZF563iWlS99bOTaARyJs1BJEPHfoSrrtpMXXXXXXXXXXXXXXXXXXXXXXXY3Gy17Jxu2CC5v root@photon-01"

 

4-3. kind クラスタの clusterctl init。

clusterctl init で、kind クラスタで Cluster API を利用する準備をします。

vSphere むけの Cluster API Provider を利用するので、「--infrastructure vsphere」を指定しています。

root@photon-01 [ ~ ]# clusterctl init --infrastructure vsphere

Fetching providers

Installing cert-manager

Waiting for cert-manager to be available...

Installing Provider="cluster-api" Version="v0.3.4" TargetNamespace="capi-system"

Installing Provider="bootstrap-kubeadm" Version="v0.3.4" TargetNamespace="capi-kubeadm-bootstrap-system"

Installing Provider="control-plane-kubeadm" Version="v0.3.4" TargetNamespace="capi-kubeadm-control-plane-system"

Installing Provider="infrastructure-vsphere" Version="v0.6.3" TargetNamespace="capv-system"

 

Your management cluster has been initialized successfully!

 

You can now create your first workload cluster by running the following:

 

  clusterctl config cluster [name] --kubernetes-version [version] | kubectl apply -f -

 

 

kind クラスタに Cluster API で利用される Pod が追加起動され、

管理クラスタとして準備された様子がわかります。

root@photon-01 [ ~ ]# kubectl get pods -A

NAMESPACE                           NAME                                                             READY   STATUS    RESTARTS   AGE

capi-kubeadm-bootstrap-system       capi-kubeadm-bootstrap-controller-manager-fd9f9c8f7-n66q9        2/2     Running   1          3m25s

capi-kubeadm-control-plane-system   capi-kubeadm-control-plane-controller-manager-f7c75497-2vbt7     2/2     Running   0          2m49s

capi-system                         capi-controller-manager-5d7b4cf8f6-4dlvd                         2/2     Running   1          3m56s

capi-webhook-system                 capi-controller-manager-7d7f5888cf-6fq4t                         2/2     Running   0          4m5s

capi-webhook-system                 capi-kubeadm-bootstrap-controller-manager-679cb64b54-dv2t2       2/2     Running   0          3m43s

capi-webhook-system                 capi-kubeadm-control-plane-controller-manager-788d79c866-rv44l   2/2     Running   0          3m12s

capi-webhook-system                 capv-controller-manager-6bbbc59845-2pptf                         2/2     Running   0          92s

capv-system                         capv-controller-manager-5c8648757b-gr2fx                         2/2     Running   0          91s

cert-manager                        cert-manager-69b4f77ffc-vx2mq                                    1/1     Running   0          13m

cert-manager                        cert-manager-cainjector-576978ffc8-nkhqd                         1/1     Running   1          13m

cert-manager                        cert-manager-webhook-c67fbc858-22zrb                             1/1     Running   0          13m

kube-system                         coredns-5644d7b6d9-59p6t                                         1/1     Running   0          20m

kube-system                         coredns-5644d7b6d9-qxscv                                         1/1     Running   0          20m

kube-system                         etcd-kind-control-plane                                          1/1     Running   0          20m

kube-system                         kindnet-h6xr6                                                    1/1     Running   1          20m

kube-system                         kube-apiserver-kind-control-plane                                1/1     Running   2          20m

kube-system                         kube-controller-manager-kind-control-plane                       1/1     Running   2          20m

kube-system                         kube-proxy-4t6nm                                                 1/1     Running   0          20m

kube-system                         kube-scheduler-kind-control-plane                                1/1     Running   4          20m

 

幅が広くて見にくいので、一応スクリーンショットも・・・

k8s-capv-03.png

 

5. Workload クラスタの作成。

ここからは、管理クラスタから Workload クラスタを作成します。

 

5-1. Workload クラスタの YAML 作成。

まず、clusterctl config cluster コマンドで、Workload クラスタの作成で使用する YAML ファイル(cluster.yaml)を作成します。

今回は下記のように指定しています。

Kuberentes のバージョンは、Github からダウンロードできる .ova のバージョンに合わせておきました。

  • 作成する Workload クラスタの名前: capvdemo
  • Kuberentes のバージョン: v1.17.3
  • control-plane のノード数: 1
  • Worker ノード数: 3

root@photon-01 [ ~ ]# clusterctl config cluster capvdemo --infrastructure vsphere --kubernetes-version v1.17.3 --control-plane-machine-count 1 --worker-machine-count 3 > ./cluster.yaml

 

cluster.yaml を、ラボ環境にあわせて編集します。

  • Pod のネットワークアドレス(cidrBlocks)のデフォルト 192.168.0.0/16 が、既存ネットワークと重複してしまうので、別のレンジに変更。
    ラボにもとからある別の Kuberentes クラスタに合わせた。
  • クローンされる VM(HAProxy と Kuberentes ノードの両方)のメモリサイズを 8192 → 4096 に変更。

 

cluster.yaml の一部より。

Cluster API v1alpha3 が利用されていることもわかります。

root@photon-01 [ ~ ]# head cluster.yaml

apiVersion: cluster.x-k8s.io/v1alpha3

kind: Cluster

metadata:

  name: capvdemo

  namespace: default

spec:

  clusterNetwork:

    pods:

      cidrBlocks:

      - 192.168.0.0/16 ★このあたりを編集

 

今回の編集は最小限にしました。

root@photon-01 [ ~ ]# cp ./cluster.yaml  ./cluster.yaml_orig

root@photon-01 [ ~ ]# vi cluster.yaml

root@photon-01 [ ~ ]# diff ./cluster.yaml_orig ./cluster.yaml

10c10

<       - 192.168.0.0/16

---

>       - 100.96.0.0/11

39c39

<     memoryMiB: 8192

---

>     memoryMiB: 4096

101c101

<       memoryMiB: 8192

---

>       memoryMiB: 4096

 

作成した cluster.yaml ファイルで、Workload クラスタを作成します。

ここからは clusterctl ではなく、kubectl を利用します。

また、kukbernetes に接続する kubeconfig は特に指定していませんが、

kind で自動生成される $HOME/.kube/config ファイルが使用されています。

root@photon-01 [ ~ ]# kubectl apply -f cluster.yaml

cluster.cluster.x-k8s.io/capvdemo created

haproxyloadbalancer.infrastructure.cluster.x-k8s.io/capvdemo created

vspherecluster.infrastructure.cluster.x-k8s.io/capvdemo created

vspheremachinetemplate.infrastructure.cluster.x-k8s.io/capvdemo created

kubeadmcontrolplane.controlplane.cluster.x-k8s.io/capvdemo created

kubeadmconfigtemplate.bootstrap.cluster.x-k8s.io/capvdemo-md-0 created

machinedeployment.cluster.x-k8s.io/capvdemo-md-0 created

 

Cluster API ならではの Cluster  リソース が作成され、Povisioned になります。

root@photon-01 [ ~ ]# kubectl get cluster

NAME       PHASE

capvdemo   Provisioned

 

vSphere Client を見ていると、YAML ファイルで指定したリソースプール / VM フォルダに、VM のクローンが開始されます。

k8s-capv-05.png

 

ちなみに、cluster.yaml で指定した vSphere まわりのパラメータが間違ったり、

ノードのリソースが不足してたりすると、処理が失敗したりします。

この場合、下記のように capv-system ネームスペースの Pod(というかコンテナ)あたりのログを確認してみるとよいかなと思います。

(例は capv-controller-manager-XXXX Pod の manager コンテナのログ確認)

root@photon-01 [ ~ ]# kubectl -n capv-system logs capv-controller-manager-XXXX manager

 

今回のクラスタ作成では、3種類の VM が起動されます。

  • HAProxy(~-lb 1台)
  • Control Plane(capvdemo-~ 1台)
  • ワーカー ノード(capvdemo-md-0-~ が 3台)

k8s-capv-06.png

 

Kuberentes ノードが vSphere の VM として作成される様子も確認できます。

PHASE がすべて Running になったら完了です。

root@photon-01 [ ~ ]# kubectl get machine

NAME                            PROVIDERID                                       PHASE

capvdemo-md-0-c66cff7d6-2954x   vsphere://4229867c-d72f-219a-a205-0bfa5a776b56   Running

capvdemo-md-0-c66cff7d6-jskwv   vsphere://422936dc-4bed-f2b4-5cc3-115e0a822b74   Running

capvdemo-md-0-c66cff7d6-rc6c7   vsphere://42293c95-01ea-07a9-9641-e1c924deecd9   Running

capvdemo-rphzb                  vsphere://422914fa-594b-c1d4-3f01-ff3875223ddf   Running

 

Kuberentes のワーカー ノードは、MachineDeployment(略称は md)というリソースで管理されています。

root@photon-01 [ ~ ]# kubectl get machinedeployment

NAME            PHASE     REPLICAS   AVAILABLE   READY

capvdemo-md-0   Running   3          3           3

 

5-2. Workload クラスタへの接続。

Workload クラスタに接続するには、kind クラスタの Secret リソース「クラスタ名-kubeconfig」 の情報をもとに、kubeconfig を作成します。

root@photon-01 [ ~ ]# kubectl get secret capvdemo-kubeconfig -o json | jq -r .data.value | base64 --decode > $HOME/kubeconfig_capvdemo

 

作成した kubeconfig で、Workload クラスタに接続できます。

root@photon-01 [ ~ ]# kubectl --kubeconfig=$HOME/kubeconfig_capvdemo get nodes

NAME                            STATUS     ROLES    AGE     VERSION

capvdemo-md-0-c66cff7d6-2954x   NotReady   <none>   8m31s   v1.17.3

capvdemo-md-0-c66cff7d6-jskwv   NotReady   <none>   8m39s   v1.17.3

capvdemo-md-0-c66cff7d6-rc6c7   NotReady   <none>   6m39s   v1.17.3

capvdemo-rphzb                  NotReady   master   16m     v1.17.3

 

ここからは、作成した kubeconfig を環境変数 KUBECONFIG で指定して、

kubectl ではデフォルトで Workload クラスタに接続します。

root@photon-01 [ ~ ]# export KUBECONFIG=$HOME/kubeconfig_capvdemo

root@photon-01 [ ~ ]# kubectl get nodes

NAME                            STATUS     ROLES    AGE     VERSION

capvdemo-md-0-c66cff7d6-2954x   NotReady   <none>   10m     v1.17.3

capvdemo-md-0-c66cff7d6-jskwv   NotReady   <none>   10m     v1.17.3

capvdemo-md-0-c66cff7d6-rc6c7   NotReady   <none>   8m32s   v1.17.3

capvdemo-rphzb                  NotReady   master   18m     v1.17.3

 

しばらく待つと、Workload クラスタでは下記のように Pod が起動されます。

この時点では、まだ Pod のネットワーク Add-on が起動されていないので、

まだノードが NotReady、いくつかの Pod が Pending 状態です。

root@photon-01 [ ~ ]# kubectl get pods -A

NAMESPACE     NAME                                     READY   STATUS    RESTARTS   AGE

kube-system   coredns-6955765f44-ncrg8                 0/1     Pending   0          19m

kube-system   coredns-6955765f44-vtvc7                 0/1     Pending   0          19m

kube-system   etcd-capvdemo-rphzb                      1/1     Running   0          19m

kube-system   kube-apiserver-capvdemo-rphzb            1/1     Running   0          19m

kube-system   kube-controller-manager-capvdemo-rphzb   1/1     Running   3          19m

kube-system   kube-proxy-f8j94                         1/1     Running   0          11m

kube-system   kube-proxy-pz66s                         1/1     Running   0          11m

kube-system   kube-proxy-rfgz5                         1/1     Running   0          9m38s

kube-system   kube-proxy-xx9j8                         1/1     Running   0          19m

kube-system   kube-scheduler-capvdemo-rphzb            1/1     Running   4          19m

kube-system   vsphere-cloud-controller-manager-mqp5r   1/1     Running   2          19m

kube-system   vsphere-csi-controller-0                 0/5     Pending   0          19m

 

ちなみに、ここまでの時点で、下記のように Workload クラスタに接続できなくなることがあります。

しばらく待っても復旧しない場合は、HAProxy や master ノードの VM を手動再起動してみると、手早く復旧できたりします。

root@photon-01 [ ~ ]# kubectl --kubeconfig=./kubeconfig_capvdemo get pods -A

Unable to connect to the server: EOF

 

5-3. Pod Network Add-on インストール。(antrea)

CAPV の Github での Getting-Start では calico を利用していますが、

今回は、せっかくなので antrea をインストールしてみます。

antrea v0.5.1 を指定してインストールしています。

root@photon-01 [ ~ ]# kubectl apply -f https://github.com/vmware-tanzu/antrea/releases/download/v0.5.1/antrea.yml

customresourcedefinition.apiextensions.k8s.io/antreaagentinfos.clusterinformation.antrea.tanzu.vmware.com created

customresourcedefinition.apiextensions.k8s.io/antreacontrollerinfos.clusterinformation.antrea.tanzu.vmware.com created

serviceaccount/antctl created

serviceaccount/antrea-agent created

serviceaccount/antrea-controller created

clusterrole.rbac.authorization.k8s.io/antctl created

clusterrole.rbac.authorization.k8s.io/antrea-agent created

clusterrole.rbac.authorization.k8s.io/antrea-controller created

rolebinding.rbac.authorization.k8s.io/antrea-controller-authentication-reader created

clusterrolebinding.rbac.authorization.k8s.io/antctl created

clusterrolebinding.rbac.authorization.k8s.io/antrea-agent created

clusterrolebinding.rbac.authorization.k8s.io/antrea-controller created

configmap/antrea-config-b2b5bdkh8t created

service/antrea created

deployment.apps/antrea-controller created

apiservice.apiregistration.k8s.io/v1beta1.networking.antrea.tanzu.vmware.com created

apiservice.apiregistration.k8s.io/v1beta1.system.antrea.tanzu.vmware.com created

daemonset.apps/antrea-agent created

 

少し待つと、kube-system ネームスペースで、antrea 関連の Pod が起動されます。

ちなみに、CAPV の Workload クラスタでは、vSAN でおなじみのクラウド ネイティブ ストレージが

デフォルトで利用可能になっていて、vsphere-csi-~ という Pod も起動されます。

root@photon-01 [ ~ ]# kubectl get pods -A

NAMESPACE     NAME                                     READY   STATUS    RESTARTS   AGE

kube-system   antrea-agent-4wcnm                       2/2     Running   3          30m

kube-system   antrea-agent-57br8                       2/2     Running   0          30m

kube-system   antrea-agent-npgpm                       2/2     Running   0          30m

kube-system   antrea-agent-zf64r                       2/2     Running   0          30m

kube-system   antrea-controller-5fff85b9b4-c74gg       1/1     Running   0          31m

kube-system   coredns-6955765f44-ncrg8                 1/1     Running   0          54m

kube-system   coredns-6955765f44-vtvc7                 1/1     Running   0          54m

kube-system   etcd-capvdemo-rphzb                      1/1     Running   1          54m

kube-system   kube-apiserver-capvdemo-rphzb            1/1     Running   1          54m

kube-system   kube-controller-manager-capvdemo-rphzb   1/1     Running   9          54m

kube-system   kube-proxy-f8j94                         1/1     Running   0          46m

kube-system   kube-proxy-pz66s                         1/1     Running   0          46m

kube-system   kube-proxy-rfgz5                         1/1     Running   0          44m

kube-system   kube-proxy-xx9j8                         1/1     Running   1          54m

kube-system   kube-scheduler-capvdemo-rphzb            1/1     Running   10         54m

kube-system   vsphere-cloud-controller-manager-mqp5r   1/1     Running   8          54m

kube-system   vsphere-csi-controller-0                 5/5     Running   5          54m

kube-system   vsphere-csi-node-9gkxs                   3/3     Running   0          19m

kube-system   vsphere-csi-node-cwb5q                   3/3     Running   6          19m

kube-system   vsphere-csi-node-jzcfb                   3/3     Running   7          19m

kube-system   vsphere-csi-node-qqc2b                   3/3     Running   0          19m

 

見栄え的に、スクリーンショットも・・・

ちなみに Pod の RESTARTS が多いのは、ラボのリソースが不足しているためかなと思います。

k8s-capv-07.png

 

Pod の Network Add-on が起動されたことで、ノードも Ready になりました。

これで、Workload クラスタが利用できる状態になりました。

root@photon-01 [ ~ ]# kubectl get nodes

NAME                            STATUS   ROLES    AGE   VERSION

capvdemo-md-0-c66cff7d6-2954x   Ready    <none>   46m   v1.17.3

capvdemo-md-0-c66cff7d6-jskwv   Ready    <none>   46m   v1.17.3

capvdemo-md-0-c66cff7d6-rc6c7   Ready    <none>   44m   v1.17.3

capvdemo-rphzb                  Ready    master   54m   v1.17.3

 

慣れると、検証 Kuberentes クラスタを手軽に作成できてよいかなと思います。

 

以上、Cluster API Provider for vSphere で Kuberentes クラスタを作成してみる話でした。