今回は、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 だけ(この後の手順で作成する)だけが起動してる状態です。
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」としてデプロイ。
cluster-api-provider-vsphere(CAPV)では、リンククローンが利用できます。
そのため、デプロイした OVA で、それぞれ下記を実施しておきます。
- VM スナップショットを取得
- 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
幅が広くて見にくいので、一応スクリーンショットも・・・
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 のクローンが開始されます。
ちなみに、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台)
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 が多いのは、ラボのリソースが不足しているためかなと思います。
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 クラスタを作成してみる話でした。