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)
自动化程度 手动隔离 手动恢复 自动驱逐 + 隐含隔离 需手动配置污点/容忍度
相关推荐
spider_xcxc28 分钟前
Docker 实战:容器化多服务应用,Dockerfile 与 Compose 配置全解析
docker·云原生·eureka·虚拟化·容器化
hay_lee1 小时前
Kubernetes StatefulSet:OrderedReady 极简指南
云原生·容器·kubernetes
晚风吹长发1 小时前
Docker使用——Docker容器及相关命令
linux·运维·服务器·docker·容器·架构
ShiXZ2132 小时前
Docker Compose 安装与配置指南
运维·docker·容器
BullSmall3 小时前
Anolis OS 8.10 Docker 部署 SonarQube 9.9 完整教程
运维·docker·容器
人间凡尔赛3 小时前
AI-Native 云原生架构:2026 年从容器编排到智能体编排的范式革命
后端·云原生·架构
成为你的宁宁3 小时前
【K8s HPA 水平扩缩容】
kubernetes·hpa
欢醉4 小时前
k8s调度容器失败The node had condition: [DiskPressure]
kubernetes·springcloud
Linux-187413 小时前
分布式链路追踪系统之docker-compose安装skywalking
云原生·docker-compose·skywalking·分布式链路追踪系统·应用程序性能监控
生活爱好者!19 小时前
我把NAS当作下载机,docker一键部署qb
运维·docker·容器