K8S中,kubectl cordon、uncordon、drain、taint的区别

一、核心功能与区别

命令 作用 对现有 Pod 的影响 调度状态变化 典型场景
kubectl cordon <节点名> 标记节点为不可调度SchedulingDisabled ❌ 不驱逐任何 Pod(包括 DaemonSet) ✅ 新 Pod 无法调度到该节点 节点转为 Ready,SchedulingDisabled 临时隔离节点(预检或短期维护)
kubectl uncordon <节点名> 恢复节点可调度状态 ❌ 不主动迁移或重建 Pod ✅ 允许新 Pod 调度到该节点 节点恢复为 Ready 节点维护完成后重新加入集群
kubectl drain <节点名> 驱逐节点所有非系统 Pod,并自动标记节点为不可调度 (隐含 cordon 操作) ✅ 驱逐所有非 DaemonSet Pod(由控制器在其他节点重建) ❌ 默认忽略 DaemonSet Pod(需 --ignore-daemonsets 绕过) 节点转为 SchedulingDisabled 节点维护(升级/重置)或永久下线
kubectl taint <节点名> 添加/删除污点以影响 Pod 调度 ❌ 不驱逐现有 Pod ✅ 新 Pod 需匹配容忍度才能调度到该节点 通过污点规则间接控制调度 实现节点亲和性/反亲和性策略

二、关键细节说明

  1. drain 的特殊参数
  • 需显式添加 --delete-emptydir-data 以清理使用 emptyDir 的 Pod 数据;
  • 强制操作时使用 --force(可能中断无控制器管理的 Pod),但需谨慎避免关键服务中断。
  1. drain 与 PDB 的关系

    驱逐过程受 PodDisruptionBudget(PDB)约束,若违反最小可用副本数则操作失败,确保服务高可用。

  2. cordon 与污点的关联

    执行 cordon 后节点自动添加污点:node.kubernetes.io/unschedulable:NoSchedule,禁止新 Pod 调度。

  3. taint 的调度控制

    污点是持续策略(如 NoSchedulePreferNoSchedule),需配合 Pod 的 tolerations 实现灵活调度。


三、操作流程建议

  1. 节点维护标准流程

    复制代码
    kubectl cordon <节点名>                       # 阻止新 Pod 调度到该节点
    kubectl drain  <节点名> --ignore-daemonsets   # 驱逐 Pod 并禁用调度
    ...                                           # 执行维护(如升级内核)
    kubectl uncordon <节点名>                     # 恢复节点可调度状态
  2. 临时隔离与恢复

    复制代码
    kubectl cordon <节点名>      # 快速隔离(不驱逐 Pod)
    kubectl uncordon <节点名>    # 直接恢复
  3. 污点策略配置示例

    复制代码
    kubectl taint nodes <节点名> key=value:NoSchedule   # 添加污点
    kubectl taint nodes <节点名> key=value:NoSchedule-  # 删除污点

四、总结对比

维度 cordon uncordon drain taint
核心目标 禁用新 Pod 调度 恢复新 Pod 调度 驱逐 Pod 并禁用调度 通过污点规则控制调度
驱逐行为 是(非 DaemonSet Pod)
自动化程度 手动隔离 手动恢复 自动驱逐 + 隐含隔离 需手动配置污点/容忍度
相关推荐
9命怪猫13 小时前
[K8S小白问题集] - Calico好在哪里?
网络·云原生·容器·kubernetes
齐潇宇13 小时前
k8s-Helm管理器
linux·运维·云原生·容器·kubernetes
容器魔方13 小时前
让Skill从执行中生长:Cloud Agent Harness的三段式Skill自进化机制
云原生·开源·资讯
叶~小兮13 小时前
K8S进阶核心综合学习笔记(持久化存储+特殊容器+调度管理)
笔记·学习·kubernetes
Zhu75813 小时前
[软件部署]在k8s环境部署alist
云原生·容器·kubernetes
2401_8401922715 小时前
k8s的crd、operator、cr分别是什么?
运维·分布式·kubernetes·prometheus
Cat_Rocky16 小时前
K8S-Helm简单学习分享
学习·容器·kubernetes
ziqi52217 小时前
Docker compose 和共享数据
运维·docker·容器
安当加密18 小时前
AES-256直接加密就够了?微服务架构下的敏感数据加密:信封加密、格式保留加密和字段级加密全解析
微服务·云原生·架构