如要在 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 包含 minNodeCount
和 maxNodeCount
欄位。這些欄位會宣告集區中工作站節點的數量下限和上限。您可以在建立 AWSNodePool 前後編輯這些值。
事前準備
按照「建立使用者叢集」一文中的操作說明佈建叢集。準備好用於建立叢集的 YAML 檔案 (例如 cluster-0.yaml
)。
啟用節點集區自動調度功能
從
anthos-aws
目錄使用anthos-gke
將環境切換至管理服務。cd anthos-aws anthos-gke aws management get-credentials
如要啟用叢集自動調度器,請編輯 AWSNodePool 的資訊清單。編輯
cluster-0.yaml
檔案,然後找出 AWSNodePool 區段。變更spec.minNodeCount
和spec.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 ...
接著套用 YAML,調整節點集區大小。
env HTTPS_PROXY=http://localhost:8118 \ kubectl apply -f cluster-0.yaml
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 時,您也可以擴大或縮小執行個體大小。
您可以使用
kubectl get
擷取現有 AWSNodePool 的設定資訊清單。env HTTPS_PROXY=http://localhost:8118 \ kubectl get awsnodepool cluster-0-pool-0 -o yaml > new_nodepool.yaml
編輯
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
如要建立新的 AWSNodePool,請將資訊清單套用至管理叢集。
env HTTPS_PROXY=http://localhost:8118 \ kubectl apply -f new_nodepool.yaml
後續步驟
部署由 Ingress 支援的服務。
如要查看其他選項,請參閱 AWSNodePool 的參考說明文件。