Kubernetes 高级调度

举报
剑指南天 发表于 2026/10/19 13:58:09 2026/10/19
【摘要】 Scheduler 是作为单独的程序运行的,启动之后会一直访问 API Server,获取 PodSpec.NodeName 为空的 pod,对每个 pod 都会创建一个 binding,表明该 pod 应该放到哪个节点上。

1.简介

Scheduler 是 kubernetes 的调度器,主要的任务是把定义的 pod 分配到集群的节点上。听起来非常简单,但有很多要考虑的问题:

  • 公平:如何保证每个节点都能被分配资源

  • 资源高效利用:集群所有资源最大化被使用

  • 效率:调度的性能要好,能够尽快地对大批量的 pod 完成调度工作

  • 灵活:允许用户根据自己的需求控制调度的逻辑

Scheduler 是作为单独的程序运行的,启动之后会一直访问 API Server,获取 PodSpec.NodeName 为空的 pod,对每个 pod 都会创建一个 binding,表明该 pod 应该放到哪个节点上。

2. 调度过程

调度分为几个部分:首先是过滤掉不满足条件的节点,这个过程称为 predicate;然后对通过的节点按照优先级排序,这个是 priority;最后从中选择优先级最高的节点。如果中间任何一步有错误,就直接返回错误。

3. 高级调度

3.1 污点和容忍

3.1.1 污点(Taint)

污点是标注在节点上的。当节点打上污点后,k8s 不会把 Pod 调度到该节点,除非 Pod 可以容忍该污点。如果节点有多个污点,Pod 需要容忍所有污点才可能会被调度到该节点。

3.1.1.1 污点的策略

a. NoScheduler

如果 Pod 不能忍受这类污点,Pod 不会被调度到这个节点。但是已经调度到这个节点的 Pod 不收影响。

b. PreferNoSchedule

如果 Pod 不能忍受这类污点,k8s 尽量避免将 Pod 调度到具有该污点的的节点上。

c. NoExecute

如果 Pod 不能忍受这类污点,Pod 会马上被驱逐。

如果 Pod 能够忍受这类污点,但是容忍度中没有指定 tolerationSeconds,则 Pod 会一直在这个节点上运行。如果指定了 tolerationSeconds,则 Pod 还能再这个节点继续运行指定的时间长度。

3.1.1.2 污点的设置、查看和去除

3.1.2 容忍(Toleration)

设置了污点的 Node 通过 taint 的 effect:NoSchedule、PreferNoSchedule、NoExecute 和 Pod 之间产生互斥的关系,Pod 将在一定程度上不会被调度到 Node 上。但可以在 Pod 上设置容忍(Toleration),设置了容忍的 Pod 将可以容忍污点的存在,可以被调度到存在污点的 Node 上。

a. key, vaule, effect 要与 Node 上设置的 taint 保持一致

容忍(Toleration)是去匹配节点污点(Taint),匹配条件为:

key必须一致

effect必须一致(NoSchedule/ PreferNoSchedule/ NoExecute)

若 operator=Equal(默认),则 value也要一致

若 operator=Exists,则只要求 key+effect 匹配

特例:

key为空 + operator=Exists→ 匹配所有 key/value(但 effect仍要匹配,除非 effect 也空)

effect为空 → 匹配该 key 下所有 effect

b. operator 的值为 Exists 将会忽略 value 值

c. tolerationSeconds 用于描述当 Pod 需要被驱逐时,可以在节点上继续保留运行的时间,只对 NoExecute 生效

3.2 亲和性

K8s 亲和性就是用标签选择器告诉调度器“这个 Pod 更喜欢(或必须/不要)跟哪些节点 / 其他 Pod 待在一起”的调度偏好规则。

3.2.1 NodeAffinity

pod.spec.nodeAffinity

3.2.2 Pod 亲和性

a. podAffinity

Pod尽量和策略匹配的Pod部署在一起

b. podAntiAffinity

Pod尽量和策略匹配的Pod不要部署在一起

3.3 指定调度节点

3.3.1 pod.spec.nodeName 将 Pod 直接调度到指定的 Node 节点上,会跳过 Scheduler 的调度策略,该匹配规则是强制匹配。

3.3.2 pod.spec.nodeSelector 通过 kubernetes 的 label-selector 机制选择节点,由调度器调度策略匹配 label,而后调度 Pod 到目标节点,该匹配规则属于强制约束

【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。