首页/云/Kubernetes 速查/drain 常用参数与语义
集群运维与排障54 条

drain 常用参数与语义

几个参数决定排水能否推进:--ignore-daemonsets、--delete-emptydir-data、--force、--timeout、--grace-period。

Kubernetes 速查云更新于 2026-10-13

排水在做什么

排水把节点标记为不可调度,并逐个请求删除节点上的 Pod,让副本在其他节点重建。它用于节点维护、升级与下线前的安全腾空。整个过程能不能顺利推进,取决于几个参数是否给对,以及工作负载的冗余是否真的够用。

基本信息

适用平台kubectl 1.20+,与集群发行版无关
前置效果节点被标记为不可调度
终止时机需要自行确认何时解除不可调度状态
阻塞来源守护进程集 Pod、临时数据、无控制器管理的 Pod、中断预算
必要检查副本冗余是否足够,中断预算是否允许腾空

典型使用场景

  • 节点内核升级与重启前的腾空
  • 把节点从集群中摘除并重新加入
  • 硬件维修或磁盘更换前的准备
  • 压测或扩容前把节点清空,用于调整资源布局
  • 排查节点侧异常时先把业务迁走再动手

常用参数

参数作用注意点
忽略守护进程集跳过守护进程管理的 Pod这类 Pod 不会被驱逐,属于预期行为
允许临时目录数据允许驱逐使用临时目录的 Pod本地数据会随 Pod 消失
强制删除删除没有控制器管理的 Pod这类 Pod 不会被重建,确认后可用
整体超时等待上限超时退出时节点可能只排了一半
优雅宽限覆盖 Pod 声明的终止宽限缩短可能导致进程被强杀

组合示例

组合示例
kubectl get pods -A -o wide --field-selector spec.nodeName=node1   # 先看节点上有什么
kubectl drain node1 --ignore-daemonsets --delete-emptydir-data --timeout=300s
kubectl get nodes                                    # 确认节点进入不可调度状态
kubectl get pods -A -o wide --field-selector spec.nodeName=node1   # 确认残留
kubectl uncordon node1                               # 维护完成后恢复调度
排水命令本身不改动工作负载的副本数,能否腾空完全取决于集群其他节点是否有足够容量。容量不足时 Pod 会停在等待调度状态,看起来像卡住,其实是装不下。
排水会中断有状态服务的本地数据。使用临时目录且没有持久卷的工作负载,被驱逐后数据无法恢复,确认业务可容忍再执行。

易错点

  • 超时中断后直接重跑:应先查看还剩哪些 Pod 以及阻塞原因,否则会反复超时
  • 用强制参数删除无控制器管理的 Pod:这类 Pod 不会被重建,业务可能直接中断
  • 忽略中断预算:预算过紧时驱逐被拒绝,排水长时间无进展
  • 维护完成忘记恢复调度:节点长期空转,集群可用容量被占用

数据来源与参考

  • Kubernetes 官方文档 · kubectl drain 选项
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