在 Kubernetes(K8s)中,Pod 调度是指 K8s 系统根据特定规则和策略,将 Pod 合理分配到集群中的某个节点(Node)上运行的过程。其核心目标是确保 Pod 在合适的节点上高效、稳定地运行,充分利用集群资源。

一、调度核心组件

  • kube-scheduler:K8s 核心组件之一,负责执行调度决策。它持续监听未调度的 Pod(Pending 状态),通过一系列算法筛选出符合条件的节点,最终选择最优节点绑定 Pod。
  • 节点(Node):集群中的工作节点,提供计算、存储、网络等资源,是 Pod 的运行载体。
  • Pod:待调度的最小部署单元,包含容器及运行需求(如 CPU、内存、特殊硬件等)。

二、调度流程

kube-scheduler 的调度过程分为过滤(Filtering) 和打分(Scoring) 两个阶段:

  1. 过滤阶段(筛选候选节点)
    从集群所有节点中排除不符合 Pod 运行条件的节点,得到 “候选节点列表”。
    常见过滤规则(谓词):

    • 资源满足:节点的剩余 CPU、内存等资源 ≥ Pod 请求的资源(resources.requests)。
    • 节点选择器匹配:节点标签需满足 Pod 的 nodeSelector 规则(如 env=prod)。
    • 污点与容忍匹配:节点的污点(Taint)需被 Pod 的容忍(Toleration)允许(否则 Pod 无法调度到该节点)。
    • 端口冲突检查:避免 Pod 所需端口在节点上已被占用(针对 hostPort 配置)。

    若过滤后无候选节点,Pod 将一直处于 Pending 状态。

  2. 打分阶段(选择最优节点)
    对候选节点按 “优先级规则” 打分(0-10 分),得分最高的节点被选为最终调度目标。
    常见打分规则(优先级):

    • 资源均衡:优先选择资源使用率较低的节点(避免节点负载过高)。
    • 亲和性偏好:根据 Pod 或节点的亲和性规则(如 nodeAffinitypodAffinity)加分。
    • 镜像 locality:优先选择已缓存 Pod 所需镜像的节点(减少镜像拉取时间)。

三、常用调度策略与示例

1. 节点选择器(nodeSelector)

通过节点标签(Label)和 Pod 的 nodeSelector 直接绑定,简单直观

步骤

  • 给节点打标签:kubectl label nodes node-1 env=prod
  • 在 Pod 中指定选择器:

    yaml

    apiVersion: v1
    kind: Pod
    metadata:name: pod-with-nodeselector
    spec:containers:- name: appimage: nginxnodeSelector:env: prod  # 仅调度到标签为 env=prod 的节点
    

2. 亲和性与反亲和性(Affinity/Anti-Affinity)

比 nodeSelector 更灵活,支持复杂规则(如 “偏好” 或 “必须” 满足、跨 Pod 关联等)。

  • 节点亲和性(nodeAffinity):控制 Pod 调度到哪些节点(基于节点标签)。
    示例:优先调度到 disk=ssd 的节点,若不存在则允许调度到其他节点:

    yaml

    spec:affinity:nodeAffinity:preferredDuringSchedulingIgnoredDuringExecution:  # 偏好规则(非必须)- weight: 100  # 权重(0-100)preference:matchExpressions:- key: diskoperator: Invalues: [ssd]
    
  • Pod 亲和性(podAffinity):让 Pod 调度到与特定 Pod 相同的节点(基于其他 Pod 的标签),适合服务间通信频繁的场景(如前端与后端)。

  • Pod 反亲和性(podAntiAffinity):让 Pod 避免调度到与特定 Pod 相同的节点,适合分散部署(如分布式数据库节点避免集中在同一节点)。

