啟用叢集自動調度資源

本文說明 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。節點集區無法縮減至零個節點。

新增具有自動調度資源功能的節點集區

如要在現有叢集中新增具有自動調度資源功能的節點集區,請執行下列步驟:

  1. 編輯使用者叢集設定檔,新增節點集區,並加入集區的 autoscaling 區段。視需要設定 replicasminReplicasmaxReplicas 的值。例如:

    nodePools:
    - name: my-new-node-pool
      …
      replicas: 3
      ...
      autoscaling:
        minReplicas: 2
        maxReplicas: 6
    
  2. 更新叢集:

    gkectl update cluster --config USER_CLUSTER_CONFIG \
      --kubeconfig ADMIN_CLUSTER_KUBECONFIG
    

為現有節點集區啟用自動調度資源功能

如要為現有叢集中的節點集區啟用自動調度資源功能,請按照下列步驟操作:

  1. 在使用者叢集設定檔中編輯特定 nodePool,並加入 autoscaling 區段。視需要設定 minReplicasmaxReplicas 的值。

    nodePools:
    - name: my-existing-node-pool
      …
      replicas: 3
      ...
      autoscaling:
        minReplicas: 1
        maxReplicas: 5
    
  2. 更新叢集:

    gkectl update cluster --config USER_CLUSTER_CONFIG \
      --kubeconfig ADMIN_CLUSTER_KUBECONFIG
    

停用現有節點集區的自動調度資源功能

如要停用特定節點集區的自動調度資源功能:

  1. 編輯使用者叢集設定檔,並移除該節點集區的 autoscaling 區段。

  2. 執行 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 被安排到不同節點時會發生這種情況,因為沒有任何觸發條件可以將任何這些 Pod 移動到不同的節點。請參閱我有幾個利用率低的節點,但它們並沒有縮減,為什麼會這樣?如要解決這項限制,您可以設定 Pod 中斷預算設定

  • 如果縮減叢集時發生問題,請參閱Pod 排程和中斷。 你可能必須為 kube-system Pod 新增 PodDisruptionBudget。如要進一步瞭解如何手動為 Pod 新增 PodDisruptionBudget kube-system,請參閱 Kubernetes 叢集自動配置器常見問題

  • 叢集自動配置器在縮減資源時,會遵循 Pod 上的排程和移除規則。這些限制可能會讓自動配置器無法刪除節點。如果節點包含的 Pod 具有下述任一情況,將無法刪除節點:

  • 應用程式的 PodDisruptionBudget 可能會阻礙自動調度資源功能。如果刪除節點會造成預算超過,叢集將不會縮減資源。

更多資訊

如要進一步瞭解叢集自動配置器並防範中斷,請參閱 Kubernetes 叢集自動配置器常見問題中的下列問題: