調度使用者叢集的資源

如要在 AWS 上的 GKE 中調度工作負載,您可以設定 AWSNodePools 自動擴充,也可以手動建立及刪除 AWSNodePools 來擴充或縮減。

叢集自動配置器

AWS 上的 GKE 會實作 Kubernetes 叢集自動調度器。當節點需求量高時,叢集自動配置器會在節點集區中新增節點。當需求較低時,叢集自動配置器會縮減至您指定的最小大小。這有助於在需要時提高工作負載的可用性,同時控制成本。

總覽

叢集自動調度器會依據工作負載需求,自動調整指定節點集區中的節點數量。您不需要手動新增或移除節點,也不必超額佈建節點集區。您只需要指定節點集區的大小上下限,叢集就會自動調度資源。

在自動調度叢集資源的過程中,當系統刪除或移動資源時,您的工作負載可能會暫時中斷。舉例來說,假設您的工作負載包含單一副本,當系統刪除目前的節點時,便可能在不同的節點上重新排定該副本的 Pod。在 AWSNodePool 中啟用叢集自動調度資源之前,請先設計工作負載,確保能容忍可能發生的中斷情況,或確保重要 Pod 不會中斷。

叢集自動配置器的運作方式

叢集自動調度器會依每個節點集區來運作。建立節點集區時,您可以在 AWSNodePool Kubernetes 資源中,指定節點集區的最小和最大大小。

如要停用叢集自動調度器,請將 AWSNodePools 中的 spec.minNodeCount 設為等於 spec.maxNodeCount

叢集自動調度資源會根據節點集區節點上執行的 Pod 資源要求 (而非實際資源用量),自動增加或減少節點集區的大小。系統會定期檢查 Pod 和節點的狀態,並採取下列行動:

如果節點集區的節點數量不足,導致 Pod 無法排程,叢集自動配置器會新增節點,直到節點集區達到大小上限為止。如果節點使用率過低,且即使節點集區中的節點數量較少,所有 Pod 仍可排程,叢集自動配置器就會移除節點,直到節點集區達到最小大小為止。如果節點在逾時時間 (10 分鐘) 後無法正常排除,則強制終止節點。寬限期無法設定。

如果 Pod 要求的資源過少 (例如預設值不足),叢集自動調度資源不會更正此情況。您可以為所有工作負載建立適當的資源要求,協助確保叢集自動配置器盡可能準確地運作。

作業條件

叢集自動配置器在調整節點集區大小時,做了下列假設:

  • 所有備用的 Pod 可在其他節點上重新啟動,並可能讓服務短暫中斷。如果您的服務無法容忍中斷,我們不建議使用叢集自動調度器。

  • 單一節點集區中的所有節點具有一組相同的標籤。

  • 如果您有不同執行個體類型的 AWSNodePools,叢集自動調度資源功能會考量啟動新節點的相對成本,並嘗試擴充成本最低的節點集區。

  • 系統不會追蹤一開始建立叢集或節點集區之後手動新增的標籤。由叢集自動配置器建立的節點會被指派在建立節點集區時以 --node-labels 指定的標籤。

調整節點集區大小

AWSNodePool 包含 minNodeCountmaxNodeCount 欄位。這些欄位會宣告集區中工作站節點的數量下限和上限。您可以在建立 AWSNodePool 前後編輯這些值。

事前準備

按照「建立使用者叢集」一文中的操作說明佈建叢集。準備好用於建立叢集的 YAML 檔案 (例如 cluster-0.yaml)。

啟用節點集區自動調度功能

  1. anthos-aws 目錄使用 anthos-gke 將環境切換至管理服務。

    cd anthos-aws
    anthos-gke aws management get-credentials

  2. 如要啟用叢集自動調度器,請編輯 AWSNodePool 的資訊清單。編輯 cluster-0.yaml 檔案,然後找出 AWSNodePool 區段。變更 spec.minNodeCountspec.maxNodeCount 的值。

    以下範例會將這個節點集區的大小下限維持在 3 個節點,但允許叢集自動調度器將大小增加到 10 個節點。

    apiVersion: multicloud.cluster.gke.io/v1
    kind: AWSNodePool
    metadata:
      name: cluster-0-pool-0
    spec:
      clusterName: cluster-0
      version: 1.25.5-gke.2100
      minNodeCount: 3
      maxNodeCount: 10
      ...
    
  3. 接著套用 YAML,調整節點集區大小。

    env HTTPS_PROXY=http://localhost:8118 \
        kubectl apply -f cluster-0.yaml
    
  4. AWSNodePool 資源會轉換為 Resizing 狀態。 AWSNodePool 完成調整大小後,就會進入 Provisioned 狀態。

    env HTTPS_PROXY=http://localhost:8118 \
        kubectl get AWSNodePools
    

    輸出內容會顯示 AWSNodePool 為 Resizing。大小調整作業需要幾分鐘才能完成。

    NAME               CLUSTER     STATE     AGE   VERSION
    cluster-0-pool-0   cluster-0   Resizing  3h    1.25.5-gke.2100
    

手動建立新的 AWSNodePool

您也可以建立新的 AWSNodePools,藉此擴充叢集。建立新的 AWSNodePool 時,您也可以擴大或縮小執行個體大小

  1. 您可以使用 kubectl get 擷取現有 AWSNodePool 的設定資訊清單。

    env HTTPS_PROXY=http://localhost:8118 \
      kubectl get awsnodepool cluster-0-pool-0 -o yaml > new_nodepool.yaml
    
  2. 編輯 new_nodepool.yaml,並移除下列範例中沒有的區段。儲存檔案。

    apiVersion: multicloud.cluster.gke.io/v1
    kind: AWSNodePool
    metadata:
      name: NODE_POOL_NAME
    spec:
      clusterName: AWSCLUSTER_NAME
      version:  CLUSTER_VERSION # latest version is 1.25.5-gke.2100
      region: AWS_REGION
      subnetID: AWS_SUBNET_ID
      minNodeCount: MINIMUM_NODE_COUNT
      maxNodeCount: MAXIMUM_NODE_COUNT
      maxPodsPerNode: MAXIMUM_PODS_PER_NODE_COUNT
      instanceType: AWS_NODE_TYPE
      keyName: KMS_KEY_PAIR_NAME
      iamInstanceProfile: NODE_IAM_PROFILE
      proxySecretName: PROXY_SECRET_NAME
      rootVolume:
        sizeGiB: ROOT_VOLUME_SIZE
        volumeType: VOLUME_TYPE # Optional
        iops: IOPS # Optional
        kmsKeyARN: NODE_VOLUME_KEY # Optional 
    
  3. 如要建立新的 AWSNodePool,請將資訊清單套用至管理叢集。

    env HTTPS_PROXY=http://localhost:8118 \
      kubectl apply -f new_nodepool.yaml
    

後續步驟

部署由 Ingress 支援的服務。

如要查看其他選項,請參閱 AWSNodePool 的參考說明文件。