先日、Kuberentes クラスタを作成する投稿の中で、Pod Network Add-on として Antrea をインストールしてみました。
Cluster API で vSphere 7.0 に Kuberentes クラスタを作成してみる。(Photon OS 3.0 編)
前回の投稿を公開したあとに、ちょうど新しいバージョンの Antrea v0.6.0 がリリースされたので、
ふたたび Antrea のインストールについて投稿しておこうと思います。
あわせて、せっかくなので Octant という Kuberentes 可視化ツールもインストールしてみます。
Kuberentes では、Pod 間のネットワーク通信方式が選択できるようになっていて、
Flannel、Calico、OVN、NSX-T など、さまざまなソリューションによる実装(主に CNI Plug-in)が存在します。
kubeadm のドキュメントだと Pod Network Add-on と表現されてたりもするようです。
https://kubernetes.io/docs/concepts/cluster-administration/networking/
Antrea は、VMware が中心となって開発されているもので、Open vSwitch による CNI Plug-in です。
GitHub - vmware-tanzu/antrea: A Kubernetes networking solution based on Open vSwitch
Antrea については、motonori_shindo さんのブログ投稿がとてもわかりやすいです。
https://blog.shin.do/2020/01/antrea-yet-another-cni-plugin-for-kubernetes/
そして、今回は Antrea と一緒に、Kuberente 環境を見やすくするために、
Octant という Kubernetes 可視化ツールをインストールします。
このツールも、VMware が中心となって開発しているものです。
Antrea のリリース ページには、Antrea の Plug-in を組み込んだ Octant をインストールできる
マニフェスト(YAML 形式の)ファイルも公開されています。
Release Release v0.6.0 · vmware-tanzu/antrea · GitHub
1. 環境準備。
前回の投稿での、「5-3. Pod Network Add-on インストール。(antrea)」の前までの手順をすませて、
Kuberentes クラスタを作成しておきます。
※ただし実際のところ、前回のように antrea v0.5.1 をインストールしていてもバージョンアップできます。
この時点では Network Add-on (というか CNI Plug-in である Antrea)がインストールされていない状態なので、
Kuberentes のノードは、まだ NotReady の状態です。
[root@lab-kind-02 ~]# kubectl --kubeconfig=$HOME/kubeconfig_capvdemo get nodes
NAME STATUS ROLES AGE VERSION
capvdemo-9cmld NotReady master 15h v1.17.3
capvdemo-md-0-5dfbf45b6c-9glg8 NotReady <none> 15h v1.17.3
capvdemo-md-0-5dfbf45b6c-c926m NotReady <none> 15h v1.17.3
capvdemo-md-0-5dfbf45b6c-l8s2h NotReady <none> 15h v1.17.3
今回の kubeconfig ファイルは、$HOME/kubeconfig_capvdemo というファイル名です。
ここからは、環境変数 KUBECONFIG に指定して進めます。
[root@lab-kind-02 ~]# export KUBECONFIG=$HOME/kubeconfig_capvdemo
[root@lab-kind-02 ~]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
capvdemo-9cmld NotReady master 15h v1.17.3
capvdemo-md-0-5dfbf45b6c-9glg8 NotReady <none> 15h v1.17.3
capvdemo-md-0-5dfbf45b6c-c926m NotReady <none> 15h v1.17.3
capvdemo-md-0-5dfbf45b6c-l8s2h NotReady <none> 15h v1.17.3
まだ Pod の一覧にも、Network Add-on がない状態です。
[root@lab-kind-02 ~]# kubectl get pods -A
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system coredns-6955765f44-4knws 0/1 Pending 0 15h
kube-system coredns-6955765f44-wf7vf 0/1 Pending 0 15h
kube-system etcd-capvdemo-9cmld 1/1 Running 0 15h
kube-system kube-apiserver-capvdemo-9cmld 1/1 Running 0 15h
kube-system kube-controller-manager-capvdemo-9cmld 1/1 Running 0 15h
kube-system kube-proxy-747lg 1/1 Running 0 15h
kube-system kube-proxy-c8mt6 1/1 Running 0 15h
kube-system kube-proxy-qxpnw 1/1 Running 0 15h
kube-system kube-proxy-xbgb9 1/1 Running 0 15h
kube-system kube-scheduler-capvdemo-9cmld 1/1 Running 0 15h
kube-system vsphere-cloud-controller-manager-f67z6 1/1 Running 0 15h
kube-system vsphere-csi-controller-0 0/5 Pending 0 15h
2. Octant むけ Secret の作成。
Octant をインストールする前に、kubeconfig を含む Secret リソースを作成しておきます。
この Secret は、Octant の Pod が起動される際に読み込まれるもので、
コンテナ内では /kube にマウントされて、/kube/admin.conf として読み込まれます。
そのため --from-file オプションは、あらかじめ admin.conf という名前にした kubeconfig ファイルを指定するか、
「--from-file=admin.conf=<kubeconfig ファイル名>」のような指定にしておきます。
[root@lab-kind-02 ~]# kubectl -n kube-system create secret generic octant-kubeconfig --from-file=admin.conf=$HOME/kubeconfig_capvdemo
[root@lab-kind-02 ~]# kubectl -n kube-system get secret octant-kubeconfig
NAME TYPE DATA AGE
octant-kubeconfig Opaque 1 16s
3. Antrea & Octant のインストール。
それでは、Kuberente クラスタに、Antrea v0.6.0 をインストールします。
[root@lab-kind-02 ~]# kubectl apply -f https://github.com/vmware-tanzu/antrea/releases/download/v0.6.0/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-agent-authentication-reader 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-m8cb9g82tf 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
つづけて Antrea の Plug-in が組み込まれた Octant の Service と Deployment をインストールします。
URL を見てのとおり、Octant の Github リポジトリではなく、antera のリポジトリで公開されている YAML を指定しています。
[root@lab-kind-02 ~]# kubectl apply -f https://github.com/vmware-tanzu/antrea/releases/download/v0.6.0/antrea-octant.yml
service/antrea-octant created
deployment.apps/antrea-octant created
少し待つと、Network Add-on が起動されたことにより、ノードが Ready になります。
[root@lab-kind-02 ~]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
capvdemo-9cmld Ready master 16h v1.17.3
capvdemo-md-0-5dfbf45b6c-9glg8 Ready <none> 16h v1.17.3
capvdemo-md-0-5dfbf45b6c-c926m Ready <none> 16h v1.17.3
capvdemo-md-0-5dfbf45b6c-l8s2h Ready <none> 16h v1.17.3
Pod も、ひととおり Running になるはずです。
antrea-controller、各ノードの antrea-agent、antrea-controller も起動されています。
[root@lab-kind-02 ~]# kubectl -n kube-system get pods
NAME READY STATUS RESTARTS AGE
antrea-agent-7gzsn 2/2 Running 0 11m
antrea-agent-lbd6b 2/2 Running 0 11m
antrea-agent-nxbf8 2/2 Running 0 11m
antrea-agent-wq9xk 2/2 Running 0 11m
antrea-controller-6c54499dc9-7lw2d 1/1 Running 0 11m
antrea-octant-686d4ffc4-l4trz 1/1 Running 0 10m
coredns-6955765f44-4knws 1/1 Running 0 16h
coredns-6955765f44-wf7vf 1/1 Running 0 16h
etcd-capvdemo-9cmld 1/1 Running 0 16h
kube-apiserver-capvdemo-9cmld 1/1 Running 0 16h
kube-controller-manager-capvdemo-9cmld 1/1 Running 0 16h
kube-proxy-747lg 1/1 Running 0 16h
kube-proxy-c8mt6 1/1 Running 0 16h
kube-proxy-qxpnw 1/1 Running 0 16h
kube-proxy-xbgb9 1/1 Running 0 16h
kube-scheduler-capvdemo-9cmld 1/1 Running 0 16h
vsphere-cloud-controller-manager-f67z6 1/1 Running 0 16h
vsphere-csi-controller-0 5/5 Running 0 16h
vsphere-csi-node-5jc9x 3/3 Running 0 7m10s
vsphere-csi-node-9fsr4 3/3 Running 0 9m9s
vsphere-csi-node-jrk5l 3/3 Running 0 9m32s
vsphere-csi-node-s47rh 3/3 Running 0 8m27s
antrea-controller と、antrea-octant は Deployment リソースとして作成されます。
[root@lab-kind-02 ~]# kubectl -n kube-system get deployment
NAME READY UP-TO-DATE AVAILABLE AGE
antrea-controller 1/1 1 1 17m
antrea-octant 1/1 1 1 17m
coredns 2/2 2 2 16h
antrea-agent は、各ノードで起動するので DaemonSet リソースとして作成されます。
[root@lab-kind-02 ~]# kubectl -n kube-system get daemonset
NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE
antrea-agent 4 4 4 4 4 kubernetes.io/os=linux 19m
kube-proxy 4 4 4 4 4 beta.kubernetes.io/os=linux 16h
vsphere-cloud-controller-manager 1 1 1 1 1 node-role.kubernetes.io/master= 16h
vsphere-csi-node 4 4 4 4 4 <none> 16h
Octant は、Service リソースも作成されて、NodePort でアクセスできるようになっています。
今回は、各 Kuberente ノードの 32128 番ポートでアクセスできます。
[root@lab-kind-02 ~]# kubectl -n kube-system get service antrea-octant
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
antrea-octant NodePort 10.103.43.222 <none> 80:32128/TCP 21m
今回の Kuberente クラスタでは、10.0.4.162 ~ 10.0.4.165 の 32128 番ポートで Octant にアクセスできるはずです。
[root@lab-kind-02 ~]# kubectl get nodes -o wide
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
capvdemo-9cmld Ready master 16h v1.17.3 10.0.4.162 10.0.4.162 VMware Photon OS/Linux 4.19.79-2.ph3 containerd://1.3.3
capvdemo-md-0-5dfbf45b6c-9glg8 Ready <none> 16h v1.17.3 10.0.4.164 10.0.4.164 VMware Photon OS/Linux 4.19.79-2.ph3 containerd://1.3.3
capvdemo-md-0-5dfbf45b6c-c926m Ready <none> 16h v1.17.3 10.0.4.163 10.0.4.163 VMware Photon OS/Linux 4.19.79-2.ph3 containerd://1.3.3
capvdemo-md-0-5dfbf45b6c-l8s2h Ready <none> 16h v1.17.3 10.0.4.165 10.0.4.165 VMware Photon OS/Linux 4.19.79-2.ph3 containerd://1.3.3
4. Octant による Web UI からの確認。
Web ブラウザから、いずれかの Kuberente ノードの NodePort(今回は 32128)にアクセスすると、Octant の画面が開きます。
さきほど kubectl get pods ~ といったコマンドの表示結果が、GUI で表示できたりします。
この Octant には、Antrea の Plug-in が組み込まれています。
ちなみに、素の Octant(octant リポジトリからダウンロード&インストールしたもの)の場合は、
デフォルトでは Antrea Plug-in が組み込まれていません。
Antrea Controller の情報や・・・
Antrea Agent の情報も、表示できるようになっています。
たとえば、Pod のリンクをドリルダウンして、
CLI であれば kubectl describe ~ といったコマンドで確認していた情報を表示したり・・・
リソースの関係を可視化することもできます。
kubectl logs で確認していたような、ログの表示もできたりします。
以上、Kuberentes に Antrea と Octant をインストールしてみる話でした。