kubectl drain 命令用于从一个节点上删除所有 Pod,同时将该节点标记为不可调度状态,以便对该节点进行维护或者停机等操作。
使用 kubectl drain 命令前,请确保您已经了解所要执行的操作,并且已经有其他可用节点可以接替原来的工作负载。下面是使用 kubectl drain 的基本步骤:
- 确认需要删除 Pod 的节点名称:您可以通过
kubectl get nodes查看所有节点的状态和名称。 - 使用 kubectl drain 删除该节点上的所有 Pod:使用以下命令删除名为 node-1 的节点上的所有 Pod:
kubectl drain node-1。 - 验证 Pod 已被删除:使用
kubectl get pods --all-namespaces命令确认指定节点上的所有 Pod 已经被成功删除。 - 维护/更新该节点:在完成维护或更新操作后,取消该节点的不可调度状态并恢复其工作负载。您可以使用以下命令取消不可调度状态并重新启动 kubelet 服务:
kubectl uncordon node-1 && systemctl restart kubelet.service
请注意,如果在执行 kubectl drain 操作时未指定任何选项,则默认情况下会等待 Pod 完成清理后再退出。此外,在某些情况下,可能需要添加一些其他选项,例如 --ignore-daemonsets=true (忽略 DaemonSet 中运行的守护程序 Pod)或 --force=true (强制删除 Pod)。有关更多信息,请参阅 kubectl drain 的官方文档。




