¿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.
- Utilice kubectl para conectarse al clúster.
- Compruebe los nodos en el clúster.
kubectl get node
- 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>
- 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
- 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.