天天看點

kubernetes的pod或instance一直處于pending狀态的解決方案問題複現:解決思路:原因及解決辦法:

問題複現:

    6台虛拟機上,kong元件(一個用于部署api服務的元件)副本數為4,總有一兩個instance起不起來,一直處于pending狀态,如下:

kubernetes的pod或instance一直處于pending狀态的解決方案問題複現:解決思路:原因及解決辦法:

解決思路:

    整體解決思路:pod -> instance -> DeamonSet -> ConfigMap

    1、哪裡有問題就進去幹,話不多說,直接describe一下處于pending狀态的instance。

kubectl -n gateway get instance
kubectl -n gateway describe instance {$yourPendingInstance}
           
kubernetes的pod或instance一直處于pending狀态的解決方案問題複現:解決思路:原因及解決辦法:

2、這裡看不出有啥毛病,我們以yaml格式輸出,看下處于pending狀态的instance。

kubectl -n gateway get instance kong-1.0-002e05-kong -o yaml
           
kubernetes的pod或instance一直處于pending狀态的解決方案問題複現:解決思路:原因及解決辦法:

3、看到有個Kong有DeamonSet狀态不對,check下DeamonSet

# 擷取gateway namespace下的所有DeamonSet
kubectl -n gateway get ds
kubectl -n gateway get ds kong-clclm -o yaml
           
kubernetes的pod或instance一直處于pending狀态的解決方案問題複現:解決思路:原因及解決辦法:
kubernetes的pod或instance一直處于pending狀态的解決方案問題複現:解決思路:原因及解決辦法:

    可以看到目前還有兩個kong元件副本不可用,而每個replic需要1個cpu和4G記憶體,由此想到可能因為資源不夠,導緻排程失敗。

4、檢查ratio配置資訊

(這個ration是個ConfigMap主要用來配置一些參數資訊的)

# 檢視
kubectl -n kube-system get cm ratio -o yaml
# 編輯
kubectl -n kube-system edit cm ratio -o yaml
           
kubernetes的pod或instance一直處于pending狀态的解決方案問題複現:解決思路:原因及解決辦法:

    可以看到目前隻配置了1個CPU和1G記憶體,在kong的replic為3的時候CPU顯然是不夠用的,找到原因了。。。

原因及解決辦法:

    沒有超額配置,另外的幾台節點資源不夠了,kong多副本資源不夠,排程不到nodeSelector節點上,是以沒排程成功,故一直處于pending狀态。

    解決辦法:設定為cpu:4,memory:10。即實際節點可申請配置設定的cpu資源是4倍,記憶體資源是10倍。因為很多pod在申請資源的時候都是超額申請,他實際上并用不了這麼多。意思就是其他副本你盡管申請,我這資源夠。如下:

kubernetes的pod或instance一直處于pending狀态的解決方案問題複現:解決思路:原因及解決辦法:

    配置成功後,你就會發現DeamonSet已全部ready,元件的instance已從Pending轉為Running狀态。

kubernetes的pod或instance一直處于pending狀态的解決方案問題複現:解決思路:原因及解決辦法:

繼續閱讀