k8s调度的预选策略及优选函数
scheduler调度过程:
Predicate(预选)-->Priority(优选)-->Select(选定)
调度方式:
1.节点亲和性调度(NodeAffinity)使用nodeSelector完成这类调度。
2.Pod亲和性和反亲和性调度(PodAffinity、PodUnAffinity)。
3.污点、污点容忍调度。节点上(Taints污点)、Pod上(Tolerations容忍度)。
参考:
预选策略:https://github.com/kubernetes/kubernetes/tree/master/pkg/scheduler/algorithm/predicates
优选函数:https://github.com/kubernetes/kubernetes/tree/master/pkg/scheduler/algorithm/priorities
预选策略:(几种常用的预选策略)
CheckNodeCondition:检查节点条件。是否可以在节点上的磁盘、网络不可用或未准备好的前提下把Pod调度到此节点。
GeneralPredicates:通用预选策略,包含多种策略:
HostName:检查Pod对象是否定义pod.spec.hostname
PodFitsHostPort:检查Pod对象是否定义pod.spec.containers.ports.hostPort
MatchNodeSelector:pods.spec.nodeSelector
PodFitsResources:检查Pod的资源需求是否能被节点所满足。
NoDiskConflict: 检查Pod依赖的存储卷能否能满足需求。
PodToleratesNodeTaints:检查Pod上的spec.tolerations可容忍的污点是否完全包含节点上的污点。
PodToleratesNodeNoExecuteTaints:Pod允许节点不执行污染;默认不启用。
CheckNodeLabelPresence:检查节点标签;默认不启用
CheckserviceAffinity:检查服务亲和性。默认不启用
MaxEBSVolumeCount:亚马逊弹性存储卷最大数量,默认39
MaxGCEPDVolumeCount:谷歌容器引擎最大存储卷数量,默认16
MaxAzureDiskVolumeCount:Azure最大磁盘数量,默认16
CheckVolumeBinding:检查数据卷绑定
NoVolumeZoneConflict:没有数据卷空间冲突
CheckNodeMemoryPressure:定义检查节点内存压力名称
CheckNodePIDPressure:定义检查节点PID压力的名称
CheckNodeDiskPressure:定义检查节点磁盘压力的名称
MatchInterPodAffinity:定义匹配POD间关联的名称
优选函数:(几种常见的优选函数)
LeastRequested:
(cpu(capacity-sum(requested))*10/capacity)+(memory(capacity-sum(requested))*10/capacity)/2
BalancedResourceAllocation:
CPU和内存资源的被占用率相近的胜出;目的是平衡节点资源的使用率。
NodePreferAvoidPods:
节点注解信息"scheduler.alpha.kubernetes.io/preferAvoidPods"
TaintToleration:
将Pod对象的spec.tolerations与节点的taints列表项进行匹配度检查,匹配的条目越多得分越低。
SelectorSpreading:调度器将pod分散调度。
InterPodAffinity:根据Pod间的亲和性。
NodeAffinity:根据节点亲和性。
MostRequested:根据最多被请求的节点。
NodeLabel:根据节点标签
ImageLocality:
根据满足当前Pod对象需求的已有镜像的体积大小之和。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构