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 中叢集作業的相關詳細資訊,請參閱下列最佳作法: