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)
自动化程度 手动隔离 手动恢复 自动驱逐 + 隐含隔离 需手动配置污点/容忍度
相关推荐
鹤落晴春20 小时前
【K8s】Pod调度、configMaps
云原生·容器·kubernetes
张忠琳21 小时前
【runc 1.4.2】(Part 2)runc 1.4.2 超深度分析 — CLI层:main.go、命令文件、runner、信号处理、TTY
云原生·kubernetes·runc
极客先躯1 天前
高级java每日一道面试题-2026年02月02日-实战篇[Docker]-如何实现容器的持久化存储?
docker·容器·面试宝典·持久化·存储·韵味·java高级面试题
阿里云云原生1 天前
AI 提效是“假象”还是“红利”?用 LoongSuite + SLS 构建组织级 AI 编码度量看板
云原生
极客先躯1 天前
高级java每日一道面试题-2026年02月01日-实战篇[Docker]-Docker Volume 的生命周期管理是怎样的?
java·运维·docker·容器·持久化·架构图·容器卷
Java识堂1 天前
如何对微服务进行拆分?
微服务·云原生·架构
某林2121 天前
Isaac Sim 5.1.0 无头服务器部署与 RTX 显存段错误排障全记录
运维·服务器·docker·容器·isaac
m0_738120721 天前
Docker 环境下 Vulfocus 靶场搭建全流程(附镜像源问题解决方案)
运维·服务器·网络·安全·docker·容器
Plastic garden1 天前
K8s知识(3) Pod亲和性,调度
云原生·容器·kubernetes