当需要对集群中的某个节点进行维护(如升级或修复),同时避免影响集群服务并将负载转移到其他节点时,可以使用 kubectl drain 命令。它会安全地将节点上的 Pod 移出,并将该节点标记为不可调度,确保维护期间服务不受影响。下面我们一起来看看如何使用吧!
1、kubectl drain 命令使用场景
- 节点维护:在对节点进行升级、修复或其他维护任务之前,将其上运行的所有 Pods 迁移到其他节点
- 故障恢复:如果节点存在问题并且你需要对其进行故障排除,首先可以将该节点的负载转移出去
- 集群资源管理:在重新分配节点资源时,可以使用 drain 命令安全地将工作负载驱逐到其他可用节点
2、kubectl drain 命令的基本用法
# <nodename>:需要驱逐的节点名
# [options]:可选参数,例如 --ignore-daemonsets、--delete-emptydir-data 等
kubectl drain <nodename> [options]
3、使用 kubectl drain 命令
# 查看帮助命令
kubectl drain --help
# 强制驱逐 node1 上的 pod
kubectl drain node1 --force
# 有 10 分钟的宽限期驱逐 node1 上的 pod
kubectl drain node1 --grace-period=600
# 不驱逐由 DaemonSet 管理的 Pod,强制删除使用 emptyDir 卷的 Pod
kubectl drain node1 --ignore-daemonsets --delete-emptydir-data