刪除所有工作者節點之後,為何我的 Pod 不在新的工作者節點上啟動?
Virtual Private Cloud 標準基礎架構
您已刪除叢集裡的所有工作者節點,因此存在零個工作者節點。 然後,您新增了一或多個工作者節點。 當您執行下列指令時,Kubernetes 元件的數個 Pod 停留在 ContainerCreating
狀態,而 calico-node
Pod 停留在 CrashLoopBackOff
狀態。
若為 1.29 以及更新版本:
kubectl -n calico-system get pods
若為 1.28 及更早版本:
kubectl -n kube-system get pods
當您刪除叢集裡的所有工作者節點時,沒有工作者節點可供 calico-kube-controllers
Pod 執行。 無法更新 Calico 控制器 Pod 的資料,以移除已刪除工作者節點的資料。 當 Calico 控制器 Pod 開始在新的工作者節點上再次執行時,不會針對新的工作者節點更新其資料,且不會啟動 calico-node
Pod。
刪除現有的 calico-node
工作者節點項目,以便可以建立新的 Pod。
開始之前: 安裝 Calico CLI。
-
執行
ibmcloud ks cluster config
指令,並複製並貼上輸出,以設定KUBECONFIG
環境變數。 請在--admin
指令包含--network
及ibmcloud ks cluster config
選項。--admin
選項會下載用於存取基礎架構組合的金鑰,並在工作者節點上執行 Calico 指令。--network
選項會下載 Calico 配置檔,以執行所有 Calico 指令。ibmcloud ks cluster config --cluster <cluster_name_or_ID> --admin --network
-
對於停留在
CrashLoopBackOff
狀態的calico-node
Pod,請記下NODE
IP 位址。若為 1.29 以及更新版本:
kubectl -n calico-system get pods -o wide
若為 1.28 及更早版本:
kubectl -n kube-system get pods -o wide
在此範例輸出中,
calico-node
Pod 無法在工作者節點10.176.48.106
上啟動。NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES ... calico-kube-controllers-656c5785dd-kc9x2 1/1 Running 0 25h 10.176.48.107 10.176.48.107 <none> <none> calico-node-mkqbx 0/1 CrashLoopBackOff 1851 25h 10.176.48.106 10.176.48.106 <none> <none> coredns-7b56dd58f7-7gtzr 0/1 ContainerCreating 0 25h 172.30.99.82 10.176.48.106 <none> <none>
-
取得
calico-node
工作者節點項目的 ID。 僅 複製您在前一個步驟中擷取的工作者節點 IP 位址的 ID。calicoctl get nodes -o wide
-
使用 ID 來刪除工作者節點項目。 刪除工作者節點項目之後,Calico 控制器會重新排定新工作者節點上的
calico-node
Pod。calicoctl delete node <node_ID>
-
驗證 Kubernetes 元件 Pod (包括
calico-node
Pod) 現在正在執行中。 可能需要幾分鐘才能排定calico-node
Pod,以及建立新的元件 Pod。若為 1.29 以及更新版本:
kubectl -n calico-system get pods
若為 1.28 及更早版本:
kubectl -n kube-system get pods
若要防止未來發生此錯誤,請永遠不要刪除叢集裡的所有工作者節點。 一律在叢集裡至少執行一個工作者節點,如果您使用 Ingress 來公開應用程式,則每個區域至少執行兩個工作者節點。