Kubernetes 调度器打分算法详解:LeastAllocated 与 NodeAffinity
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 的亲和性配置 |
| 控制权 | 系统自动评估 | 用户指定策略 |
| 打分方式 | 越空闲分数越高 | 匹配越多分越高 |
| 自定义性 | 可以调整权重 | 可以自定义表达式 + 权重 |
Kubernetes 调度器打分算法详解:LeastAllocated 与 NodeAffinity的更多相关文章
- [Spark内核] 第36课:TaskScheduler内幕天机解密:Spark shell案例运行日志详解、TaskScheduler和SchedulerBackend、FIFO与FAIR、Task运行时本地性算法详解等
本課主題 通过 Spark-shell 窥探程序运行时的状况 TaskScheduler 与 SchedulerBackend 之间的关系 FIFO 与 FAIR 两种调度模式彻底解密 Task 数据 ...
- 第二十九节,目标检测算法之R-CNN算法详解
Girshick, Ross, et al. “Rich feature hierarchies for accurate object detection and semantic segmenta ...
- Kubernetes 调度器实现初探
Kubernetes 调度器 Kubernetes 是一个基于容器的分布式调度器,实现了自己的调度模块.在Kubernetes集群中,调度器作为一个独立模块通过pod运行.从几个方面介绍Kuberne ...
- Kubernetes K8S之存储Volume详解
K8S之存储Volume概述与说明,并详解常用Volume示例 主机配置规划 服务器名称(hostname) 系统版本 配置 内网IP 外网IP(模拟) k8s-master CentOS7.7 2C ...
- kubernetes 调度器
调度器 kube-scheduler 是 kubernetes 的核心组件之一,主要负责整个集群资源的调度功能,根据特定的调度算法和策略,将 Pod 调度到最优的工作节点上面去,从而更加合理.更加充分 ...
- 第三十节,目标检测算法之Fast R-CNN算法详解
Girshick, Ross. “Fast r-cnn.” Proceedings of the IEEE International Conference on Computer Vision. 2 ...
- Kubernetes YAML 文件全字段详解
Kubernetes YAML 文件全字段详解 Deployment yaml 其中主要参数都在podTemplate 中,DaemonSet StatefulSet 中的pod部分一样. apiVe ...
- Kubernetes(k8s)pod详解
一.简介 在Kubernetes集群中,Pod是所有业务类型的基础,也是K8S管理的最小单位级,它是一个或多个容器的组合.这些容器共享存储.网络和命名空间,以及如何运行的规范.在Pod中,所有容器都被 ...
- Struts2拦截器的使用 (详解)
Struts2拦截器的使用 (详解) 如何使用struts2拦截器,或者自定义拦截器.特别注意,在使用拦截器的时候,在Action里面必须最后一定要引用struts2自带的拦截器缺省堆栈default ...
- BM算法 Boyer-Moore高质量实现代码详解与算法详解
Boyer-Moore高质量实现代码详解与算法详解 鉴于我见到对算法本身分析非常透彻的文章以及实现的非常精巧的文章,所以就转载了,本文的贡献在于将两者结合起来,方便大家了解代码实现! 算法详解转自:h ...
随机推荐
- ffmpeg-5.0-essentials_build 下载
ffmpeg-5.0-essentials_build下载放到蓝奏里了 https://wwz.lanzoub.com/if9xq02pttkb密码:ee8i
- 【COM3D2Mod 制作教程(7)】实战!制作衣服部分(上)
[COM3D2Mod 制作教程(7)]实战!制作衣服部分(上) 教程介绍 隔了 N 个月终于迎来了第二期的 Mod 教程部分,这一期我们将开始制作人物的衣服部分. 因为体型适配的原因,衣服部分要比身体 ...
- 批量视频剪辑软件开心版合集——CRVideoMate、固乔剪辑助手、批量剪辑大师MV批量创作大师、ai全自动剪辑
CRVideoMate(推荐) 非常好用的批量剪辑工具,如果是简单的基础处理完全是够用了. 软件的官网:http://www.cr-soft.net/crvideomate.html 如果经济允许推荐 ...
- 【BUUCTF】HardSQL
[BUUCTF]HardSQL 题目来源 收录于:BUUCTF 极客大挑战 2019 题目描述 一道纯粹的SQL注入题 尝试进行注入,发现对以下字符进行了过滤: = %20(空格) %09 %0a % ...
- 【FAQ】HarmonyOS SDK 闭源开放能力 —Map Kit(5)
1.问题描述: 提供两套标准方案,可根据体验需求选择: 1.地图Picker(地点详情) 用户体验:①展示地图 ②标记地点 ③用户选择已安装地图应用 接入文档:https://developer.hu ...
- 【配置化】C# dapper是怎么实现的?精短ORM
目录 一.什么是dapper 二.实现问题与思路 & 源码参考 三.小结 一.什么是dapper dapper是个组件,一个dll文件,可以通过NuGet下载. 作用:快速访问数据库并自动完成 ...
- springboot报错说 Failed to parse multipart servlet request; nested exception is java.io.IOException
问题:一次开发中遇到一个springboot的异常,如下所示:Failed to parse multipart servlet request; nested exception is java.i ...
- 解决nvm ls-remote 列表只出现iojs版本
前言 在 nvm 安装 node 时发现显示不存在此版本,使用 nvm ls-remote 查看可安装列表时发现,列表中只有 iojs $ nvm ls-remote iojs-v1.0.0 iojs ...
- linux 查看jdk安装路径
[root@iz2ze9ufq5ehrayz6j88saz bin]# java -version java version "1.8.0_191" Java(TM) SE Run ...
- NextJS CVE-2025-29927 安全漏洞
NextJS CVE-2025-29927 安全漏洞 CVE-2025-29927 是一个存在于 Next.js 框架中的关键安全漏洞.该漏洞允许攻击者通过伪造或篡改 x-middleware-sub ...