IBM Cloud Docs
删除所有工作程序节点后,为什么我的 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 或路由来公开应用程序,那么每个专区至少运行两个工作程序节点。