3. 污点(Taint)与容忍(Toleration)

  • 污点(Taint):节点上的 “排斥性标签”,用于阻止 Pod 调度到该节点(除非 Pod 明确 “容忍” 该污点)。
    示例:给节点添加污点(不允许普通 Pod 调度):

    bash

    kubectl taint nodes node-1 key=value:NoSchedule  # NoSchedule 表示拒绝未容忍的 Pod
    
  • 容忍(Toleration):Pod 上的配置,声明可以 “容忍” 节点的某些污点,从而允许被调度到该节点。
    示例:Pod 容忍上述污点:

    yaml

    spec:tolerations:- key: "key"operator: "Equal"value: "value"effect: "NoSchedule"
    

    常见污点效果:

    • NoSchedule:仅影响新 Pod 调度,不影响已运行的 Pod。
    • NoExecute:不仅拒绝新 Pod,还会驱逐已运行的未容忍 Pod。

4. 节点亲和性与污点的区别

  • 亲和性:Pod 主动 “吸引” 到某些节点(Pod 配置规则)。
  • 污点 / 容忍:节点主动 “排斥” Pod,Pod 需主动 “允许” 被调度(节点配置污点,Pod 配置容忍)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/95335.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/95335.shtml
英文地址,请注明出处:http://en.pswp.cn/bicheng/95335.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Tomcat 企业级运维实战系列(四):Tomcat 企业级监控

Tomcat 企业级运维实战系列(四):Tomcat 企业级监控一:监控工具1)概述2)流程3)部署二:监控命令1)jps2)jstack3)jmap4)MAT 工具分析三&a…

技术干货丨HyperMesh 新界面功能与技术升级解析

全文内容选自 Altair 区域技术交流会华东站Altair 高级技术经理 张晨《HyperWorks 2025:下一代建模可视化和二次开发平台》演讲1、引言今天我为大家介绍 HyperMesh——这个大家既熟悉又陌生的工具。说熟悉,是因为它一直是工程仿真领域的主流建模软件&…

《IC验证必看|随机稳定性 / 再现性》

同一用例 A 机 pass、B 机 fail?——SystemVerilog 随机稳定性 / 可复现性全攻略(含代码与排查清单)你该到什么水平?(对标 20k / 25k / 30k) 20k(入门会用) 会 randomize()、$urando…

字符编码的本质

目的 最近做一个加密方面的研究,加密之后的二进制,通过转码之后,再也找不回之前的二进制了。 怎么试都不行,真是非常得奇怪!!!!先说说字符编码基础知识 在信息技术的海洋中&#xff…

网格图--Day03--网格图DFS--2658. 网格图中鱼的最大数目,1034. 边界着色,1020. 飞地的数量

网格图–Day03–网格图DFS–2658. 网格图中鱼的最大数目,1034. 边界着色,1020. 飞地的数量 今天要训练的题目类型是:【网格图DFS】,题单来自灵艾山茶府。 适用于需要计算连通块个数、大小的题目。 部分题目做法不止一种&#xff0…

新能源车焊接中发那科机器人保护气省气方法

在新能源汽车制造领域,焊接工艺是保障车身结构强度与安全性的关键环节,发那科焊接机器人凭借高精度与稳定性成为产线主力设备。保护气体消耗在焊接成本中占比显著,寻找高效省气方法成为行业降本增效的核心需求。WGFACS节气装置以智能化控制技…

CornerNet2025再研究---将目标检测问题视作关键点检测与配对

