天天看點

kubernetes-scheduler排程器

排程器:

預選政策:
    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