建立自訂使用者叢集

本主題說明如何自訂 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 會在公用子網路中加入堡壘主機。

如要連線至管理服務,請按照下列步驟操作:

  1. 切換至 GKE on AWS 設定所在的目錄。 您在安裝管理服務時建立了這個目錄。

    cd anthos-aws

  2. 如要開啟通道,請執行 bastion-tunnel.sh 指令碼。通道會轉送至 localhost:8118

    如要開啟防禦主機的通道,請執行下列指令:

    ./bastion-tunnel.sh -N
    

    這個視窗會顯示來自 SSH 通道的訊息。準備好關閉連線時,請使用 Control+C 停止程序,或關閉視窗。

  3. 開啟新的終端機,然後變更為 anthos-aws 目錄。

    cd anthos-aws
  4. 確認您可以使用 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為每個管理叢集建立一個使用者叢集的設定。如要建立其他叢集,請套用自訂設定。

在本範例中,您會從 AWSClusterAWSNodePool CRD 手動建立叢集。

  1. 切換至 GKE on AWS 設定所在的目錄。 您在安裝管理服務時建立了這個目錄。

    cd anthos-aws

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

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

  3. 開啟文字編輯器,然後將下列 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_NAMEAWS 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) 計算。只有在 volumeTypeGP3 時才有效。詳情請參閱通用 SSD 磁碟區 (gp3)

    • ROOT_VOLUME_KEY 替換為AWS KMS 金鑰的 Amazon 資源名稱,該金鑰會加密控制層執行個體根磁碟區。

    • ETCD_VOLUME_SIZE:etcd 使用的磁碟區大小。

    • ETCD_VOLUME_TYPE,並使用 EBS 磁碟區類型。 例如:gp3

    • ETCD_VOLUME_IOPS,並根據磁碟區每秒佈建的 IO 作業量 (IOPS) 計算。只有在 volumeTypegp3 時才有效。詳情請參閱通用 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_LOGGINGtruefalse,指出控制平面節點是否已啟用 Cloud Logging。

    • ENABLE_MONITORINGtruefalse,控制層節點是否已啟用 Cloud Monitoring。

    • WORKLOAD_IDENTITY_BUCKET:Cloud Storage bucket 名稱,其中包含工作負載身分探索資訊。這是選填欄位。

  4. 為叢集建立一或多個 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_TYPEAWS EC2 執行個體類型
    • KMS_KEY_PAIR_NAME:指派給每個節點集區工作站的 AWS KMS 金鑰組。
    • NODE_IAM_PROFILE:指派給集區中節點的 AWS EC2 執行個體設定檔名稱。
    • ROOT_VOLUME_SIZE:控制平面根磁碟區的大小,以 GiB 為單位。
    • VOLUME_TYPE:節點的 AWS EBS 磁碟區類型。 例如:gp3
    • IOPS:磁碟區每秒佈建的 IO 作業數 (IOPS)。只有在 volumeTypegp3 時才有效。
    • NODE_VOLUME_KEY:用於加密磁碟區的 AWS KMS 金鑰 ARN。詳情請參閱「使用客戶管理的 CMK 加密磁碟區」。
  5. 將資訊清單套用至管理服務。

    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 環境。您可以使用這個內容向使用者或管理叢集進行驗證。

  1. 使用 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

  2. 使用 kubectl 向新的使用者叢集進行驗證。

    env HTTPS_PROXY=http://localhost:8118 \
      kubectl cluster-info
    

    如果叢集已準備就緒,輸出內容會包含叢集內 Kubernetes 元件的網址。

查看叢集狀態

當您套用 AWSClusterAWSNodePool 時,管理服務會佈建 AWS 資源。

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

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

  2. 如要列出叢集,請使用 kubectl get AWSClusters

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

    輸出結果包含每個叢集的名稱、狀態、存在時間、版本和端點。

    舉例來說,下列輸出內容只包含一個名為 cluster-0AWSCluster

    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

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

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

  2. 執行 kubectl get events

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

輸出內容包括與管理服務相關的資訊、警告和錯誤。

刪除使用者叢集

如要刪除使用者叢集,請執行下列步驟:

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

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

  2. 使用 kubectl delete 刪除包含使用者叢集的資訊清單。

    env HTTPS_PROXY=http://localhost:8118 \
      kubectl delete -f CLUSTER_FILE
    

    請將 CLUSTER_FILE 替換為包含 AWScluster 和 AWSNodePool 物件的資訊清單名稱。例如:cluster-0.yaml

刪除所有使用者叢集

如要刪除所有使用者叢集,請執行下列步驟:

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

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

  2. 使用 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」。

後續步驟