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 ...
随机推荐
- Git的快速使用
Git的快速使用 git提交到gitee 1.初始化本地仓库 git init 2.拉取远程仓库代码 git clone https://gitee.com/sword-level_0/mount-t ...
- IDM 下载器 汉化注册激活
将以下程序更改为.bat文件.使用windows的管理员权限打开. 汉化于:https://github.com/WindowsAddict/IDM-Activation-Script @setloc ...
- 【vulhub】redis 4-unacc (redis未授权访问)
渗透环境 攻击机: IP: 192.168.66.130(Kali) 漏洞收录于:vulhub/redis/4-unacc 涉及知识点:redis未授权访问 影响版本:redis 版本 < ...
- 元模型对AI的哲学意义:让机器真正"懂"世界
元模型对AI的哲学意义:让机器真正"懂"世界 (用日常语言和比喻解释) 1. 传统AI像"死记硬背的学生" 问题:现在的ChatGPT就像背了无数词典的人,能对 ...
- 深入理解Hadoop读书笔记-4
背景 公司的物流业务系统目前实现了使用storm集群进行过门事件的实时计算处理,但是还有一个需求,我们需要存储每个标签上传的每条明细数据,然后进行定期的标签报表统计,这个是目前的实时计算框架无法满足的 ...
- thinkphp6 使用自定义命令,生成数据库视图
在 ThinkPHP 命令行工具中,你可以为选项设置 别名,通过为选项指定一个简短的别名来简化命令输入.例如,如果你希望 --force-recreate 选项有一个简短的别名 -f,你可以通过在 a ...
- 【Ubuntu】安装OpenSSH启用远程连接
[Ubuntu]安装OpenSSH启用远程连接 零.安装软件 使用如下代码安装OpenSSH服务端: sudo apt install openssh-server 壹.启动服务 使用如下代码启动Op ...
- 视图必须派生自 WebViewPage 或 WebViewPage
转
以 ASP.NET MVC 5 为例. 遇见类似问题的蛮多的...
- leetcode每日一题:向字符串添加空格
题目 2109. 向字符串添加空格 给你一个下标从 0 开始的字符串 s ,以及一个下标从 0 开始的整数数组 spaces . 数组 spaces 描述原字符串中需要添加空格的下标.每个空格都应该插 ...
- ShadowSql之借Dapper打通ORM最后一公里
ShadowSql专职拼写sql,要想做为ORM就需要借高人之手 我们要借的就是Dapper,Dapper以高性能著称,ShadowSql搭配Dapper就是强强联手 为此本项目内置了一个子项目Dap ...