K8S原理剖析:调度器原理剖析和实践

大纲

  • K8S调度机制介绍
  • K8S中的调度策略与算法
  • K8S高级调度特性详解

K8S调度机制介绍

Scheduler:为Pod找到一个合适的Node

Kubernetes的Default scheduler

从外部流程看调度器

调度器的内部流程

  1. 通过NodeLister获取所有节点信息;
  2. 整合scheduled pods和assume pods,合并到pods,作为所有已调度Pod信息;
  3. 从pods中整理出node-pods的对应关系表nodeNameToInfo;
  4. 过滤掉不合适的节点;
  5. 给剩下的节点依次打分;
  6. 在分数最高的nodes中随机选择一个节点用于绑定。这是为了避免分数最高的节点被几次调度撞车。

K8S中的调度策略与算法

K8S中的调度策略与算法
 

通过Predicate策略筛选符合条件的Node

典型Predicate算法

算法名称 功能
GeneralPredicates 包含3项基本检查: 节点、端口和规则
NoDiskConflict 检查Node是否可以满足Pod对硬盘的需求
NoVolumeZoneConflict 单集群跨AZ部署时,检查node所在的zone是否能满足Pod对硬盘的需求
MaxEBSVolumeCount 部署在AWS时,检查node是否挂载了太多EBS卷
MaxGCEPDVolumeCount 部署在GCE时,检查node是否挂载了太多PD卷
PodToleratesNodeTaints 检查Pod是否能够容忍node上所有的taints
CheckNodeMemoryPressure 当Pod QoS为besteffort时,检查node剩余内存量, 排除内存压力过大的node
MatchInterPodAffinity 检查node是否满足pod的亲和性、反亲和性需求

通过Priority策略给剩余的Node评分,挑选最优的节点

典型Priority算法

算法名称 功能
LeastRequestedPriority 按node计算资源(CPU/MEM)剩余量排序,挑选最空闲的node
BalancedResourceAllocation 补充LeastRequestedPriority,在cpu和mem的剩余量取平衡
SelectorSpreadPriority 同一个Service/RC下的Pod尽可能的分散在集群中。 Node上运行的同个Service/RC下的
Pod数目越少,分数越高。
NodeAffinityPriority 按soft(preferred) NodeAffinity规则匹配情况排序,规则命中越多,分数越高
TaintTolerationPriority 按pod tolerations与node taints的匹配情况排序,越多的taints不匹配,分数越低
InterPodAffinityPriority 按soft(preferred) Pod Affinity/Anti-Affinity规则匹配情况排序,规则命中越多,分数越高
/低

K8S高级调度特性详解

K8S中的Label与Selector

 Node Affinity 让Pod在一组指定的Node上运行

Pod Affinity 让Pod与指定Service的一组Pod在相同Node上运行

Pod Anti-Affinity 让同一个Service的Pod分在到不同Node上运行

Pod Anti-Affinity具有对称性

Taints-tolerations 来自Node的反亲和配置

发布了389 篇原创文章 · 获赞 1041 · 访问量 163万+

猜你喜欢

转载自blog.csdn.net/fly910905/article/details/103794239