在 Ubuntu 上重新安裝 Kubernetes
介紹
Kubeadm 有提供一個指令 reset,不過他只會將有關 Kubernetes 的東西刪除,像是 flannel、cni 的網路設定,則必須要手動刪除。
這裡使用的環境是:
- Ubuntu 18.04
- Kubernetes 1.14.1
- Flannel 0.10.0
Problem
要讓問題重現,只需要在你安裝好 Kubernetes Cluster 之後,重設 Kubernetes 就會發生:
1 2
| kubeadm reset -f kubeadm init
|
這個時候你的 coredns 會一直在 pending 的狀態,而且 nodes 會一直是 NodReady:
1 2 3 4 5 6 7 8
| $ kubectl get nodes NAME STATUS ROLES AGE VERSION akiicat NotReady master 65m v1.14.1
$ kubectl get pod -n kube-system NAME READY STATUS RESTARTS AGE coredns-fb8b8dccf-2t48c 0/1 Pending 0 42s coredns-fb8b8dccf-x7f87 0/1 Pending 0 42s
|
看一下 kubelet 是什麼問題,猜測是之前的 CNI 沒有清除乾淨,而套用到舊的資料
1 2 3 4
| $ systemctl status kubelet ... 4月 25 14:01:40 akiicat kubelet[6416]: W0425 14:01:40.779474 6416 cni.go:213] Unable to update cni config: No networks found in /etc/cni/net.d 4月 25 14:01:40 akiicat kubelet[6416]: E0425 14:01:40.901231 6416 kubelet.go:2170] Container runtime network not ready: NetworkReady=false reason:NetworkPluginNotReady message:docker: network plugin is not ready: cni config uninitialized
|
Step by Step
接下來就一步一步的解決這個問題,首先切換成 root 權限:
先把 Kubernetes 重設,**-f** 參數代表強制執行 reset,不會跳出提示訊息的確認:
停止 kubelet、docker:
1 2
| systemctl stop kubelet systemctl stop docker
|
完全刪除 cni、flannel 的資料:
1 2 3 4
| rm -rf /var/lib/cni/ rm -rf /var/lib/kubelet/* rm -rf /run/flannel rm -rf /etc/cni/
|
移除 cni、flannel 的網路介面卡:
1 2 3
| ifconfig cni0 down brctl delbr cni0 ifconfig flannel.1 down
|
重新啟動 docker:
這樣就完成了,最後檢查一下網路介面卡與 IP table 有沒有 flannel、cni:
沒有在這上面就成功了。
後續安裝可以參考我寫的這篇文章:Bare Metal 在 Ubuntu 上安裝 Kubernetes
Summary
最後要輸入指令的時候,需要對 Master 跟 Worker 執行不同的指令,以及在不同的權限下執行:
- Master:代表主結點。
- Node:代表 Worker 節點或子結點。
[Master, Node] 不管事 master 跟 worker 都要執行 Kubernetes Reset,在執行時要注意權限是否正確:
1 2 3 4 5 6 7 8 9 10 11 12
| # root kubeadm reset -f systemctl stop kubelet systemctl stop docker rm -rf /var/lib/cni/ rm -rf /var/lib/kubelet/* rm -rf /run/flannel rm -rf /etc/cni/ ifconfig cni0 down brctl delbr cni0 ifconfig flannel.1 down systemctl start docker
|
[Master] 安裝 Kubernetes:
1 2
| # root kubeadm init --pod-network-cidr 10.244.0.0/16
|
注意要切換使用者:
1 2 3 4 5 6
| # user mkdir -p $HOME/.kube sudo cp -f /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/bc79dd1505b0c8681ece4de4c0d86c5cd2643275/Documentation/kube-flannel.yml
|
[Node] 加入 worker 節點:
1 2 3
| # root kubeadm join 192.168.0.11:6443 --token 3c564d.6q2we53btzqmf1ew \ --discovery-token-ca-cert-hash sha256:a5480dcd68ec2ff27885932ac80d33aaa0390d295d4834032cc1eb554de3d5d2
|
Reference