在K8S中,Pod常見排程方式有哪些?

黄嘉波發表於2024-10-09

在Kubernetes(K8s)中,Pod的排程是一個關鍵過程,它決定了Pod在叢集中的哪個節點上執行。K8s提供了多種排程方式,以滿足不同應用的需求。以下是Pod常見的排程方式:

1. 預設排程(自由排程)
  • 功能:Kubernetes的預設排程器(kube-scheduler)會根據一系列內建的排程策略自動選擇適合的節點。
  • 考慮因素:節點的資源(CPU、記憶體)、親和性、反親和性、汙點和容忍度等。
2. 定向排程(NodeName和NodeSelector)
  • 功能:透過節點的標籤(Label)和Pod的nodeSelector屬性相匹配,手動指定Pod排程到特定Node上。
  • 實現方式
    • 為節點打標籤,例如:kubectl label nodes k8s-node1 disk=ssd
    • 在Pod模板檔案中設定NodeSelector的值,例如:nodeSelector: disk: ssd
3. 親和性排程(Affinity)
  • 節點親和性(Node Affinity)
    • 硬規則:必須滿足指定的規則,排程器才可以排程Pod至Node上。例如,Pod只能在具有特定磁碟型別(如SSD)的節點上執行。
    • 軟規則:優先排程至滿足的Node的節點,但不強求。可以設定多個優先順序規則,併為它們設定權重值。
  • Pod親和性(Pod Affinity)
    • 允許Pod有傾向性地與已執行的具有某些標籤的其他Pod放在同一或不同節點上。
    • 硬親和性:必須滿足條件,保證部署在一起。
    • 軟親和性:儘量滿足條件,保證部署在一起。
  • Pod反親和性(Pod Anti-affinity)
    • 用於控制Pod不應該排程到某些節點上,以防止Pod與具有特定標籤的其他Pod執行在同一節點上。
    • 硬反親和性:必須滿足條件,保證分散部署。
    • 軟反親和性:儘量滿足條件,但不強求。
4. 汙點和容忍排程(Taints and Tolerations)
  • 汙點(Taint):應用在節點上,以阻止不滿足條件的Pod被排程到這些節點。
  • 容忍度(Toleration):應用於Pod上,允許(但並不要求)Pod排程到帶有與之匹配的汙點的節點上。
5. 優先順序和搶佔(Priority and Preemption)
  • 優先順序:為Pod設定優先順序,以決定在資源緊張時哪些Pod應該被優先排程。
  • 搶佔:高優先順序的Pod可以搶佔低優先順序Pod所佔用的資源,以確保關鍵工作負載的排程。
6. 資源請求和限制(Resource Requests and Limits)
  • 請求:在Pod定義中指定所需的CPU和記憶體資源,排程器會根據節點的可用資源進行排程。
  • 限制:設定Pod可以使用的最大資源,以避免資源過度消耗。
7. 拓撲分佈約束(Topology Spread Constraints)
  • 用於在拓撲域(如區域、機架)之間均勻分佈Pod,確保高可用性和容錯性。
8. 雲提供商特定的排程方式
  • 不同的雲提供商可能提供特定的排程方式,用於最佳化資源利用或滿足特定的業務需求。例如,AWS提供了Fargate排程器,可以將Pod排程到AWS Fargate伺服器上,而無需管理底層的虛擬機器例項。

綜上所述,Kubernetes提供了靈活多樣的Pod排程方式,可以根據應用需求和叢集資源進行精細化配置。透過利用這些排程方式,使用者可以更好地控制Pod在叢集中的分佈和排程策略。

相關文章