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