本主题介绍了如何配置 Tanzu Kubernetes Grid (TKG) 工作负载集群以使用特定于 AWS,以及不能在集群的平面配置文件或 Kubernetes 样式对象规范中完全配置的功能。
有关如何使用配置文件和对象规范在 AWS 上配置工作负载集群的信息,请参见 AWS 集群配置文件。
如果要在集群中创建 LoadBalancer
类型的服务,必须将 kubernetes.io/cluster/YOUR-CLUSTER-NAME=shared
标记添加到公用子网或要用于工作负载集群的子网。
通过将 kubernetes.io/cluster/YOUR-CLUSTER-NAME=shared
标记添加到一个或多个公用子网,您可以在部署集群后创建 LoadBalancer
类型的服务。要添加此标记,然后部署集群,请执行以下步骤:
收集要用于集群的 VPC 中的一个或多个公用子网的一个或多个 ID。要部署 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
是在上一步中收集的一个或多个公用子网的一个或多个 ID。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 运算符:
如果 kubectl context
不是当前上下文,则将其设置为集群。
从集群 API 提供程序 AWS 存储库下载所需的 NVIDIA GPU 资源,然后将其保存到当前目录:
应用集群策略:
kubectl apply clusterpolicy-crd.yaml
应用 GPU 运算符:
kubectl apply gpu-operator-components.yaml
运行 kubectl get pods -A
。您应该在 default
命名空间中看到 gpu-operator-
Pod 的列表,在 gpu-operator-resources
命名空间中可以看到 nvidia-
Pod。
要测试启用了 GPU 的集群,请运行 NVIDIA 文档中的 CUDA VectorAdd 矢量添加测试。
要测试 GPU 运算符,请执行以下操作:
纵向扩展工作负载集群的工作节点计数:
tanzu cluster scale MY-GPU-CLUSTER -w 2
再次运行 kubectl get pods -A
。您应该会看到为添加的节点列出的其他 gpu-operator-
和 nvidia-
pod。
如果 Kubernetes 集群面向 Internet,或者通过 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 帐户 ID。
设置信任策略后,启用管理集群帐户的 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 帐户 ID。
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
是前面的设置步骤中的 ID。AWSClusterRoleIdentity
资源具有全局范围。您可以设置 allowedNamespaces
字段,通过将其值设置为明确的命名空间列表或选择器来限制允许哪些命名空间使用 IAM 角色管理集群。请参见集群 API 手册中的安全访问身份。
创建 AWSClusterRoleIdentity
资源后,可以使用该资源将工作负载集群部署到辅助 AWS 帐户。
为此,请在集群配置文件中包含以下行,并使用任何标准选项运行 tanzu cluster create
:
AWS_IDENTITY_REF_NAME: IDENTITY-NAME
其中,IDENTITY-NAME
是在上一步中创建的 AWSClusterRoleIdentity
的名称。