kubectl cordon

标记节点为不可调度状态,用于节点维护

语法

kubectl cordon|uncordon|drain <node-name> [flags]

参数

参数说明示例级别
cordon 标记节点不可调度 kubectl cordon worker-1 常用
uncordon 恢复节点可调度 kubectl uncordon worker-1 常用
drain 安全驱逐节点上所有 Pod kubectl drain worker-1 --ignore-daemonsets 常用
--ignore-daemonsets drain 时忽略 DaemonSet Pod kubectl drain worker-1 --ignore-daemonsets 常用
--delete-emptydir-data drain 时删除 emptyDir 数据 kubectl drain worker-1 --ignore-daemonsets --delete-emptydir-data 进阶
--force 强制驱逐非控制器管理的 Pod kubectl drain worker-1 --force 危险

示例

标记节点不可调度

kubectl cordon worker-1
现有 Pod 不受影响,新 Pod 不会调度到此节点

安全驱逐并维护

kubectl drain worker-1 --ignore-daemonsets --delete-emptydir-data
驱逐所有 Pod 后进行节点维护

维护完成恢复

kubectl uncordon worker-1
恢复节点接受新 Pod 调度

节点升级流程

kubectl cordon worker-1 && kubectl drain worker-1 --ignore-daemonsets
先 cordon 再 drain 是标准维护流程

常见错误

cannot delete Pods with local storage 加 --delete-emptydir-data 参数允许删除本地存储
cannot delete Pods not managed by ReplicationController 有独立 Pod 无法安全驱逐,加 --force 强制(数据可能丢失)

技巧

相关命令