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

k8s-高级调度(二)

目录

Taint(污点)与Toleration(容忍)

Taint(污点):节点的排斥标记

Toleration(容忍):Pod的适配声明

与节点亲和性的对比

警戒(cordon)和转移(drain)

Cordon:节点隔离(阻止新 Pod 调度)

Drain:节点驱逐(安全迁移所有 Pod)

Cordon vs Drain:核心区别

亲和性和非亲和性

节点亲和性(Node Affinity)

硬性要求(Required During Scheduling Ignored During Execution)

软性偏好(Preferred During Scheduling Ignored During Execution)

Pod 亲和性(Pod Affinity)

硬性要求(Required During Scheduling Ignored During Execution)

软性偏好(Preferred During Scheduling Ignored During Execution)

亲和性规则的核心操作符

亲和性与非亲和性的关系

关键对比与注意事项


Taint(污点)与Toleration(容忍)

在Kubernetes(K8s)中,Taint(污点)Toleration(容忍)是用于控制Pod调度到节点的核心机制,二者协同工作以实现灵活的节点资源分配。

Taint(污点):节点的排斥标记

  • 作用:Taint是节点级别的属性,用于标记节点的特殊限制或要求,阻止不符合条件的Pod被调度到该节点。
  • 组成:每个Taint由三部分构成:
    • Key(键):标识污点的唯一名称(如dedicated=special中的dedicated)。
    • Value(值):可选的附加标识(如special),与Key共同构成唯一标识。
    • Effect(效果):定义污点对Pod的排斥行为,支持以下三种类型:
      • NoSchedule:禁止Pod调度到该节点(除非Pod有匹配的Toleration)。
      • PreferNoSchedule:尽量避免调度,但无其他可用节点时仍可调度。
      • NoExecute:不仅禁止新Pod调度,还会驱逐节点上已存在的、无匹配Toleration的Pod。

Toleration(容忍):Pod的适配声明

  • 作用:Toleration是Pod级别的属性,声明Pod可以容忍哪些节点的污点,从而允许调度到这些节点。
  • 匹配规则:Toleration需与节点的Taint在KeyEffect上完全一致,且满足以下条件之一:
    • Operator为Equal:Value必须相同(如key: "dedicated", operator: "Equal", value: "special", effect: "NoSchedule")。
    • Operator为Exists:忽略Value(如key: "dedicated", operator: "Exists",表示容忍所有以dedicated为Key的污点)。
    • 空Key和Exists:匹配所有污点(如operator: "Exists",表示容忍所有污点)。
  • 特殊参数
    • tolerationSeconds:仅对NoExecute有效,指定Pod在节点被标记污点后继续运行的时间(超时后驱逐)。

与节点亲和性的对比

  • 污点/容忍:通过“排斥”机制控制调度,节点设置污点,Pod声明容忍。
  • 节点亲和性:通过“吸引”机制控制调度,Pod声明偏好或硬性要求,节点无需额外标记。

警戒(cordon)和转移(drain)

在 Kubernetes 中,Cordon 和 Drain 是用于节点管理的两个核心命令,分别通过“隔离”和“驱逐”机制控制 Pod 的调度与迁移,确保节点维护或故障处理时的服务连续性。

Cordon:节点隔离(阻止新 Pod 调度)

  • 作用:将节点标记为 不可调度(SchedulingDisabled),阻止新 Pod 被分配到该节点,但已运行的 Pod 不受影响
  • 典型场景
    • 节点维护:升级内核、更换硬件等操作前,避免新工作负载干扰。
    • 故障排查:节点异常但未完全宕机时,隔离新 Pod 以专注问题修复。
    • 资源优化:临时将节点从调度池中移除,平衡集群负载。

Drain:节点驱逐(安全迁移所有 Pod)

  • 作用主动驱逐节点上的所有 Pod,并将节点标记为不可调度,确保负载平稳迁移至其他节点。
  • 典型场景
    • 节点下线:替换故障节点或退役旧硬件。
    • 批量维护:同时操作多个节点(如滚动升级集群)。
    • 资源回收:释放节点资源以重新分配。
  • 关键特性
    • Pod 驱逐策略
      • 默认忽略 DaemonSet 管理的 Pod(如日志收集器),因其与节点强绑定。
      • 可通过 --force 强制驱逐所有 Pod(慎用,可能导致数据丢失)。
    • 优雅终止
      • 尊重 Pod 的 terminationGracePeriodSeconds,允许进程完成清理。
      • 若 Pod 定义了 PodDisruptionBudget(PDB),Kubernetes 会检查驱逐是否违反最小可用副本数限制。
    • 数据安全
      • --delete-emptydir-data:强制删除使用 emptyDir 卷的 Pod(数据会丢失)。
      • 对于持久化卷(PV),需确保数据可跨节点访问(如云盘或分布式存储)。

Cordon vs Drain:核心区别

特性CordonDrain
作用对象节点调度状态节点上的 Pod
已运行 Pod不影响主动驱逐
典型场景临时隔离节点节点下线或长期维护
数据安全无影响需处理 emptyDir 或本地存储
命令组合常单独使用通常与 cordon 隐式配合(drain 会自动标记节点为不可调度)

亲和性和非亲和性

在 Kubernetes 中,亲和性(Affinity) 主要分为 节点亲和性(Node Affinity) 和 Pod 亲和性(Pod Affinity) 两大类,每类又包含 硬性要求(Required) 和 软性偏好(Preferred) 两种规则。

节点亲和性(Node Affinity)

作用:控制 Pod 调度到满足特定节点标签条件的节点。

