Estos contenidos se han traducido de forma automática para su comodidad, pero Huawei Cloud no garantiza la exactitud de estos. Para consultar los contenidos originales, acceda a la versión en inglés.
Actualización más reciente 2023-08-08 GMT+08:00

¿Cómo desalojo todos los pods de un nodo?

Puede ejecutar el comando kubectl drain para desalojar de forma segura todos los pods de un nodo.

De forma predeterminada, el comando kubectl drain conserva algunos pods del sistema, por ejemplo, everest-csi-driver.

  1. Utilice kubectl para conectarse al clúster.
  2. Compruebe los nodos en el clúster.

    kubectl get node

  3. Seleccione un nodo y vea todos los pods del nodo.

    kubectl get pod --all-namespaces -owide --field-selector spec.nodeName=192.168.0.160

    Los pods en el nodo antes del desalojo son los siguientes:

    NAMESPACE     NAME                                      READY   STATUS    RESTARTS   AGE     IP              NODE            NOMINATED NODE   READINESS GATES
    default       nginx-5bcc57c74b-lgcvh                    1/1     Running   0          7m25s   10.0.0.140      192.168.0.160   <none>           <none>
    kube-system   coredns-6fcd88c4c-97p6s                   1/1     Running   0          3h16m   10.0.0.138      192.168.0.160   <none>           <none>
    kube-system   everest-csi-controller-56796f47cc-99dtm   1/1     Running   0          3h16m   10.0.0.139      192.168.0.160   <none>           <none>
    kube-system   everest-csi-driver-dpfzl                  2/2     Running   2          12d     192.168.0.160   192.168.0.160   <none>           <none>
    kube-system   icagent-tpfpv                             1/1     Running   1          12d     192.168.0.160   192.168.0.160   <none>           <none>

  4. Desaloja todos los pods del nodo.

    kubectl drain 192.168.0.160

    Si existe un pod montado con almacenamiento local o controlado por un conjunto de DaemonSet en el nodo, el mensaje "error: unable to drain node "192.168.0.160", aborting command... " se mostrará. La orden de desalojo no tiene efecto. Puede agregar los siguientes parámetros al final del comando anterior para desalojar por la fuerza el pod:

    • --delete-emptydir-data: desaloja por la fuerza los pods montados con almacenamiento local, por ejemplo, coredns.
    • --ignore-daemonsets: desaloja por la fuerza los pods de DaemonSet, por ejemplo, everest-csi-driver.

    En el ejemplo, ambos tipos de pods existen en el nodo. Por lo tanto, la orden de desalojo es la siguiente:

    kubectl drain 192.168.0.160 --delete-emptydir-data --ignore-daemonsets

  5. Después del desalojo, el nodo se marca automáticamente como no programado. Es decir, el nodo está contaminado node.kubernetes.io/unschedulable = : NoSchedule.

    Después del desalojo, solo se conservan los pods del sistema en el nodo.

    NAMESPACE     NAME                       READY   STATUS    RESTARTS   AGE   IP              NODE            NOMINATED NODE   READINESS GATES
    kube-system   everest-csi-driver-dpfzl   2/2     Running   2          12d   192.168.0.160   192.168.0.160   <none>           <none>
    kube-system   icagent-tpfpv              1/1     Running   1          12d   192.168.0.160   192.168.0.160   <none>           <none>

Operaciones relacionadas

Operaciones de drain, cordon y uncordon de kubectl:

  • drain: Desaloja de forma segura todos los pods de un nodo y marca el nodo como no programado.
  • cordon: Marca el nodo como no programado. Es decir, el nodo está contaminado node.kubernetes.io/unschedulable = : NoSchedule.
  • uncordon: Marca el nodo como programable.

Para obtener más información, consulte la documentación de kubectl.