kubectl cordon 命令用于将某个节点标记为不可调度节点,从而阻止在该节点上调度新的 Pod。不过,它不会影响已在该节点上运行的 Pod。


当你想阻止新工作负载在特定节点上调度,但又不想打扰现有工作负载时,可以使用 kubectl cordon 命令。这在排空节点进行维护之前尤其有用。

【代码清单】

kubectl cordon <node-name>

【执行结果】

node/<node-name> cordoned

与 kubectl drain 相比,kubectl cordon 是一种更简单、破坏性更小的命令。它只会将节点标记为不可调度节点,这意味着不会在该节点上调度新的 Pod。这通常是执行更复杂操作(如排空或升级节点)前的第一步。如果你想再次允许在节点上调度,可以使用 kubectl uncordon <node-name> 命令。如果你想重新允许在节点上进行调度,可以使用 kubectl uncordon <node-name> 命令,这将使节点恢复到可调度状态,允许 Kubernetes 调度器在节点上放置新的 Pod。通过首先封锁节点,然后慢慢耗尽节点,可以确保对运行服务的影响降到最低。

【小知识】

Cordoning 和 Draining 的区别: 限制只是防止节点上调度新的 Pod。排空则更进一步,还能驱逐现有 Pod: 绑定通常是维护规划的第一步,让管理员可以灵活管理何时以及如何重新定位 Pod,而不会有直接压力。