Este conteúdo foi traduzido por máquina para sua conveniência e a Huawei Cloud não pode garantir que o conteúdo foi traduzido com precisão. Para exibir o conteúdo original, use o link no canto superior direito para mudar para a página em inglês.
Atualizado em 2025-05-23 GMT+08:00

Como remover todos os pods em um nó?

Você pode executar o comando kubectl drain para remover com segurança todos os pods de um nó.

Por padrão, o comando kubectl drain retém alguns pods do sistema, por exemplo, everest-csi-driver.

  1. Use o kubectl para se conectar ao cluster.
  2. Verifique os nós no cluster.

    kubectl get node

  3. Selecione um nó e visualize todos os pods no nó.

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

    Os pods no nó antes da remoção são os seguintes:

    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. Remova todos os pods no nó.

    kubectl drain 192.168.0.160

    Se um pod montado com armazenamento local ou controlado por um conjunto de DaemonSet existe no nó, a mensagem "error: unable to drain node "192.168.0.160", aborting command... " será exibida. O comando de despejo não tem efeito. Você pode adicionar os seguintes parâmetros ao final do comando anterior para remover o pod à força:

    • --delete-emptydir-data: remova à força pods montados com armazenamento local, por exemplo, coredns.
    • --ignore-daemonsets: remova à força os pods de DaemonSet, por exemplo, everest-csi-driver.

    No exemplo, ambos os tipos de pods existem no nó. Portanto, o comando de remoção é o seguinte:

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

  5. Após a remoção, o nó é automaticamente marcado como não escalonável. Ou seja, o nó está contaminado node.kubernetes.io/unschedulable = : NoSchedule.

    Após a remoção, apenas os pods do sistema são mantidos no nó.

    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>

Operações relacionadas

Operações de drain, cordon e uncordon de kubectl:

  • drain: remove com segurança todos os pods de um nó e marca o nó como não programável.
  • cordon: marca o nó como não escalonável. Ou seja, o nó está contaminado node.kubernetes.io/unschedulable = : NoSchedule.
  • uncordon: marca o nó como programável.

Para obter mais informações, consulte a documentação do kubectl.