当前位置: 首页 > news >正文

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-  # 删除污点

四、总结对比

维度cordonuncordondraintaint
核心目标禁用新 Pod 调度恢复新 Pod 调度驱逐 Pod 并禁用调度通过污点规则控制调度
驱逐行为是(非 DaemonSet Pod)
自动化程度手动隔离手动恢复自动驱逐 + 隐含隔离需手动配置污点/容忍度
http://www.dtcms.com/a/328703.html

相关文章:

  • 计算机网络---用户数据报协议User Datagram Protocol(UDP)
  • 【Part 4 未来趋势与技术展望】第一节|技术上的抉择:三维实时渲染与VR全景视频的共生
  • vue--video使用动态src时,视频不更新
  • Java零基础笔记16(Java编程核心:存储读写数据方案—File文件操作、IO流、IO框架)
  • 利用生成式AI与大语言模型(LLM)革新自动化软件测试 —— 测试工程师必读深度解析
  • PythonDay25
  • Android实现Glide/Coil样式图/视频加载框架,Kotlin
  • 《C++进阶之继承多态》【final + 继承与友元 + 继承与静态成员 + 继承模型 + 继承和组合】
  • mapbox进阶,实现精灵图生成和拆分(小图任意大小,不固定),并简单使用
  • 选择排序专栏
  • Docker安装influxdb以及python基本操作
  • 传输层协议 TCP(1)
  • latex 中将新的一个section重新从1开始排序,而不是和前面的section继续排序
  • 更改webpack默认配置项
  • 第二十二天:指针与内存
  • 【C++详解】用红黑树封装模拟实现mymap、myset
  • 代码随想录刷题Day30
  • UnityWeb打包注意事项及与网页端通信
  • 初识c语言————排序方法
  • 【游戏开发记录】一款网游+修仙为背景的游戏
  • 美国英语 8 You‘re Going to Be Fine 早日康复
  • Dify 从入门到精通(第 32/100 篇):Dify 的日志分析与监控
  • 1688跨境寻源通API接入||跨境寻源通有哪些具体的功能和优势?
  • 反射的详解
  • CAP理论深度解析与工程实践指南
  • USB基础 -- USB2.0设备插入的过程
  • 陕西西安一家IPO四年亏损近25亿负债率攀升,控制权稳定性遭质疑
  • 力扣121:买卖股票的最佳时机
  • 100、【OS】【Nuttx】【构建】cmake 配置保存
  • Xsens惯性动作捕捉系统