本主題說明如何設定 Tanzu Kubernetes Grid (TKG) 工作負載叢集,以使用特定於 AWS 且不能完全在叢集的平面組態檔或 Kubernetes 樣式的物件規格中設定的功能。
如需如何使用組態檔和物件規格,在 AWS 上設定工作負載叢集的相關資訊,請參閱 AWS 叢集組態檔。
重要Tanzu Kubernetes Grid v2.4.x 是支援在 AWS 上建立 TKG 工作負載叢集的最後一個 TKG 版本。在 Tanzu Kubernetes Grid v2.5 中,將移除在 AWS 上建立 TKG 工作負載叢集的功能。
從現在開始,VMware建議您使用 Tanzu Mission Control 建立原生 AWS EKS 叢集,而不是在 AWS 上建立新的 TKG 工作負載叢集。有關如何使用 Tanzu Mission Control 原生 AWS EKS 叢集的資訊,請參見《Tanzu Mission Control》說明文件中的管理 AWS EKS 叢集的生命週期。
有關詳細資訊,請參見《VMware Tanzu Kubernetes Grid v2.4 發行說明》中的〈棄用 AWS 和 Azure 上的 TKG 管理和工作負載叢集〉。
如果要在叢集中建立 LoadBalancer
類型的服務,您必須將 kubernetes.io/cluster/YOUR-CLUSTER-NAME=shared
標籤新增至您打算用於工作負載叢集的一或多個子網路。
透過將 kubernetes.io/cluster/YOUR-CLUSTER-NAME=shared
標籤新增到一或多個公用子網路,您可以在部署叢集後建立 LoadBalancer
類型的服務。若要新增此標籤,然後部署叢集,請執行以下步驟:
收集要用於叢集的 VPC 中的一或多個公用子網路的一或多個識別碼。若要部署 prod
工作負載叢集,必須提供三個子網路。
透過執行以下命令建立所需的標籤:
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
設定叢集。
建立叢集。例如:
tanzu cluster create my-cluster -f my-cluster-config.yaml
若要部署利用 AWS 上可用的 NVIDIA GPU 架構的虛擬機器的工作負載叢集,請執行以下動作:
在叢集的組態檔中,針對工作節點,將 NODE_MACHINE_TYPE
設定為與 GPU 相容的虛擬機器類型,例如 g4dn.8xlarge
。
使用叢集組態檔部署叢集:
tanzu cluster create MY-GPU-CLUSTER -f MY-GPU-CONFIG
在叢集上安裝 GPU 叢集原則和 GPU Operator:
如果 kubectl context
不是目前內容,則將其設定為叢集。
從叢集 API 提供者 AWS 存放庫下載所需的 NVIDIA GPU 資源,然後將其儲存到目前的目錄:
套用叢集原則:
kubectl apply clusterpolicy-crd.yaml
套用 GPU Operator:
kubectl apply gpu-operator-components.yaml
執行 kubectl get pods -A
。您應會在 default
命名空間中看到 gpu-operator-
網繭清單,以及在 gpu-operator-resources
命名空間中看到 nvidia-
網繭清單。
若要測試啟用了 GPU 的叢集,請執行 NVIDIA 說明文件中的 CUDA VectorAdd 向量新增測試。
若要測試 GPU Operator,請執行以下動作:
垂直擴充工作負載叢集的工作節點計數:
tanzu cluster scale MY-GPU-CLUSTER -w 2
再次執行 kubectl get pods -A
。您應該會看到為新增的節點列出的其他 gpu-operator-
和 nvidia-
網繭。
如果 Kubernetes 叢集連結網際網路,或者透過 VPC 對等或 AWS Transit Gateway 部署到對等連線 VPC 中,則可以將工作負載叢集部署在多個 AWS 帳戶之間。
若要準備用於部署工作負載叢集的次要 AWS 帳戶,請準備次要帳戶,並設定該帳戶與管理叢集帳戶之間的信任關係,如下所示:
首先,您需要在次要 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 帳戶識別碼。
設定信任原則後,啟用管理叢集帳戶的 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
的名稱。