刪除所有工作者節點之後,為何我的 Pod 不在新的工作者節點上啟動?

排除工作節點刪除失敗及 Pod 卡住的問題。

虛擬私有雲 經典基礎架構

您已刪除叢集裡的所有工作者節點,因此存在零個工作者節點。 然後,您新增了一或多個工作者節點。 當您執行下列指令時,數個 Kubernetes 元件的 Pod 會卡在 ContainerCreating 狀態,而 calico-node Pod 則卡在 CrashLoopBackOff 狀態。

oc -n calico-system get pods

當您刪除叢集裡的所有工作者節點時,沒有工作者節點可供 calico-kube-controllers Pod 執行。 Calico 控制器 pod 的資料無法更新,無法移除已刪除 Worker 節點的資料。 當 Calico 控制器 pod 重新開始在新的 Worker 節點上執行時,它的資料不會針對新的 Worker 節點更新,也不會啟動 calico-node pod。

刪除現有的 calico-node 工作者節點項目,以便可以建立新的 Pod。

開始之前: 安裝 Calico CLI

  1. 執行 ibmcloud oc cluster config 指令,並複製並貼上輸出,以設定 KUBECONFIG 環境變數。 請在 --admin 指令包含 --networkibmcloud oc cluster config 選項。 「--admin」選項會下載用於存取您的基礎架構組合,並在您的工作節點上執行 Calico 指令所需的金鑰。 --network 選項會下載 Calico 配置檔,以便執行所有 Calico 指令。

    ibmcloud oc cluster config --cluster CLUSTER_NAME_OR_ID --admin --network
    
  2. 對於停留在 CrashLoopBackOff 狀態的 calico-node Pod,請記下 NODE IP 位址。

    oc -n calico-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>
    
  3. 取得 calico-node 工作者節點項目的 ID。 複製您在前一個步驟中擷取的工作者節點 IP 位址的 ID。

    calicoctl get nodes -o wide
    
  4. 使用 ID 來刪除工作者節點項目。 刪除工作者節點項目之後,Calico 控制器會重新排定新工作者節點上的 calico-node Pod。

    calicoctl delete node <node_ID>
    
  5. 驗證 Kubernetes 元件 Pod (包括 calico-node Pod) 現在正在執行中。 可能需要幾分鐘才能排定 calico-node Pod,以及建立新的元件 Pod。

    oc -n calico-system get pods
    

若要防止未來發生此錯誤,請永遠不要刪除叢集裡的所有工作者節點。 一律在叢集裡至少執行一個工作者節點,如果您使用 Ingress 或路徑來公開應用程式,則每個區域至少執行兩個工作者節點。