Categories
程式開發

處理一次k8s、calico無法分配podIP的心路歷程


又一次偷偷化解了可能發生的重大事故。不想看過程的可以直接跳到末尾看處理方案。

一個網絡錯誤

某天,上kplcloud構建一個測試應用,構建完成之後發現新pod一直啟動失敗,並且拋出了以下錯誤信息:

Failed create pod sandbox: rpc error: code = Unknown desc = NetworkPlugin cni failed to set up pod "xxxxxx-fc4cb949f-gpkm2_xxxxxxx" network: netplugin failed but error parsing its diagnostic message "": unexpected end of JSON input

會k8s的運維同學不在,突然出問題了怎麼辦?

試著開始解決問題。

一、有沒有可能是鏡像拉取失敗,開始找問題:

  1. 登錄集群所有服務器查看空間是否佔滿(然而並沒有佔滿)
  2. 查詢集群所有服務器網絡情況(也沒有問題)
  3. 再啟一個pod試試? (起不來)

這就尷尬了…,有沒有可能是calico的問題?

二、查看服務器報錯信息

嘗試以下命令看服務器的報錯信息:

$ journalctl -exf

確實有一些錯誤信息:

處理一次k8s、calico無法分配podIP的心路歷程 1

這個錯誤太廣泛了,繼續嘗試從其他地方找找問題。

此時已經開始在思考如何跑路的問題了…

要不嘗試重啟能否解決?

風險太大,不能冒險。雖然很多時候重啟能解決大部分問題,但重起docker、k8s在這種情況下不是最佳選擇。

處理一次k8s、calico無法分配podIP的心路歷程 2

繼續搜刮日誌,猜測是無法分配IP的問題,那目標轉向calico

從calico-node上面找問題

查詢ip池是否用完。

使用calicoamd命令查詢calico是否正常正常運行

$ calicoctl get ippools -o wide
CIDR            NAT    IPIP
172.20.0.0/16   true   false

$ calicoctl node status

處理一次k8s、calico無法分配podIP的心路歷程 3

似乎是沒啥問題。

原文鏈接:【https://www.infoq.cn/article/Oj87RzQcRK1rf5xczfd1】。未經作者許可,禁止轉載。