查看: 87|回覆: 0

Kubernetes 调度器打分算法详解:LeastAllocated 与 NodeAffinity

[複製鏈接]

2

主題

0

回帖

0

積分

热心网友

金币
0
閲讀權限
220
精華
0
威望
0
贡献
0
在線時間
0 小時
註冊時間
2008-10-14
發表於 2025-5-7 19:08:00 | 顯示全部樓層 |閲讀模式

1️⃣ NodeResourcesLeastAllocated(资源最少分配)

📌 目标

优先将 Pod 调度到资源使用率最低的节点,防止热点节点,尽量实现负载均衡。

🧠 打分算法原理

对每个节点计算 CPU 和内存的使用率,然后反向打分:

score = (1 - (cpuRequested / cpuCapacity)) * 50 +
        (1 - (memRequested / memCapacity)) * 50
  • 分数范围:0 ~ 100

  • 使用率越低,得分越高

  • CPU 和内存权重各 50%

🧮 每个部分含义

部分 说明 意义
cpuRequested 已被调度的 Pod 请求的 CPU 总和 单位为 millicore
cpuCapacity 节点的 CPU 总容量(allocatable) 单位为 millicore
memRequested 已被调度的 Pod 请求的内存总和 单位为 MiB/GiB
memCapacity 节点的内存总容量 单位为 MiB/GiB
cpuRequested / cpuCapacity CPU 使用率 越高表示节点越繁忙
1 - (...) 空闲度(反向) 越高表示越适合调度
* 50 权重 CPU 和内存各占一半

📊 示例

节点 CPU已用/总 Mem已用/总 计算得分
node-1 200m / 1000m 500Mi / 2Gi (1-0.2)*50 + (1-0.25)*50 = 40 + 37.5 = 77.5
node-2 500m / 1000m 1Gi / 2Gi (1-0.5)*50 + (1-0.5)*50 = 25 + 25 = 50
node-3 800m / 1000m 1.5Gi / 2Gi (1-0.8)*50 + (1-0.75)*50 = 10 + 12.5 = 22.5

✅ 适用场景

  • 高并发场景需要负载均衡

  • 多租户系统,防止资源竞争


2️⃣ NodeAffinity(节点亲和性)

📌 目标

根据用户在 Pod 中定义的 nodeAffinity 条件打分,优先调度到匹配度高的节点。

🧠 用法示例

affinity:
  nodeAffinity:
    preferredDuringSchedulingIgnoredDuringExecution:
      - weight: 100
        preference:
          matchExpressions:
            - key: zone
              operator: In
              values:
                - us-west1
  • 节点 zone=us-west1 → 得 100 分

  • 节点 zone=us-east1 → 得 0 分

⚙️ 打分原理

调度器检查 Pod 的 preferredDuringScheduling... 规则:

  • 匹配 → 加上对应权重

  • 不匹配 → 不加分

  • 最终得分范围:0 ~ 100

✅ 适用场景

  • 有部署位置偏好(如某个可用区)

  • 使用节点标签(如高性能/SSD 节点)


🔄 两者对比

维度 LeastAllocated NodeAffinity
目的 资源均衡使用 匹配节点偏好
核心依据 当前节点资源使用率 Pod 的亲和性配置
控制权 系统自动评估 用户指定策略
打分方式 越空闲分数越高 匹配越多分越高
自定义性 可以调整权重 可以自定义表达式 + 权重



来源:https://www.cnblogs.com/xiaogongzi/p/18864917
回覆

使用道具 舉報

您需要登錄後才可以回帖 登錄 | 立即注册

本版積分規則

相关侵权、举报、投诉及建议等,请发 E-mail:qiongdian@foxmail.com

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部