删除所有工作程序节点后,为什么我的 pod 不在新的工作程序节点上启动?

排查工作节点删除失败和Pod卡死的问题。

虚拟私有云 传统基础设施

您已删除集群中的所有工作程序节点,因此存在零个工作程序节点。 然后,添加了一个或多个工作程序节点。 运行以下命令时,Kubernetes 组件的几个 pod 会卡死在 ContainerCreating 状态,而 calico-node pod 会卡死在 CrashLoopBackOff 状态。

oc -n calico-system get pods

删除集群中的所有工作程序节点时,不存在要在其上运行 calico-kube-controllers pod 的工作程序节点。 Calico 控制器 pod 的数据无法更新以删除已删除工作节点的数据。 当 Calico 控制器 pod 在新的工作节点上重新开始运行时,其数据不会针对新的工作节点进行更新,也不会启动 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 工作程序节点条目的标识。 复制您在上一步中检索到的工作程序节点 IP 地址的标识。

    calicoctl get nodes -o wide
    
  4. 使用标识来删除工作程序节点条目。 删除工作程序节点条目后,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 或路由来公开应用程序,那么每个专区至少运行两个工作程序节点。