備忘録として。
kubeadmでクラスタ構築したけど、作り直したい場合。
リセット
kubernetesクラスタにWorkerノードがすでに参加している場合、最初にWorkerノードをクラスタから切り離す。
vagrant@master:~$ kube get node -owide
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
master Ready control-plane 3h10m v1.33.1 192.168.56.53 <none> Ubuntu 22.04.5 LTS 5.15.0-133-generic containerd://2.1.1
worker01 Ready <none> 11m v1.33.1 192.168.56.54 <none> Ubuntu 22.04.5 LTS 5.15.0-133-generic containerd://2.1.1
worker01ノードをクラスタから切り離す。
#### Masterノードで実施
kubectl drain worker01 --ignore-daemonsets --force
kubectl delete node worker01
その後、Masterノード、Workerノードをリセットしてkubeadm initもしくはkubeadm join前の状態に戻す。
# Masterノード、Workerノードで実施
sudo kubeadm reset
徹底的に削除したい
kubeadm resetで再度kubeadm init、kubeadm joinコマンドが実行可能だが、徹底的にやる場合は以下を実施。
# リセットして、
sudo kubeadm reset
# 不要なリソースを削除する
sudo -i
# rootになって実施
rm /etc/cni/net.d/*
exit
### これはMasterノードのみで実施
rm -rf $HOME/.kube
# Master、Workerで実施
sudo systemctl daemon-reload && systemctl restart kubelet
sudo systemctl restart containerd
CNI PluginのCalicoで自動的に追加されたインタフェースがある。これを削除する場合は以下のようにする。
まず、インタフェースを確認する。
vagrant@master:~$ ip link
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
...
5: caliaf531080a37@if2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc noqueue state UP mode DEFAULT group default qlen 1000
link/ether ee:ee:ee:ee:ee:ee brd ff:ff:ff:ff:ff:ff link-netns cni-cf33e935-e4aa-eec3-bc58-a5d164c5f6ab
7: vxlan.calico: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
link/ether 66:4f:26:ae:af:db brd ff:ff:ff:ff:ff:ff
10: calie1aeac4cf5f@if2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc noqueue state UP mode DEFAULT group default qlen 1000
link/ether a2:a2:a2:1b:38:59 brd ff:ff:ff:ff:ff:ff link-netns cni-f4e44043-0cc0-a2cb-185a-e18fdba18f09
12: calid21caa8b1d5@if2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc noqueue state UP mode DEFAULT group default qlen 1000
link/ether ee:ee:ee:ee:ee:ee brd ff:ff:ff:ff:ff:ff link-netns cni-bcf32302-a7fb-776e-9f4b-5559afa556a2
...
インターフェスを削除する
#### 10番目のインタフェース削除する場合
# 最後の"@if2"は不要
vagrant@master:~$ sudo ip link delete calie1aeac4cf5f
vagrant@master:~$
【参考】CalicoのPodとインタフェースの紐付け調査
ここに書かれているのを参照
https://docs.tigera.io/calico/latest/operations/troubleshoot/commands#verify-bird-routing-table
多数生成されるインタフェースは一体誰が使っているかわからなかったので調査。
Masterノードのインタフェースが以下の場合で調べた(上記とは別環境なので、出力結果が違う)
vagrant@master:~$ ip link
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000
link/ether 08:00:27:bb:59:20 brd ff:ff:ff:ff:ff:ff
altname enp0s3
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000
link/ether 08:00:27:b6:29:ad brd ff:ff:ff:ff:ff:ff
altname enp0s8
4: cali3fc5fbbf17f@if2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT group default qlen 1000
link/ether ee:ee:ee:ee:ee:ee brd ff:ff:ff:ff:ff:ff link-netns cni-76a6497a-bebc-9d15-c2b8-77c938a49e39
5: cali64cc9c535b5@if2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT group default qlen 1000
link/ether ee:ee:ee:ee:ee:ee brd ff:ff:ff:ff:ff:ff link-netns cni-79b0b379-ea30-4d92-f9bc-0c98239184c6
6: vxlan.calico: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
link/ether 66:4f:26:ae:af:db brd ff:ff:ff:ff:ff:ff
9: calia6a1e93a1b7@if2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc noqueue state UP mode DEFAULT group default qlen 1000
link/ether ee:ee:ee:ee:ee:ee brd ff:ff:ff:ff:ff:ff link-netns cni-cb971158-c2e8-d4ee-a68a-c683fec71a07
・・・(以下省略)
一例として、インタフェース番号4は誰が使っているか調べたい場合。
# 誰が使っているかわからず、削除していいか判断できない
4: cali3fc5fbbf17f@if2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT group default qlen 1000
link/ether ee:ee:ee:ee:ee:ee brd ff:ff:ff:ff:ff:ff link-netns cni-76a6497a-bebc-9d15-c2b8-77c938a49e39
まずMasterノードにあるcalico-nodeのPodにログインする。PodのIPアドレスも一緒に出力。
vagrant@master:~$ kubectl get pod -n calico-system -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
calico-kube-controllers-6b6994fdd6-7ttvb 1/1 Running 0 124m 172.16.219.68 master <none> <none>
#### 2つのcalico-nodeのPodが起動している
calico-node-gr6nv 1/1 Running 0 104m 192.168.56.54 worker01 <none> <none>
calico-node-tzqw5 1/1 Running 0 124m 192.168.56.53 master <none> <none>
calico-typha-857b85895b-ctkfv 1/1 Running 0 124m 192.168.56.53 master <none> <none>
csi-node-driver-b7qvv 2/2 Running 0 124m 172.16.219.66 master <none> <none>
csi-node-driver-znnnp 2/2 Running 0 104m 172.16.5.1 worker01 <none> <none>
goldmane-7b5b4cd5d9-64dw4 1/1 Running 0 124m 172.16.219.71 master <none> <none>
whisker-54c879f689-hkjvf 2/2 Running 0 123m 172.16.219.65 master <none> <none>
### Podにログイン
vagrant@master:~$ kubectl exec -it calico-node-tzqw5 -n calico-system -- /bin/bash
Defaulted container "calico-node" out of: calico-node, flexvol-driver (init), install-cni (init)
[root@master /]#
マニュアルに記載されている通りだが、calico-node Podのルーティング情報を確認
[root@master /]# birdcl
BIRD v0.3.3+birdv1.6.8 ready.
bird>
bird>
bird> show route
0.0.0.0/0 via 10.0.2.2 on eth0 [kernel1 05:11:48] * (10)
10.0.2.2/32 dev eth0 [kernel1 05:11:48] * (10)
10.0.2.3/32 dev eth0 [kernel1 05:11:48] * (10)
10.0.2.0/24 dev eth0 [direct1 05:11:48] * (240)
172.16.219.72/32 dev cali291a4aaa4c0 [kernel1 05:11:52] * (10)
172.16.219.69/32 dev calia028773404b [kernel1 05:11:49] * (10)
172.16.219.68/32 dev calife2b2c2b923 [kernel1 05:11:49] * (10)
172.16.219.71/32 dev cali3c5bd8e8442 [kernel1 05:11:51] * (10)
172.16.219.70/32 dev cali7d14e42f8cf [kernel1 05:11:50] * (10)
###### cali3fc5fbbf17fのIF発見
172.16.219.65/32 dev cali3fc5fbbf17f [kernel1 05:11:48] * (10)
172.16.219.64/26 blackhole [static1 05:11:48] * (200)
blackhole [kernel1 05:11:48] (10)
172.16.219.64/32 dev vxlan.calico [direct1 05:11:48] * (240)
172.16.219.67/32 dev calia6a1e93a1b7 [kernel1 05:11:49] * (10)
172.16.219.66/32 dev cali64cc9c535b5 [kernel1 05:11:48] * (10)
192.168.56.0/24 dev eth1 [direct1 05:11:48] * (240)
172.16.5.0/26 via 192.168.56.54 on eth1 [Mesh_192_168_56_54 05:31:28] * (100/0) [i]
via 192.168.56.54 on eth1 [Mesh_192_168_56_54 05:31:28] (100/0) [i]
via 192.168.56.54 on eth1 [kernel1 05:31:21] (10)
172.16.5.0/32 via 192.168.56.54 on eth1 [kernel1 05:31:22] * (10)
bird>
cali3fc5fbbf17fのIFは172.16.219.65/32が利用。
このIP使っているPodは先ほど調べたIP付きのPodの一覧からわかる。
whisker-54c879f689-hkjvf 2/2 Running 0 123m 172.16.219.65 master <none> <none>
とインタフェースとPodの紐付けが可能。
だからなんだ、と言われてると困るのだが。。