CornerNet于2019年3月份提出,CW近期回顾了下这个在当时引起不少关注的目标检测模型,它的亮点在于提出了一套新的方法论——将目标检测转化为对物体成对关键点(角点)的检测。通过将目标物体视作成对的关键点,其不需要在图像上铺设先验锚框(anc…

【C++】vector(2)

目录 1. insert的实现 2. 迭代器失效 2.1 迭代器失效的两种情况 指向已释放的内存(物理失效) 元素移动导致迭代器指向错误(逻辑失效) 2.2 修改代码 3. erase的实现 ​编辑修改代码 4. resize的实现 5. 构造函数 5.1 默认…

机器翻译:python库translatepy的详细使用(集成了多种翻译服务)

更多内容请见: 机器翻译修炼-专栏介绍和目录 文章目录 一、translatepy概述 1.1 translatepy介绍 1.1 安装 二、基本使用 2.1 初始化 `Translator` 2.2 文本翻译 2.3 语言检测 2.4 获取翻译备选方案 2.5 单词音标获取 2.6 语音合成 2.7 例句查询 2.8 拼写检查 三、高级功能 3.…

Spring Bean生命周期的完全指南

简介:超越Bean——揭开Spring Bean的隐秘生活 想象一场复杂宏大的舞台剧。作为观众,我们看到的是最终的演出——一个流畅运行的应用程序。但在这光鲜的幕后,隐藏着一套严谨细致的流程:选角(实例化Bean)、试…

网络安全A模块专项练习任务九解析

任务九:Linux操作系统安全配置-2任务环境说明: (Linux)系统:用户名root,密码1234561. 设置禁止使用最近用过的6个旧密码,将配置文件中对应的部分截图;编辑/etc/pam.d/system-auth文件,找到passw…

Linex进程管理

一、进程查看命令1.pstree用于查看进程树之间的关系,谁是父进程,谁是子进程,可以清楚的看出来是谁创建了谁语法:pstree [选项] -A各进程树之间的连接以ASCII码字符来连接-U各进程树之间的连接以utf8字符来连接,某些终…

手写MyBatis第47弹:Interceptor接口设计与Invocation上下文传递机制--MyBatis动态代理生成与方法拦截的精妙实现

🥂(❁◡❁)您的点赞👍➕评论📝➕收藏⭐是作者创作的最大动力🤞 💖📕🎉🔥 支持我:点赞👍收藏⭐️留言📝欢迎留言讨论 🔥🔥&…

自动驾驶中的传感器技术37——Lidar(12)

这里对当前Lidar中的一些常见问题进行专项论述。首先以禾赛Lidar为例,列出相关参数,以备论述。 图1 禾赛AT128参数图2 禾赛AT360参数图3 禾赛AT1440参数图4 禾赛AT128可靠性验证项图5 禾赛AT128产品证书1、Lidar的线束是什么,由什么决定&…

Meteor主题友链页面自研

发布于:Eucalyptus-Blog Meteor主题虽然设计简约现代,但由于缺乏原生的友情链接管理功能,许多博主只能将友情链接勉强添加在网站底部,这不仅影响页面美观,也不便于访客查找和互动;为了解决这一痛点&#xf…

QT控件QPlainTextEdit、QTextEdit与QTextBrowser的区别

一.主要功能对比二.关键功能差异1.文本类型支持QPlainTextEdit:仅支持纯文本(Plain Text),不处理任何格式(如字体、颜色、链接、图片等)。文本以原始字符形式存储,适合处理日志、代码、配置文件…

【思考】WSL是什么

WSL WSL是什么呢? WSL 是 windows subsystem for linux 的简写,指的是 windows10 的一个子系统,这个子系统的作用是在 windows 下运行 linux 操作系统。 有了WSL,就可以在 windows10 中运行linux操作系统了。许多在 linux 种运行的…

基于单片机智能饮水机/智能热水壶

传送门 👉👉👉👉其他作品题目速选一览表 👉👉👉👉其他作品题目功能速览 概述 基于单片机的智能饮水机系统通过嵌入式技术实现水温控制、水量监测及用户交互功能。系统采用STM3…

Unity游戏打包——iOS打包基础、传包

本文由 NRatel 历史笔记整理而来,如有错误欢迎指正。 相关参考文档 Unity文档 -> 平台开发 -> IOS https://docs.unity3d.com/cn/2021.3/Manual/iphone.html Unity导出的Xcode 项目的结构 Modifying an Xcode project use Xcode.PBXProject. https://doc…

pyside6小项目:进制转换器

from PySide6.QtUiTools import QUiLoader from PySide6.QtWidgets import QApplication,QWidgetclass MyWindow(QWidget):def __init__(self):super().__init__()self.ui QUiLoader().load(trans.ui)self.ui.show()#stor data type dictionaryself.lengthVar {米:100, 千米:…