kubeadmでkuberneteの構築失敗したのでやりなおしたい場合

備忘録として。

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 rm /etc/cni/net.d/*

### これはMasterノードのみで実施
sudo rm -rf $HOME/.kube

# Master、Workerで実施
systemctl daemon-reload && systemctl restart kubelet
systemctl restart containerd
```

CNI PluginのCalicoで自動的に追加されたインタフェースがある。これを削除する場合は以下のようにする。


まず、インタフェースを確認する。
```
vagrant@master:~$ sudo 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ノードのインタフェースが以下の場合で調べた（上記とは別環境なので、出力結果が違う）
```shell
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
・・・（以下省略）
```

一例として、インタフェース番号４は誰が使っているか調べたい場合。
```shell
# 誰が使っているかわからず、削除していいか判断できない
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アドレスも一緒に出力。

```shell
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のルーティング情報を確認
```shell
[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の一覧からわかる。
```shell
whisker-54c879f689-hkjvf                   2/2     Running   0          123m   172.16.219.65   master     <none>           <none>
```
とインタフェースとPodの紐付けが可能。
だからなんだ、と言われてると困るのだが。。