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 中的一个或多个公用子网的一个或多个 ID。要部署 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 是在上一步中收集的一个或多个公用子网的一个或多个 ID。
    • 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 运算符:

    1. 如果 kubectl context 不是当前上下文,则将其设置为集群。

    2. 从集群 API 提供程序 AWS 存储库下载所需的 NVIDIA GPU 资源,然后将其保存到当前目录:

    3. 应用集群策略:

      kubectl apply clusterpolicy-crd.yaml
      
    4. 应用 GPU 运算符:

      kubectl apply gpu-operator-components.yaml
      
  4. 运行 kubectl get pods -A。您应该在 default 命名空间中看到 gpu-operator- Pod 的列表,在 gpu-operator-resources 命名空间中可以看到 nvidia- Pod。

  5. 要测试启用了 GPU 的集群,请运行 NVIDIA 文档中的 CUDA VectorAdd 矢量添加测试。

  6. 要测试 GPU 运算符,请执行以下操作:

    1. 纵向扩展工作负载集群的工作节点计数:

      tanzu cluster scale MY-GPU-CLUSTER -w 2
      
    2. 再次运行 kubectl get pods -A。您应该会看到为添加的节点列出的其他 gpu-operator-nvidia- pod。

在不同 AWS 帐户上部署集群

如果 Kubernetes 集群面向 Internet,或者通过 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 帐户 ID。

启用管理集群以承担 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 帐户 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 的名称。

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