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 ...
随机推荐
- 【小技巧】如何使上线前初始化数据的SQL脚本可测试?
背景 有时候,我们在上线某些特性时,可能需要提前初始化数据,才能使功能正常运作. 初始化数据,常用的有以下两种途径: 单纯为了这个初始化数据,开发一个Excel文件导入功能 开发人员维护SQL语句初始 ...
- bin格式转safetensors
技术背景 本文主要介绍在Hugging Face上把bin格式的模型文件转为safetensors格式的模型文件,并下载到本地的方法. bin转safetensors 首先安装safetensors: ...
- 用于敏捷开发的最佳免费 UML 工具 2022
Table of Contents hide 1 最好的在线免费 UML图工具 2 免费的 UML Visual Paradigm 在线平台 3 其他福利 4 用于正式和大规模可视化建模的 Vis ...
- DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
DeepSeek 新的 LLM 推理方法 DeepSeek 通过强化学习(RL)提出了一种创新的改进大规模语言模型(LLM)推理能力的方法,这在他们最近关于 DeepSeek-R1 的论文中有详细介绍 ...
- 浅谈Tox之一
本文分享自天翼云开发者社区<浅谈Tox之一>,作者:Moonriver What is tox? tox是通用的virtualenv管理和测试命令行工具,可用于: 使用不同的Python版 ...
- 「二」nginx下载与安装
1.下载地址(开源版):https://nginx.org/en/download.html wget https://nginx.org/download/nginx-1.14.2.tar.gz 2 ...
- PPT图片搭配
- 一个专业DBA应具备的技能
本文可以作为MySQL DBA面试官,以及候选人的双向参考 面试流程 接下来先说下我以往在做MySQL DBA面试时的过程(套路): 1.先自我介绍后,再让候选人花2-5分钟做下自我简介有不少人可能对 ...
- Tinyhttpd 源代码初步解读
Tinyhttpd 是很早以前的一个 web 服务器程序,由 C 语言编写,整个程序十分小巧,源码只有几百行.它一般不适合用于生产环境,因为它很简单,只实现了读取 html 以及 Get / POST ...
- 【Web】Servlet基本概念
Servlet(Server Applet)是Java Servlet的简称,称为小服务程序或服务连接器,用Java编写的服务器端程序,具有独立于平台和协议的特性,主要功能在于交互式地浏览和生成数据, ...