硬性要求(Required During Scheduling Ignored During Execution)
  • 规则:Pod 必须调度到满足条件的节点,否则调度失败。
  • 适用场景
    • 节点必须具备特定硬件(如 GPU、SSD)。
    • 节点必须运行特定软件(如特定内核版本)。
    • 节点必须属于特定环境(如生产环境、测试环境)。
软性偏好(Preferred During Scheduling Ignored During Execution)
  • 规则:调度器优先选择满足条件的节点,但不强制。
  • 适用场景
    • 优先使用高性能节点,但允许回退到普通节点。
    • 优先选择负载较低的节点。
    • 优先选择与当前节点标签匹配的节点(如相同区域)。

Pod 亲和性(Pod Affinity)

作用:控制 Pod 调度到与已运行的特定 Pod 共存(或靠近)的节点。

硬性要求(Required During Scheduling Ignored During Execution)
  • 规则:Pod 必须与满足条件的 Pod 运行在同一拓扑域(如节点、可用区)。
  • 关键参数
    • topologyKey:定义拓扑域的范围(如 kubernetes.io/hostname 表示节点级,topology.kubernetes.io/zone 表示可用区级)。
  • 适用场景
    • 确保相关服务(如 Web 和缓存)共存以减少网络延迟。
    • 确保数据库副本分散在不同节点以避免单点故障。
软性偏好(Preferred During Scheduling Ignored During Execution)
  • 规则:调度器优先将 Pod 与满足条件的 Pod 共存,但不强制。
  • 适用场景
    • 优先将 Pod 调度到与目标 Pod 相同的节点或可用区,但允许分散。
    • 优化数据本地性(如计算任务靠近数据存储节点)。

亲和性规则的核心操作符

在定义亲和性条件时,可通过以下操作符匹配节点或 Pod 的标签:

  • In:标签值在指定列表中。
  • NotIn:标签值不在指定列表中。
  • Exists:标签键存在(忽略值)。
  • DoesNotExist:标签键不存在。
  • Gt(仅节点亲和性):标签值为数字且大于指定值。
  • Lt(仅节点亲和性):标签值为数字且小于指定值。

亲和性与非亲和性的关系

  • 亲和性(Affinity):通过标签匹配实现 Pod 与节点或其他 Pod 的吸引
  • 非亲和性(Anti-Affinity):通过标签匹配实现 Pod 与节点或其他 Pod 的排斥
    • 例如:Pod 非亲和性可确保同一服务的副本不运行在同一节点,提高高可用性。

关键对比与注意事项

分类类型规则类型核心作用
节点亲和性硬性要求RequiredDuringScheduling强制匹配节点标签
软性偏好PreferredDuringScheduling优先匹配节点标签
Pod 亲和性硬性要求RequiredDuringScheduling强制共存于指定拓扑域
软性偏好PreferredDuringScheduling优先共存于指定拓扑域
特性亲和性(Affinity)非亲和性(Anti-Affinity)
目的吸引 Pod 共存或选择特定节点排斥 Pod 共存或避开特定节点
类型节点亲和性、Pod 亲和性节点非亲和性、Pod 非亲和性
硬性/软性支持 Required 和 Preferred支持 Required 和 Preferred
拓扑域(TopologyKey)用于 Pod 亲和性定义共存范围用于 Pod 非亲和性定义隔离范围
性能影响复杂规则可能增加调度延迟同上
  • 亲和性:通过标签匹配实现 Pod 与节点或其他 Pod 的吸引,适用于性能优化、共存等场景。
  • 非亲和性:通过标签匹配实现 Pod 与节点或其他 Pod 的排斥,适用于高可用、资源隔离等场景。
  • 灵活组合:结合硬性/软性规则、拓扑键和权重,可构建复杂的调度策略,满足多样化业务需求。

http://www.lryc.cn/news/588418.html

相关文章:

  • SVN客户端(TortoiseSVN)和SVN-VS2022插件(visualsvn)官网下载
  • Kotlin Map映射转换
  • LeetCode 424.替换后的最长重复字符
  • vim扩展
  • 0-1搭建springboot+vue的教务管理系统(核心源码)
  • c++算法一
  • kali安装失败-选择并安装软件包-一步到位
  • 几种上传ipa到app store的工具
  • 深度解读virtio:Linux IO虚拟化核心机制
  • Redis7持久化
  • Gstreamer之”pad-added“事件
  • 并发编程核心概念详解:进程、线程与协程的本质与差异
  • 融合竞争学习与高斯扰动的多目标加权平均算法(MOWAA)求解多无人机协同路径规划(多起点多终点,起始点、无人机数、障碍物可自定义),提供完整MATLAB代码
  • 【抖音滑动验证码风控分析】
  • 【人工智能99问】什么是深度学习?(2/99)
  • RK3568/3588 Android 12 源码默认使用蓝牙mic录音
  • 显示器核心三要素详解:刷新率、分辨率、色深
  • PHP password_get_info() 函数
  • 渗透笔记1-4
  • Java 树形结构、层级结构数据构建
  • 【LeetCode 热题 100】94. 二叉树的中序遍历——DFS
  • 第四章 uniapp实现兼容多端的树状族谱关系图,剩余组件
  • 用基础模型构建应用(第九章)AI Engineering: Building Applications with Foundation Models学习笔记
  • GaussDB in的用法
  • Elasticsearch 9.x 升级变化
  • C++后端面试八股文
  • 【postgresql数据库实现表的树结构查询】
  • 乳化硅油市场报告:深度解析与未来趋势
  • 信息收集的基本流程
  • 非阻塞写入核心:asyncio.StreamWriter 的流量控制与数据推送之道