AWS 上的叢集

本主題說明如何設定 Tanzu Kubernetes Grid (TKG) 工作負載叢集,以使用特定於 AWS 且不能完全在叢集的平面組態檔或 Kubernetes 樣式的物件規格中設定的功能。

如需如何使用組態檔和物件規格,在 AWS 上設定工作負載叢集的相關資訊,請參閱 AWS 叢集組態檔

為現有 VPC 新增子網路標籤

如果要在叢集中建立 LoadBalancer 類型的服務,您必須將 kubernetes.io/cluster/YOUR-CLUSTER-NAME=shared 標籤新增至您打算用於工作負載叢集的一或多個子網路。

透過將 kubernetes.io/cluster/YOUR-CLUSTER-NAME=shared 標籤新增到一或多個公用子網路,您可以在部署叢集後建立 LoadBalancer 類型的服務。若要新增此標籤,然後部署叢集,請執行以下步驟:

  1. 收集要用於叢集的 VPC 中的一或多個公用子網路的一或多個識別碼。若要部署 prod 工作負載叢集,必須提供三個子網路。

  2. 透過執行以下命令建立所需的標籤:

    aws ec2 create-tags --resources YOUR-PUBLIC-SUBNET-ID-OR-IDS --tags Key=kubernetes.io/cluster/YOUR-CLUSTER-NAME,Value=shared
    

    其中:

    • YOUR-PUBLIC-SUBNET-ID-OR-IDS 是在上一個步驟中收集的一或多個公用子網路的一或多個識別碼。
    • YOUR-CLUSTER-NAME 是您要建立的工作負載叢集的名稱。

    例如:

    aws ec2 create-tags --resources subnet-00bd5d8c88a5305c6 subnet-0b93f0fdbae3436e8 subnet-06b29d20291797698 --tags Key=kubernetes.io/cluster/my-cluster,Value=shared
    
  3. 設定叢集。

  4. 建立叢集。例如:

    tanzu cluster create my-cluster -f my-cluster-config.yaml
    

部署啟用了 GPU 的叢集

若要部署利用 AWS 上可用的 NVIDIA GPU 架構的虛擬機器的工作負載叢集,請執行以下動作:

  1. 在叢集的組態檔中,針對工作節點,將 NODE_MACHINE_TYPE 設定為與 GPU 相容的虛擬機器類型,例如 g4dn.8xlarge

    • 有關 AWS 上的 GPU 虛擬機器類型,請參閱 AWS 說明文件中的加速計算
  2. 使用叢集組態檔部署叢集:

    tanzu cluster create MY-GPU-CLUSTER -f MY-GPU-CONFIG
    
  3. 在叢集上安裝 GPU 叢集原則和 GPU Operator:

    1. 如果 kubectl context 不是目前內容,則將其設定為叢集。

    2. 從叢集 API 提供者 AWS 存放庫下載所需的 NVIDIA GPU 資源,然後將其儲存到目前的目錄:

    3. 套用叢集原則:

      kubectl apply clusterpolicy-crd.yaml
      
    4. 套用 GPU Operator:

      kubectl apply gpu-operator-components.yaml
      
  4. 執行 kubectl get pods -A。您應會在 default 命名空間中看到 gpu-operator- 網繭清單,以及在 gpu-operator-resources 命名空間中看到 nvidia- 網繭清單。

  5. 若要測試啟用了 GPU 的叢集,請執行 NVIDIA 說明文件中的 CUDA VectorAdd 向量新增測試。

  6. 若要測試 GPU Operator,請執行以下動作:

    1. 垂直擴充工作負載叢集的工作節點計數:

      tanzu cluster scale MY-GPU-CLUSTER -w 2
      
    2. 再次執行 kubectl get pods -A。您應該會看到為新增的節點列出的其他 gpu-operator-nvidia- 網繭。

將叢集部署在不同的 AWS 帳戶上

如果 Kubernetes 叢集連結網際網路,或者透過 VPC 對等或 AWS Transit Gateway 部署到對等連線 VPC 中,則可以將工作負載叢集部署在多個 AWS 帳戶之間。

若要準備用於部署工作負載叢集的次要 AWS 帳戶,請準備次要帳戶,並設定該帳戶與管理叢集帳戶之間的信任關係,如下所示:

建立 IAM 角色

首先,您需要在次要 AWS 帳戶中設定 IAM 角色。

為此,請使用 tanzu mc permissions aws 命令。請依照從組態檔部署管理叢集建立 IAM 資源區段所述的相同程序操作。

啟用跨帳戶信任

若要使一個 AWS 帳戶中的管理叢集能夠將工作負載叢集部署到次要 AWS 帳戶中,首先需要在次要帳戶中設定信任原則。

為此,請在次要帳戶中找到 tanzu mc permissions aws 建立的 controllers.tkg.cloud.vmware.com。然後,依照以下方式編輯信任關係:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "ec2.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    },
    {
    "Effect": "Allow",
    "Action": "sts:AssumeRole",
    "Principal": {
        "AWS": "arn:aws:iam::MANAGEMENT-ACCOUNT-ID:root"
      },
    }
  ]
}

其中,MANAGEMENT-ACCOUNT-ID 是部署管理叢集的 AWS 帳戶識別碼。

啟用管理叢集以承擔 IAM 角色

設定信任原則後,啟用管理叢集帳戶的 control-plane.tkg.cloud.vmware.com IAM 角色,以在次要帳戶中承擔 controllers.tkg.cloud.vmware.com IAM 角色。

為此,請依照下列方式附加新原則或新增內嵌原則:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "sts:AssumeRole",
      "Resource": "arn:aws:iam::SECONDARY-ACCOUNT-ID:role/controllers.tkg.cloud.vmware.com"
    }
  ]
}

其中,SECONDARY-ACCOUNT-ID 是次要帳戶的 AWS 帳戶識別碼。

在管理叢集中建立 AWSClusterRoleIdentity 資源

若要在管理叢集中設定新的跨帳戶 IAM 角色,需要在 Kubernetes 中建立新的 AWSClusterRoleIdentity 資源物件,如下所示:

apiVersion: infrastructure.cluster.x-k8s.io/v1alpha4
kind: AWSClusterRoleIdentity
metadata:
  name: IDENTITY-NAME
spec:
  allowedNamespaces: {}
  durationSeconds: 900
  roleARN: "arn:aws:iam::SECONDARY-ACCOUNT-ID:role/controllers.tkg.cloud.vmware.com"
  sourceIdentityRef:
    kind: AWSClusterControllerIdentity
    name: default

其中:

  • IDENTITY-NAME 是用於識別資源的任何內容。例如,表示業務線 dev 帳戶的名稱 (LOB-dev)
  • SECONDARY-ACCOUNT-ID 是前面的設定步驟中的識別碼。

AWSClusterRoleIdentity 資源具有全域範圍。您可以設定 allowedNamespaces 欄位,透過將其值設定為明確的命名空間清單或選取器來限制允許哪些命名空間使用 IAM 角色管理叢集。請參閱《叢集 API 手冊》中的安全存取身分識別

將工作負載叢集部署到次要帳戶

建立 AWSClusterRoleIdentity 資源後,可以使用該資源將工作負載叢集部署到次要 AWS 帳戶。

為此,請在叢集組態檔中包含以下行,並使用任何標準選項執行 tanzu cluster create

AWS_IDENTITY_REF_NAME: IDENTITY-NAME

其中,IDENTITY-NAME 是在上一個步驟中建立的 AWSClusterRoleIdentity 的名稱。

check-circle-line exclamation-circle-line close-line
Scroll to top icon