K8s Pod调度【学习笔记】

Pod调度

先筛选"能运行的节点",再选择"最合适的节点"

一、Pod调度核心流程

K8s调度器主要分为两个阶段:

  1. 节点筛选(Filter)
  2. 节点评分(Score)

二、流程图

三、节点筛选(Filter阶段):

调度器会从所有节点中筛选出"可用节点",主要依据以下条件:

  1. 节点选择(nodeSelecor/nodeAffinity)

根据标签筛选节点,如:

复制代码
nodeSelector:
    xx: yy

指定节点名运行,如

复制代码
nodeName:K8s-master

根据标签亲和性(硬约束)筛选节点,如:

复制代码
affinity:
  nodeAffinity:
    requiredDuringSchedulingIgnoredDuringExecution:
      nodeSelectorTerms:
      - matchExpressions:
        - key: disktype
          operator: In
          values: ["ssd"]
  1. 污点与容忍(Taints & Tolerations)

如果节点有污点,Pod必须有对应容忍才能调度

复制代码
tolereations:
    effect: NoSchedule
    key: xx
    value: yy
    operator: Equal
  1. 资源检查(requests)

判断节点是否有足够CPU/内存资源满足Pod的requests要求

复制代码
resources:
    requests:
        memory: 500Mi

四、节点评分(Score阶段):

在筛选出的节点中,调度器会根据策略进行打分,如:

  • 资源利用率(空闲优先)
  • Pod分布均衡
  • Affinity(preferred)软约束
  • Node负载情况

最终选择最优节点。

五、requests和limits区别

  • requests:调度依据
  • limits:运行限制

六、资源限制对调度影响

  • 当requests设过高时,Pod可能无法调度(Pending状态)
  • 当limits设置过低时,容器可能被限制性能甚至被杀掉

    apiVersion: v1
    kind: Pod
    metadata:
    name: mem-test
    spec:
    containers:
    - name: mem-test
    image: python:3.9
    command: ["python", "-c"]
    args:
    - |
    a = []
    while True:
    a.append(' ' * 10**7)
    resources:
    requests:
    memory: "100Mi"
    limits:
    memory: "200Mi"

相关推荐
LinXunFeng7 小时前
Obsidian - 使用 Share Note 分享笔记并自部署
前端·笔记·github
通信小呆呆5 天前
当算法有了“五感”:多模态数据融合如何向人体感官协同学习?
人工智能·学习·算法·机器学习·机器人
H__Rick5 天前
自动对焦学习-3
人工智能·学习·计算机视觉
Daisy Lee5 天前
量化学习-第1章-什么是量化金融
学习·金融·datawhale
Alsn865 天前
等待学习-学习目录:Docker 容器安全攻防
学习·安全·docker
YM52e5 天前
买菜计算器小应用 - HarmonyOS ArkUI 开发实战-PC版本
学习·华为·harmonyos·鸿蒙·鸿蒙系统
小雨下雨的雨5 天前
HarmonyOS ArkUI训练营入门-组件掌握系列-Animation 动画效果实现-PC版本
学习·华为·harmonyos·鸿蒙
闪闪发亮的小星星5 天前
高斯光以及高斯光公式解释
笔记
cqbzcsq5 天前
CellFlow虚拟细胞论文阅读
论文阅读·人工智能·笔记·学习·生物信息
java_cj5 天前
深入kube-apiserver认证机制:从Bearer Token到mTLS的完整认证链解析
linux·运维·服务器·云原生·容器·kubernetes