Azure Kubernetes Services (AKS) 中基本排程器功能的最佳做法

您在管理 Azure Kubernetes Service (AKS) 中的叢集時,往往需要隔離小組和工作負載。 Kubernetes 排程器可讓您控制計算資源的分配,或限制維護事件的影響。

本最佳做法文章著重於叢集操作員的基本 Kubernetes 排程功能。 在本文中,您將學會如何:

  • 使用資源配額提供固定的資源數量給小組或工作負載
  • 使用 Pod 中斷預算限制排程維護的影響

強制執行資源配額

最佳做法指導方針

在命名空間層級規劃及套用資源配額。 如果 Pod 未定義資源要求和限制,則拒絕該部署。 監視資源使用量,並視需要調整配額。

資源要求和限制會放置在 Pod 規格中。 Kubernetes 排程器會在部署時使用要求,以尋找叢集中的可用節點。 限制和要求可在個別 Pod 層級中運作。 如需如何定義這些值的詳細資訊,請參閱定義 Pod 資源要求和限制

若要提供一個方式來保留及限制跨開發小組或專案的資源,請使用「資源配額」。 這些配額會定義在命名空間上,且可用來對下列基礎設定配額:

  • 計算資源,例如 CPU 和記憶體或 GPU。
  • 儲存體資源,包含磁碟區總數,或指定儲存體類別的磁碟空間數。
  • 物件計數,例如可建立的祕密、服務或作業數目上限。

Kubernetes 不會過量使用資源。 一旦累計的資源要求總數超過指派的配額,所有進一步的部署作業皆會失敗。

當您定義資源配額時,命名空間中建立的 Pod 都必須在其 Pod 規格中提供限制或要求。 如果未提供這些值,您可以拒絕部署。 相反地,您可以設定命名空間的預設要求和限制

下列名為 dev-app-team-quotas.yaml 的範例 YAML 資訊清單會設定總共只能有 10 個 CPU、20 Gi 的記憶體和 10 個 Pod 的固定限制:

apiVersion: v1
kind: ResourceQuota
metadata:
  name: dev-app-team
spec:
  hard:
    cpu: "10"
    memory: 20Gi
    pods: "10"

您可以藉由指定命名空間來套用這個資源配額,例如 dev-apps

kubectl apply -f dev-app-team-quotas.yaml --namespace dev-apps

請與您的應用程式開發人員和擁有者合作,了解他們的需求並套用適當的資源配額。

如需可用資源物件、範圍和優先順序的詳細資訊,請參閱 Kubernetes 中的資源配額

使用 Pod 中斷預算規劃可用性

最佳做法指導方針

為維護應用程式的可用性,請定義 Pod 中斷預算 (PDB),以確保叢集中具有可用的 Pod 數目下限。

有兩個干擾性事件會導致 Pod 遭到移除:

非自發性中斷

「非自發性中斷」是超過叢集操作員或應用程式擁有者一般控制力的事件。 Include:

  • 實體機器發生硬體故障
  • 核心異常
  • 刪除節點 VM

下列方式可改善非自發性中斷:

  • 在單一部署中讓 Pod 使用多個複本。
  • 在 AKS 叢集中執行多個節點。

自發性中斷

「自發性中斷」是叢集操作員或應用程式擁有者所要求的事件。 Include:

  • 叢集升級
  • 更新的部署範本
  • 意外刪除 Pod

Kubernetes 為自發性中斷提供 Pod 中斷預算,以便您規劃自發性中斷事件發生時部署或複本集的回應方式。 使用 Pod 中斷預算,叢集操作員可定義可用資源數下限或不可用資源數上限。

若您升級叢集或更新部署範本,Kubernetes 排程器會先排程其他節點上的額外 Pod,再允許自發性中斷事件繼續進行。 排程器會等到叢集其他節點已成功排程定義的 Pod 數目,才會重新啟動節點。

讓我們看看一個複本集範例,此複本集具有五個執行 NGINX 的 Pod。 複本集內的 Pod 已獲派標籤 app: nginx-frontend。 在自發性中斷事件 (例如,叢集升級) 發生期間,您想要確定至少有三個 Pod 會繼續執行。 PodDisruptionBudget 物件的下列 YAML 資訊清單會定義這些需求:

apiVersion: policy/v1
kind: PodDisruptionBudget
metadata:
   name: nginx-pdb
spec:
   minAvailable: 3
   selector:
    matchLabels:
      app: nginx-frontend

您也可以定義百分比 (例如,60%),以便能夠自動補償相應增加 Pod 數目的複本集。

您可以在複本集內定義無法使用的執行個體數目上限。 同樣地,也可以定義無法使用的 Pod 上限百分比。 下列 Pod 中斷預算 YAML 資訊清單會定義複本集內不能有超過兩個 Pod 無法使用:

apiVersion: policy/v1
kind: PodDisruptionBudget
metadata:
   name: nginx-pdb
spec:
   maxUnavailable: 2
   selector:
    matchLabels:
      app: nginx-frontend

在定義了 Pod 中斷預算之後,請將其建立到 AKS 叢集內,就如同您對任何其他 Kubernetes 物件的做法:

kubectl apply -f nginx-pdb.yaml

請與您的應用程式開發人員和擁有者合作,了解他們的需求並套用適當的 Pod 中斷預算。

如需如何使用 Pod 中斷預算的詳細資訊,請參閱指定應用程式的中斷預算

下一步

本文著重於 Kubernetes 排程器的基本功能。 如需 AKS 中叢集作業的相關詳細資訊,請參閱下列最佳作法: