排程器:
預選政策:
CheckNodeCondition:
GeneralPredicates
HostName: 檢查pod對象是否定義了pod.spec.hostname;
PodFitsHostPorts:
MatchNodeSelector:
PodFitsResources: 檢查pod的資源需求是否能被節點所滿足;
NoDiskConflict: 檢查pod依賴的存儲卷是否能滿足需求;
PodToleratesNodeTaints: 檢查pod上的spec.tolerations能夠容忍的污點能否完全包含節點上的污點;
PodToleratesNodeNoExecuteTaints: 不能容忍的污點,預設不啟用
CheckNodeLabelPresence: 檢查标簽的存在性;
CheckServiceAffinity: 将pod排程到他所屬的service其他pod已經排程完成的節點上, 預設沒有啟用
MaxEBSVolumeCount
MAXGCEPDvolumeCount
MAXAzureDiskVolumeCount
CheckVolumeBinding: 檢查pvc
NoVolumeZoneConflict:
CheckNodeMemoryPressure: 檢查節點記憶體資源是否處于壓力過大的狀态;
CheckNodePIDPressure: 檢查節點PID程序量過多問題
CheckNodeDiskPressure:
MatchInterPodAffinity: 檢查滿足的親和性或非親和性
優選函數:
LeastRequested: 根據空閑比率來評估的;
cpu((capacity-sum(requested))*10/capacity) + memory((capacity-sum(requested))*10/capacity)
BalancedResourceAllocation:
與CPU和記憶體的占用率相近的勝出;
NodePreferAvoidPods:
根據節點的注解資訊"scheduler.alpha.kubernetes.io/preferAvoidPods"
TainToleration:
将pod對象的spec.tolerations清單項與節點的taints清單項進行比對度檢查,比對條目越多,得分越多
SeletorSpreading: 與此pod目前pod對象同屬的标簽選擇器選擇的節點,比對越多得分越低;
InterPodAffinity:
NodeAffinity: 節點親和性
MostRequested: LeastRequested計算值越小越優先
NodeLabel: 根據節點标簽評估得分的
ImageLocality: 根據滿足目前Pod對象需求的已有鏡像的體積大小評估得分
kubernetes進階排程方式
節點選擇器: nodeselector, nodename
節點親和排程: nodeAffinity
nodeselector: 精确比對
nodeAffinity:
kubectl explain pods.spec.affinity.nodeAffinity
preferredDuringSchedulingIgnoredDuringExecution --軟親和性
requiredDuringSchedulingIgnoredDuringExecution --硬親和性
污點:
每一個污點都必須被容忍, 不能容忍需要根據參數排程;
NoSchedule: 僅影響排程過程,對現存的Pod對象不産生影響;
NoExecute: 既影響排程過程,也影響現存的Pod對象,不容忍的Pod對象将被驅逐;
PreferNoSchedule:
修改節點上的污點:
kubectl taint Node name key=value:TAINT