「Bug」K8s 節點的 IP 地址泄漏,導致 IP 被耗盡


Bug 描述

部署 Pod 后發現 Pod 無法啟動,Kubernetes 報錯:

Failed create pod sandbox: rpc error: code = Unknown desc = failed to set up sandbox container "22ea7018a9a1389495e222cfg44e6fcda68c0ed91042c191074aa8566ee27e75" network for pod "xxxx-hwdtt": NetworkPlugin cni failed to set up pod "xxxx-hwdtt_192-168-1-158" network: failed to allocate for range 0: no IP addresses available in range set: 10.42.11.1-10.42.11.254

根據搜索到的博客,在節點上執行如下命令:

cd /var/lib/cni
ls k8d-pod-network  # 使用 rke 部署的集群,IP 信息在這個文件夾里

ls 10.42.11.*  | wc -l  # 統計已分配的 IP 數量

上述命令輸出很多的 IP 地址,使用 wc -l 統計發現 IP 數量為 253.

查看 Node 的 PodCIDR 網段:

kubectl get node <node-name> -o yaml | grep podCIDR

得到網段為 10.42.11.0/24,IP 范圍為 10.42.11.1-10.42.11.254,共 254 個。(因為要去掉廣播地址 10.42.11.255 和網段標識地址 10.42.11.0

該網段的默認網關還需要占用一個 IP,253+1=254,IP 耗盡。

可節點上的 Pod 一共才 96 個。這說明 Pod 刪除后,IP 沒有被回收。

修復方法

臨時方法:刪除掉 /var/lib/cni 中所有的 IP 地址,每個 IP 都是一個文件。

具體的原因分析

這個應該是 CNI 網絡插件自身的 Bug。具體而言我有更換過 CNI 網絡插件,沒多久后就 IP 溢出了。可能更換 CNI 插件后,新插件不會管以前的 Pod IP,會嘗試重新進行 IP 分配?

相關 Issue


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM