本主題說明如何自訂 GKE on AWS 使用者叢集的設定。
您可能會基於下列原因建立自訂使用者叢集:
- 為測試環境建立另一個叢集。
- 新增不同機器類型的節點集區。
- 在特定 AWS 可用區 (AZ) 中建立叢集。
事前準備
開始使用 GKE on AWS 前,請務必完成下列工作:
- 完成必要條件。
安裝管理服務。
如要建立叢集,但不想使用
terraform output example_cluster
,請為控制層準備私有 AWS 子網路。每個子網路應屬於相同 AWS 區域中的不同可用區。您必須設定路由表,允許私人子網路之間的流量,且每個子網路都必須能存取 NAT 閘道。取得 AWS 虛擬私有雲 (VPC) ID。虛擬私有雲 ID 類似於
vpc-012345678abcde
。您可以在 AWS 控制台找到 VPC ID。
如要連線至 GKE on AWS 資源,請按照下列步驟操作。選取您是否已有 AWS 虛擬私有雲 (或直接連線至虛擬私有雲),或是在建立管理服務時建立了專屬虛擬私有雲。
現有 VPC
如果您已透過直接連線或 VPN 連線至現有虛擬私有雲,請從本主題的指令中省略 env HTTP_PROXY=http://localhost:8118
行。
專用虛擬私有雲
在專屬虛擬私有雲中建立管理服務時,GKE on AWS 會在公用子網路中加入堡壘主機。
如要連線至管理服務,請按照下列步驟操作:
切換至 GKE on AWS 設定所在的目錄。 您在安裝管理服務時建立了這個目錄。
cd anthos-aws
如要開啟通道,請執行
bastion-tunnel.sh
指令碼。通道會轉送至localhost:8118
。如要開啟防禦主機的通道,請執行下列指令:
./bastion-tunnel.sh -N
這個視窗會顯示來自 SSH 通道的訊息。準備好關閉連線時,請使用 Control+C 停止程序,或關閉視窗。
開啟新的終端機,然後變更為
anthos-aws
目錄。cd anthos-aws
確認您可以使用
kubectl
連線至叢集。env HTTPS_PROXY=http://localhost:8118 \ kubectl cluster-info
輸出內容會包含管理服務 API 伺服器的網址。
選取控制層執行個體大小
AWS 上的 GKE 不支援調整控制層執行個體大小。建立使用者叢集前,請選取控制層的執行個體大小。控制層大小取決於叢集中的節點數量。下表列出建議的控制層執行個體大小,適用於各種叢集大小。
叢集大小 (節點) | 控制層執行個體類型 |
---|---|
1 - 10 | m5.large |
11 到 100 | m5.xlarge |
101 - 200 | m5.2xlarge |
使用自訂設定建立新叢集
您可以透過terraform output example_cluster
為每個管理叢集建立一個使用者叢集的設定。如要建立其他叢集,請套用自訂設定。
在本範例中,您會從 AWSCluster
和 AWSNodePool
CRD 手動建立叢集。
切換至 GKE on AWS 設定所在的目錄。 您在安裝管理服務時建立了這個目錄。
cd anthos-aws
從
anthos-aws
目錄使用anthos-gke
將環境切換至管理服務。cd anthos-aws anthos-gke aws management get-credentials
開啟文字編輯器,然後將下列
AWSCluster
定義複製到名為custom-cluster.yaml
的檔案中。apiVersion: multicloud.cluster.gke.io/v1 kind: AWSCluster metadata: name: CLUSTER_NAME spec: region: AWS_REGION networking: vpcID: VPC_ID podAddressCIDRBlocks: POD_ADDRESS_CIDR_BLOCKS serviceAddressCIDRBlocks: SERVICE_ADDRESS_CIDR_BLOCKS ServiceLoadBalancerSubnetIDs: SERVICE_LOAD_BALANCER_SUBNETS controlPlane: version: CLUSTER_VERSION # Latest version is 1.25.5-gke.2100 instanceType: AWS_INSTANCE_TYPE keyName: SSH_KEY_NAME subnetIDs: - CONTROL_PLANE_SUBNET_IDS securityGroupIDs: - CONTROL_PLANE_SECURITY_GROUPS iamInstanceProfile: CONTROL_PLANE_IAM_ROLE rootVolume: sizeGiB: ROOT_VOLUME_SIZE volumeType: ROOT_VOLUME_TYPE # Optional iops: ROOT_VOLUME_IOPS # Optional kmsKeyARN: ROOT_VOLUME_KEY # Optional etcd: mainVolume: sizeGiB: ETCD_VOLUME_SIZE volumeType: ETCD_VOLUME_TYPE # Optional iops: ETCD_VOLUME_IOPS # Optional kmsKeyARN: ETCD_VOLUME_KEY # Optional databaseEncryption: kmsKeyARN: ARN_OF_KMS_KEY hub: # Optional membershipName: ANTHOS_CONNECT_NAME cloudOperations: # Optional projectID: YOUR_PROJECT location: GCP_REGION enableLogging: ENABLE_LOGGING enableMonitoring: ENABLE_MONITORING workloadIdentity: # Optional oidcDiscoveryGCSBucket: WORKLOAD_IDENTITY_BUCKET
更改下列內容:
- CLUSTER_NAME:叢集名稱。
AWS_REGION:叢集執行的 AWS 區域。
VPC_ID:叢集執行的 VPC ID。
POD_ADDRESS_CIDR_BLOCKS:叢集 Pod 使用的 IPv4 位址範圍。目前僅支援單一範圍。這個範圍不得與可從網路連線的任何子網路重疊。在多個不同的 AWSCluster 物件中使用相同範圍是安全的。例如:
10.2.0.0/16
。SERVICE_ADDRESS_CIDR_BLOCKS:叢集服務使用的 IPv4 位址範圍。目前僅支援單一範圍。這個範圍不得與可從網路連線的任何子網路重疊。 在多個不同的 AWSCluster 物件中使用相同範圍是安全的。例如:
10.1.0.0/16
。SERVICE_LOAD_BALANCER_SUBNETS:GKE on AWS 可在其中建立公開或私有負載平衡器的子網路 ID。
CLUSTER_VERSION:AWS 中的 GKE 支援的 Kubernetes 版本。最新版本為 1.25.5-gke.2100。
AWS_INSTANCE_TYPE:支援的 EC2 執行個體類型。
SSH_KEY_NAME:AWS EC2 金鑰組。
CONTROL_PLANE_SUBNET_IDS:控制層執行個體所在可用區的子網路 ID。
CONTROL_PLANE_SECURITY_GROUPS:在管理服務安裝期間建立的 securityGroupID。您可以新增連線至控制層所需的任何 securityGroupIDs,藉此自訂這項設定。
CONTROL_PLANE_IAM_PROFILE:指派給控制層副本的 AWS EC2 執行個體設定檔名稱。
ROOT_VOLUME_SIZE:控制平面根磁碟區的大小,以 GiB 為單位。
ROOT_VOLUME_TYPE,並使用 EBS 磁碟區類型。 例如:
gp3
。ROOT_VOLUME_IOPS,並根據磁碟區每秒佈建的 IO 作業量 (IOPS) 計算。只有在
volumeType
為GP3
時才有效。詳情請參閱通用 SSD 磁碟區 (gp3)。ROOT_VOLUME_KEY 替換為AWS KMS 金鑰的 Amazon 資源名稱,該金鑰會加密控制層執行個體根磁碟區。
ETCD_VOLUME_SIZE:etcd 使用的磁碟區大小。
ETCD_VOLUME_TYPE,並使用 EBS 磁碟區類型。 例如:
gp3
。ETCD_VOLUME_IOPS,並根據磁碟區每秒佈建的 IO 作業量 (IOPS) 計算。只有在
volumeType
為gp3
時才有效。詳情請參閱通用 SSD 磁碟區 (gp3)。ETCD_VOLUME_KEY,並提供用來加密控制平面 etcd 資料磁碟區的 AWS KMS 金鑰 Amazon Resource Name。
ARN_OF_KMS_KEY:用於加密叢集密鑰的 AWS KMS 金鑰。
ANTHOS_CONNECT_NAME:用於註冊叢集的 Connect 會員名稱。會員方案名稱不得重複。例如:
projects/YOUR_PROJECT/locations/global/memberships/CLUSTER_NAME
, 其中YOUR_PROJECT
是您的 Google Cloud 專案,CLUSTER_NAME
則是專案中的專屬名稱。 這是選填欄位。YOUR_PROJECT:您的專案 ID。
GCP_REGION:您要儲存記錄的 Google Cloud 區域。 選擇鄰近 AWS 區域的區域。詳情請參閱「全球據點 - 區域和可用區」,例如
us-central1
。ENABLE_LOGGING:
true
或false
,指出控制平面節點是否已啟用 Cloud Logging。ENABLE_MONITORING:
true
或false
,控制層節點是否已啟用 Cloud Monitoring。WORKLOAD_IDENTITY_BUCKET:Cloud Storage bucket 名稱,其中包含工作負載身分探索資訊。這是選填欄位。
為叢集建立一或多個 AWSNodePool。開啟文字編輯器,然後將下列 AWSCluster 定義複製到名為
custom-nodepools.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
更改下列內容:
- NODE_POOL_NAME:AWSNodePool 的專屬名稱。
- AWSCLUSTER_NAME:AWSCluster 的名稱。例如:
staging-cluster
。 - CLUSTER_VERSION:支援的 GKE on AWS Kubernetes版本。
- AWS_REGION:與 AWSCluster 相同的 AWS 區域。
- AWS_SUBNET_ID:與 AWSCluster 位於相同區域的 AWS 子網路。
- MINIMUM_NODE_COUNT:節點集區中的節點數量下限。詳情請參閱調整使用者叢集大小。
- MAXIMUM_NODE_COUNT:節點集區中的節點數量上限。
- MAXIMUM_PODS_PER_NODE_COUNT:GKE on AWS 可分配給節點的 Pod 數量上限。
- AWS_NODE_TYPE:AWS EC2 執行個體類型。
- KMS_KEY_PAIR_NAME:指派給每個節點集區工作站的 AWS KMS 金鑰組。
- NODE_IAM_PROFILE:指派給集區中節點的 AWS EC2 執行個體設定檔名稱。
- ROOT_VOLUME_SIZE:控制平面根磁碟區的大小,以 GiB 為單位。
- VOLUME_TYPE:節點的 AWS
EBS 磁碟區類型。
例如:
gp3
。 - IOPS:磁碟區每秒佈建的 IO 作業數 (IOPS)。只有在
volumeType
為gp3
時才有效。 - NODE_VOLUME_KEY:用於加密磁碟區的 AWS KMS 金鑰 ARN。詳情請參閱「使用客戶管理的 CMK 加密磁碟區」。
將資訊清單套用至管理服務。
env HTTPS_PROXY=http://localhost:8118 \ kubectl apply -f custom-cluster.yaml env HTTPS_PROXY=http://localhost:8118 \ kubectl apply -f custom-nodepools.yaml
建立 kubeconfig
使用者叢集啟動時,您可以為新的使用者叢集建立 kubeconfig
環境。您可以使用這個內容向使用者或管理叢集進行驗證。
使用
anthos-gke aws clusters get-credentials
在~/.kube/config
中為使用者叢集產生kubeconfig
。env HTTPS_PROXY=http://localhost:8118 \ anthos-gke aws clusters get-credentials CLUSTER_NAME
將 CLUSTER_NAME 替換為叢集名稱。例如:
cluster-0
。使用
kubectl
向新的使用者叢集進行驗證。env HTTPS_PROXY=http://localhost:8118 \ kubectl cluster-info
如果叢集已準備就緒,輸出內容會包含叢集內 Kubernetes 元件的網址。
查看叢集狀態
當您套用 AWSCluster
或 AWSNodePool
時,管理服務會佈建 AWS 資源。
從
anthos-aws
目錄使用anthos-gke
將環境切換至管理服務。cd anthos-aws anthos-gke aws management get-credentials
如要列出叢集,請使用
kubectl get AWSClusters
。env HTTPS_PROXY=http://localhost:8118 \ kubectl get AWSClusters
輸出結果包含每個叢集的名稱、狀態、存在時間、版本和端點。
舉例來說,下列輸出內容只包含一個名為
cluster-0
的AWSCluster
:NAME STATE AGE VERSION ENDPOINT cluster-0 Provisioning 2m41s 1.25.5-gke.2100 gke-xyz.elb.us-east-1.amazonaws.com
查看叢集事件
如要查看使用者叢集的近期 Kubernetes 事件,請使用 kubectl get events
。
從
anthos-aws
目錄使用anthos-gke
將環境切換至管理服務。cd anthos-aws anthos-gke aws management get-credentials
執行
kubectl get events
。env HTTPS_PROXY=http://localhost:8118 \ kubectl get events
輸出內容包括與管理服務相關的資訊、警告和錯誤。
刪除使用者叢集
如要刪除使用者叢集,請執行下列步驟:
從
anthos-aws
目錄使用anthos-gke
將環境切換至管理服務。cd anthos-aws anthos-gke aws management get-credentials
使用
kubectl delete
刪除包含使用者叢集的資訊清單。env HTTPS_PROXY=http://localhost:8118 \ kubectl delete -f CLUSTER_FILE
請將 CLUSTER_FILE 替換為包含 AWScluster 和 AWSNodePool 物件的資訊清單名稱。例如:
cluster-0.yaml
。
刪除所有使用者叢集
如要刪除所有使用者叢集,請執行下列步驟:
從
anthos-aws
目錄使用anthos-gke
將環境切換至管理服務。cd anthos-aws anthos-gke aws management get-credentials
使用
kubectl delete
從管理服務中刪除 AWSNodePools 和 AWSClusters。env HTTPS_PROXY=http://localhost:8118 \ kubectl delete AWSNodePool --all env HTTPS_PROXY=http://localhost:8118 \ kubectl delete AWSCluster --all
詳情請參閱「在 AWS 中解除安裝 GKE」。
後續步驟
使用 GKE Identity Service 設定識別資訊提供者。
在 AWS 上的 GKE 啟動第一個工作負載。
請詳閱 AWSCluster 和 AWSNodePool 自訂資源定義的規格。