【K8S排錯】CNI套件+CNI0網卡+CIDR路由

Hachibye
4 min readOct 28, 2023

--

[Kubernetes Troubleshooting] CNI Kit, Cni0 Network Interface and CIDR

首先說明一下何時會安裝CNI套件
>>> 在Master節點的進行Kubeadm init“之後”(只有Master節點安裝)

何時會宣告CIDR
>>> 在Kubeadm init這條指令時(請與CNI套件的配置對齊)

***本文以flannel這個CNI套件為例***

重新安裝步驟:

刪除

kubectl delete -f https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml

徹底刪除(真的要徹底刪除時才執行)

#關閉與刪除網卡
ifconfig cni0 down
ip link delete cni0
ifconfig flannel.1 down
ip link delete flannel.1
#刪除殘留文件
rm -rf /var/lib/cni
rm -rf /etc/cni/net.d
#重新開機
sudo reboot 0

再次安裝


kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml

查看flannel的pod運行狀況

kubectl get pods -n kube-flannel -o wide |grep “flannel”

查看部署方式

kubectl get daemonset -n kube-flannel

查看配置文件

kubectl get configmap -n kube-flannel

查看配置文件內容

#可得知網段Network:10.244.0.0/16這個宣告在你apply安裝的yaml裡
kubectl get configmap kube-flannel-cfg -o json -n kube-flannel

進一步排查CIDR網段與CNI套件

sudo cat /etc/kubernetes/manifests/kube-controller-manager.yaml

查看當前CIDR
發現不是預設的10.244而是10.124.16

定義kube-flannel.yml並配置(編輯 kube-flannel.yml)
將網段設置為指定的,例如:10.124.16.0/24
再次套用 kubectl apply -f kube-flannel.yml

若子節點沒吃到
手動去子節點配置CIDR

kubectl patch node slave-node-1 -p '{"spec":{"podCIDR":"172.168.10.0/24"}}'

如果部署服務時遇到Pod卡在Container Creating
關鍵字:Kubernetes stuck on ContainerCreating

查看報錯訊息

kubectl get pods
kubectl describe pods <pod name>

並且報錯為:failed to set bridge addr: “cni0” already has an IP address different from 10.244.1.1/24"

查看會發現CNI0網段與Flannel網段並未對齊

ifconfig

此時需要刪除網卡讓它重建

#關閉CNI0與Flannel產生的網卡
ip link set cni0 down && ip link set flannel.1 down
#刪除CNI0與Flannel產生的網卡
ip link delete cni0 && ip link delete flannel.1
#重新開機
sudo reboot 0

之後再重新部署服務就可以成功創建了!

--

--

Hachibye
Hachibye

Written by Hachibye

字幕組退休勞工 ... DevOps/系統/雲端/資安

No responses yet