Scheduler
Predicate --> Priority --> Select
预选策略:https://github.com/kubernetes/kubernetes/tree/v1.11.1/pkg/scheduler/algorithm/predicates
https://github.com/kubernetes/kubernetes/blob/v1.11.1/pkg/scheduler/algorithm/predicates/predicates.go
调度器:
预选策略:
CheckNodeCondition:
GeneralPredicates
HostName: 检查Pod对象是否定义了pod.spec.hostname
PodsFitsHostPorts: pods.spec.containers.ports.hostPort
MatchNodeSelector: pods.spec.nodeSelector
PodFitsResources: 检查Pod的资源需求是否能被节点所满足
NoDiskConfict: 检查Pod依赖的存储卷是否满足需求;
PodToleratesNodeTaints: 检查Pod上的spec.tolerations可容忍的污点是否完全包含节点上的污点;
PodToleratesNodeNoExecuteTaints:
CheckNodeLabelPresence:
CheckServiceAffinity:
MaxEBSVolumCount
MaxGCEPDVolumeCount
MaxAzureDiskVolumeCount
CheckVolumeBinding:
NoVolumeZoneConflict:
CheckNodeMemoryPressure
CheckNodePIDPressure
CheckNodeDiskPressure
MatchInterPodAffity
优先函数:
https://github.com/kubernetes/kubernetes/tree/v1.11.10/pkg/scheduler/algorithm/priorities
LeastRequested:
(cpu((capacity-sum(requested))*10/capacity)+memory(cpu((capacity-sum(requested))*10/capacity)/2
BalancedResourceAllocation:
CPU和内存资源被占用率相近的胜出;
NodePreferAvoidPods:
节点注解信息"scheduler.alpha.kubernetes.io/preferAvoidPods"
TaintToleration: 将Pod对象的spec.tolerations列表项与节点的taints列表项进行匹配度检查,匹配条目越多,得分越低;
SeletorSpreading:
InterPodAffinity:
NodeAffinity:
MostRequested:
NodeLabel:
ImageLocality: 根据满足当前Pod对象需求的已有镜像的体积大小之和
master:
[root@master ~]# kubectl explain pods.spec [root@master ~]# kubectl explain pods.spec.containers.ports Allocated resources: (Total limits may be over 100 percent, i.e., overcommitted.) Resource Requests Limits -------- -------- ------ cpu 250m (12%) 0 (0%) memory 0 (0%) 0 (0%) [root@master ~]# kubectl explain pods.spec
浙公网安备 33010602011771号