https://github.com/kubernetes/kubernetes/blob/master/pkg/scheduler/algorithm/predicates/predicates.go
预选策略:
1、CheckNodeCondition:
2、GeneralPredicates
HostName:检查Pod对象是否定义了pod.spec.hostname
PodFitsHostPorts:pods.spec.containers.ports.hostPort
MahchNodeSelector:pods.spec.nodeSelector
PodFitsResources:pod的需求节点是否满足(kubectl describe nodes node
3、NoDiskConflict:检查pod依赖的存储卷是否满足需求 (默认未启用)
4、PodToleratesNodeTaints:检查pod上的spec.tolerations可容忍的污点是否完全包含节点上的污点
5、PodToleratesNodeNoExecuteTaints:接纳NoExecute类型的污点,node会驱离(未启用)
6、CheckNodelabelPresence:检查节点标签存在(未启用)
7、ChenkServiceAffinity:跟随service下的pod(未启用)
8、MaxEBSVolumeCountPred(亚马逊弹性块存储)CNCF
9、MaxGCEPDVolumeCountPred(谷歌云环境)CNCF
10、MaxAzureDiskVolumeCountPred(AzureDisk)CNCF
11、CheckVolumeBinding:
12、NoVolumeZoneConflict:区域限制
13、CheckNodeMemoryPressure:检查节点内存压力
14、CheckNodePIDPressure:检查PID数量
15、CheckNodeDiskPressure:
16、MatchInterPodAffinity:pod亲和性
1、least_requested:最少请求(节点剩余容量/节点总容量)
cpu((capacity-sum(requested))*10/capacity)
memory((capacity-sum(requested))*10/capacity)
2、balanced_resource_allocation:cpu与内存均衡资源分配,越接近越好
3、node_prefer_avoid_pods:得分占用比例高,根据节点注解信息来判定
节点注解信息"scheduler.alpha.kubernetes.io/preferAvlidPods"
4、taint_toleration:将pod对象的spec.tolerations列表项与节点的taints列表项匹配的条目越多、得分越低
5、selector_spreading:被同一个标签匹配到的pod散开到各节点上
6、interpod_affinity:用pod去匹配节点,匹配项多得分多
7、node_affinity:节点亲和性
8、most_requested:尽可能把几点资源用完
9、node_label:有标签就得分
10、image_locality:根据节点上是否拥有此pod所需要的镜像来判定,而且是根据镜像的体积之和来判定不是数量
调度方式:
1、节点倾向性
2、pod倾向性、反倾向性(pod倾向的pod所在的节点)还有反倾向性如一个pod绑定http,这个pod要绑定nginx,那么他两排 斥安全性、pod运行数据机密要隔离开
3、Taints(node),Tolerations(pod)污点和污点容忍,给节点打上污点标识,给pod定义容忍那些污点的能力,pod仅会运 行在具有这些污点子集的node上