本文說明 Google Distributed Cloud 中使用者叢集的自動調度功能。
叢集自動調度功能會依據工作負載需求,增加或減少節點集區中的節點數量。
事前準備
請參閱限制一節,瞭解叢集自動配置器的限制。
叢集自動調度器會做出下列假設:
所有備用的 Pod 可在其他節點上重新啟動,並可能讓服務短暫中斷。如果您的服務無法容忍中斷,我們不建議使用叢集自動調度器。
使用者或管理員不會手動管理節點。如果節點集區已啟用自動調度資源功能,您就無法覆寫節點集區的
replicas
欄位。單一節點集區中的所有節點具有一組相同的標籤。
叢集自動調度資源的運作方式
叢集自動配置器是以節點集區為基礎運作。為節點集區啟用自動調度資源時,請指定集區的節點數量下限和上限。
叢集自動調度器會根據節點上執行的 Pod 的資源要求 (而非實際資源用量),自動增加或減少集區中的節點數量。系統會定期檢查 Pod 和節點的狀態,並採取下列行動:
如果集區中的節點不足,導致 Pod 無法排程,叢集自動調度器會新增節點,最多可新增至指定上限。
如果節點使用率偏低,且所有 Pod 都能排程到集區中較少的節點,叢集自動配置器就會移除節點,直到達到指定的最低數量。如果節點無法正常排除,系統會強制終止節點,並安全地卸載附加的 Kubernetes 管理磁碟。
如果 Pod 要求的資源過少 (或未變更預設值而導致資源不足) 且您沒有足夠的節點,叢集自動配置器將不會更正此情況。您可以為所有工作負載做出明確的資源要求,協助確保叢集自動配置器準確運作。
針對個別節點集區,minReplicas
必須 ≥ 1。不過,在任何時間點,未受汙染的使用者叢集節點總和都必須至少為 3。也就是說,所有自動調度資源節點集區的 minReplicas
值總和,加上所有非自動調度資源節點集區的 replicas
值總和,必須至少為 3。
叢集自動配置器會考量不同節點集區中執行個體類型的相對成本,並試著擴充節點集區,盡可能減少浪費。
建立具有自動調度資源功能的使用者叢集
如要建立啟用節點集區自動調度資源功能的使用者叢集,請填寫使用者叢集設定檔中節點集區的 autoscaling
區段。例如:
nodePools: - name: pool‐1 … replicas: 3 ... autoscaling: minReplicas: 1 maxReplicas: 5
上述設定會建立含有 3 個副本的節點集區,並套用自動調度功能,將節點集區大小下限設為 1,上限設為 5。
minReplicas
值必須 ≥ 1。節點集區無法縮減至零個節點。
新增具有自動調度資源功能的節點集區
如要在現有叢集中新增具有自動調度資源功能的節點集區,請執行下列步驟:
編輯使用者叢集設定檔,新增節點集區,並加入集區的
autoscaling
區段。視需要設定replicas
、minReplicas
和maxReplicas
的值。例如:nodePools: - name: my-new-node-pool … replicas: 3 ... autoscaling: minReplicas: 2 maxReplicas: 6
更新叢集:
gkectl update cluster --config USER_CLUSTER_CONFIG \ --kubeconfig ADMIN_CLUSTER_KUBECONFIG
為現有節點集區啟用自動調度資源功能
如要為現有叢集中的節點集區啟用自動調度資源功能,請按照下列步驟操作:
在使用者叢集設定檔中編輯特定
nodePool
,並加入autoscaling
區段。視需要設定minReplicas
和maxReplicas
的值。nodePools: - name: my-existing-node-pool … replicas: 3 ... autoscaling: minReplicas: 1 maxReplicas: 5
更新叢集:
gkectl update cluster --config USER_CLUSTER_CONFIG \ --kubeconfig ADMIN_CLUSTER_KUBECONFIG
停用現有節點集區的自動調度資源功能
如要停用特定節點集區的自動調度資源功能:
編輯使用者叢集設定檔,並移除該節點集區的
autoscaling
區段。執行
gkectl update cluster
。
檢查叢集自動配置器行為
您可以透過幾種方式,判斷叢集自動配置器正在執行的作業。
檢查叢集自動調度資源記錄
首先,找出叢集自動配置器 Pod 的名稱:
kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG get pods -n USER_CLUSTER_NAME | grep cluster-autoscaler
檢查叢集自動配置器 Pod 的記錄:
kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG logs cluster-autoscaler-POD_NAME --container cluster-autoscaler -n USER_CLUSTER_NAME
將 POD_NAME 替換為叢集自動調度器 Pod 的名稱。
檢查設定地圖
叢集自動調整程式會發布kube-system/cluster-autoscaler-status
設定對應。
如要查看設定地圖,請按照下列步驟操作:
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG get configmap cluster-autoscaler-status -n kube-system -o yaml
檢查叢集自動調度資源事件。
您可以查看叢集自動調度事件:
- 在 Pod 上 (特別是無法排程的 Pod,或是在未充分利用的節點上)
- 節點
- 在
kube-system/cluster-autoscaler-status
設定對應中。
限制
叢集自動配置器有下列限制:
系統不支援使用變更後的篩選器自訂時間表。
如果 Pod 的
PriorityClass
值低於-10
,節點就不會擴充。詳情請參閱「叢集自動配置器如何搭配 Pod 優先順序和搶占功能運作?」。Windows 節點集區不支援自動調度資源功能。
疑難排解
有時,叢集自動配置器會無法完全縮減,且在縮減後會存在額外的節點。當所需的系統 Pod 被安排到不同節點時會發生這種情況,因為沒有任何觸發條件可以將任何這些 Pod 移動到不同的節點。請參閱我有幾個利用率低的節點,但它們並沒有縮減,為什麼會這樣?如要解決這項限制,您可以設定 Pod 中斷預算設定。
如果縮減叢集時發生問題,請參閱Pod 排程和中斷。 你可能必須為
kube-system
Pod 新增PodDisruptionBudget
。如要進一步瞭解如何手動為 Pod 新增PodDisruptionBudget
kube-system
,請參閱 Kubernetes 叢集自動配置器常見問題。叢集自動配置器在縮減資源時,會遵循 Pod 上的排程和移除規則。這些限制可能會讓自動配置器無法刪除節點。如果節點包含的 Pod 具有下述任一情況,將無法刪除節點:
Pod 的相依性或反相依性規則會阻止重新排程。
Pod 有本機儲存空間。
Pod 並非由控制器 (如 Deployment、StatefulSet、Job 或 ReplicaSet) 所管理。
Pod 位於 kube-system 命名空間,且沒有 PodDisruptionBudget
應用程式的 PodDisruptionBudget 可能會阻礙自動調度資源功能。如果刪除節點會造成預算超過,叢集將不會縮減資源。
更多資訊
如要進一步瞭解叢集自動配置器並防範中斷,請參閱 Kubernetes 叢集自動配置器常見問題中的下列問題: