Después de suprimir todos los nodos trabajadores, ¿por qué no se inician mis pods en los nuevos nodos trabajadores?

Solucionar los errores de eliminación de nodos de trabajo y los pods bloqueados.

Nube privada virtual Infraestructura clásica

Ha suprimido todos los nodos trabajadores del clúster para que haya cero nodos trabajadores. A continuación, ha añadido uno o varios nodos trabajadores. Cuando ejecuta el mandato siguiente, varios pods para los componentes de Kubernetes quedan bloqueados en el estado ContainerCreating y los pods calico-node quedan bloqueados en el estado CrashLoopBackOff.

oc -n calico-system get pods

Cuando suprime todos los nodos trabajadores del clúster, no existe ningún nodo trabajador en el que se pueda ejecutar el pod calico-kube-controllers. Los datos de pod del controlador de Calico no se pueden actualizar para eliminar los datos de los nodos de trabajador suprimidos. Cuando el pod del controlador de Calico empieza a ejecutarse de nuevo en los nuevos nodos trabajadores, sus datos no se actualizan para los nuevos nodos trabajadores y los pods calico-node no se inician.

Suprima las entradas de nodo trabajador calico-node existentes para que se puedan crear nuevos pods.

Antes de empezar: instale la CLI de Calico.

  1. Ejecute el mandato ibmcloud oc cluster config y copie y pegue la salida para configurar la variable de entorno KUBECONFIG. Incluya las opciones --admin y --network con el mandato ibmcloud oc cluster config. La opción --admin descarga las claves para acceder a su portafolio de infraestructura y ejecutar mandatos de Calico en los nodos trabajadores. La opción --network descarga el archivo de configuración de Calico para ejecutar todos los mandatos de Calico.

    ibmcloud oc cluster config --cluster CLUSTER_NAME_OR_ID --admin --network
    
  2. Para los pods calico-node que han quedado bloqueados en el estado CrashLoopBackOff, anote las direcciones IP de NODE.

    oc -n calico-system get pods -o wide
    

    En esta salida de ejemplo, el pod calico-node no se puede iniciar en el nodo de trabajador 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. Obtenga los ID de las entradas del nodo trabajador calico-node. Copie los ID solo de las direcciones IP de nodo trabajador que ha recuperado en el paso anterior.

    calicoctl get nodes -o wide
    
  4. Utilice los ID para suprimir las entradas de nodo trabajador. Después de suprimir las entradas de nodo trabajador, el controlador de Calico vuelve a planificar los pods calico-node en los nuevos nodos trabajadores.

    calicoctl delete node <node_ID>
    
  5. Verifique que los pods del componente de Kubernetes, incluidos los pods calico-node, se están ejecutando. La planificación de los pods calico-node y la creación de los nuevos pods del componente pueden tardar unos minutos.

    oc -n calico-system get pods
    

Para evitar este error en el futuro, nunca suprima todos los nodos trabajadores del clúster. Ejecute siempre al menos un nodo trabajador en el clúster y, si utiliza Ingress o rutas para exponer apps, ejecute al menos dos nodos trabajadores por zona.