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 强制(数据可能丢失)
技巧
- 节点维护标准流程:cordon → drain → 维护 → uncordon
- drain 会遵守 PodDisruptionBudget 确保服务可用性
- 升级节点内核或 kubelet 前务必先 drain