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

刪除所有工作者節點之後,為何我的 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

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

    ibmcloud ks cluster config --cluster <cluster_name_or_ID> --admin --network
    
  2. 對於停留在 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>
    
  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。

    若為 1.29 以及更新版本:

    kubectl -n calico-system get pods
    

    若為 1.28 及更早版本:

    kubectl -n kube-system get pods
    

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