Azure 上的集群

本主题介绍了如何配置 Tanzu Kubernetes Grid (TKG) 工作负载集群以使用特定于 Microsoft Azure,以及不能在集群的平面配置文件或 Kubernetes 样式对象规范中完全配置的功能。

有关如何使用配置文件和对象规范在 Azure 上配置工作负载集群的信息,请参阅 Azure 集群配置文件

重要

Tanzu Kubernetes Grid v2.4.x 是支持在 Azure 上创建 TKG 工作负载集群的最新 TKG 版本。Tanzu Kubernetes Grid v2.5 版本中将移除在 Azure 上创建 TKG 工作负载集群的功能。

从现在开始,VMware 建议您使用 Tanzu Mission Control 创建本机 Azure AKS 集群,而不是在 Azure 上创建新的 TKG 工作负载集群。有关如何使用 Tanzu Mission Control 创建本机 Azure AKS 集群的信息,请参见《Tanzu Mission Control》文档中的管理 Azure AKS 集群的生命周期

有关详细信息,请参见《VMware Tanzu Kubernetes Grid v2.4 发行说明》中的弃用 AWS 和 Azure 上的 TKG 管理和工作负载集群

Azure 专用集群

默认情况下,Azure 管理集群和工作负载集群是公用集群。但是,您也可以将其配置为专用集群,这意味着其 API 服务器使用 Azure 内部负载均衡器 (ILB),因此只能从集群自身的 VNet 或对等互连 VNet 中访问。

要使 Azure 集群成为专用集群,请在其配置文件中包含以下内容:

  • AZURE_ENABLE_PRIVATE_CLUSTER 设置为 true

  • (可选)将 AZURE_FRONTEND_PRIVATE_IP 设置为集群负载均衡器的内部地址。

    • 此地址必须在其控制平面子网范围内,不得由其他组件使用。
    • 如果未设置,则此地址默认为 10.0.0.100
  • AZURE_VNET_NAMEAZURE_VNET_CIDRAZURE_CONTROL_PLANE_SUBNET_NAMEAZURE_CONTROL_PLANE_SUBNET_CIDRAZURE_NODE_SUBNET_NAMEAZURE_NODE_SUBNET_CIDR 设置为用于其他 Azure 专用集群的 VNet 和子网。

    • 由于 Azure 专用集群在其 VNet 外部不可访问,因此管理集群及其管理的任何工作负载和共享服务集群必须位于同一个专用 VNet 中。
    • 引导计算机(您在其中运行 Tanzu CLI 以创建和使用专用集群)也必须位于同一个专用 VNet 中。
  • (可选)如果您需要控制平面和工作节点能够通过 Azure Internet 连接访问 Internet,请将 AZURE_ENABLE_CONTROL_PLANE_OUTBOUND_LBAZURE_ENABLE_NODE_OUTBOUND_LB 设置为 true

    • 默认情况下,Azure 专用集群会为负载均衡器类型的每个 Kubernetes 服务创建一个公用 IP 地址。要将负载均衡器服务配置为使用专用 IP 地址,请将以下注释添加到部署清单中:

      ---
      metadata:
      annotations:
        service.beta.kubernetes.io/azure-load-balancer-internal: "true"
      

有关详细信息,请参见集群 API 提供程序 Azure 文档中的 API 服务器端点

不同 Azure 帐户上的集群

Tanzu Kubernetes Grid 可以在多个目标平台帐户上运行工作负载集群,例如在不同的团队之间拆分云使用情况,或者将不同的安全配置文件应用于生产、转储和开发工作负载。

要将工作负载集群部署到备用 Azure 服务主体帐户(不同于用于部署其管理集群的帐户),请执行以下操作:

  1. 创建备用 Azure 帐户。您可以在后面的步骤中使用此帐户的详细信息创建 AzureClusterIdentity。有关创建 Azure 服务主体帐户的信息,请参见 Azure 文档中的入门:使用门户创建可访问资源的 Azure AD 应用程序和服务主体

  2. kubectl 的上下文设置为管理集群:

    kubectl config use-context MY-MGMT-CLUSTER@MY-MGMT-CLUSTER
    

    其中,MY-MGMT-CLUSTER 是管理集群的名称。

  3. 使用以下内容创建 secret.yaml 文件:

    apiVersion: v1
    kind: Secret
    metadata:
      name: SECRET-NAME
    type: Opaque
    data:
      clientSecret: CLIENT-SECRET
    

    其中:

    • SECRET-NAME 是客户端密码的密钥名称。
    • CLIENT-SECRET 是服务主体身份的客户端密钥。客户端密码必须采用 base64 编码。
  4. 使用该文件创建 Secret 对象:

    kubectl apply -f secret.yaml
    
  5. 创建包含以下内容的 identity.yaml 文件:

    apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
    kind: AzureClusterIdentity
    metadata:
      name: EXAMPLE-IDENTITY
      namespace: EXAMPLE-NAMESPACE
    spec:
      type: ManualServicePrincipal
      tenantID: AZURE-TENANT-ID
      clientID: CLIENT-ID
      clientSecret: {"name":"SECRET-NAME","namespace":"default"}
      allowedNamespaces:
        list:
        - CLUSTER-NAMESPACE-1
        - CLUSTER-NAMESPACE-1
    

    其中:

    • EXAMPLE-IDENTITY 是用于 AzureClusterIdentity 的名称。
    • EXAMPLE-NAMESPACE 是 AzureClusterIdentity 的命名空间。
    • AZURE-TENANT-ID 是 Azure 租户 ID。
    • CLIENT-ID 是 Azure AD 应用程序的客户端 ID(也称为 AppID)。
    • SECRET-NAME 是客户端密码的密钥名称。
    • CLUSTER-NAMESPACE-1CLUSTER-NAMESPACE-2 是允许集群使用其中标识的 Kubernetes 命名空间。可以使用命名空间阵列选择这些命名空间。
  6. 使用该文件创建 AzureClusterIdentity 对象:

    kubectl apply -f identity.yaml
    

管理集群现在可以使用新的 AzureClusterIdentity 对象将工作负载集群部署到备用帐户。

要创建使用备用 Azure 帐户的工作负载集群,请在集群配置文件中包含以下变量:

AZURE_IDENTITY_NAME: EXAMPLE-IDENTITY
AZURE_IDENTITY_NAMESPACE: EXAMPLE-NAMESPACE

其中:

  • EXAMPLE-IDENTITY 是用于 AzureClusterIdentity 的名称。
  • EXAMPLE-NAMESPACE 是 AzureClusterIdentity 的命名空间。

创建工作负载集群后,使用备用帐户登录到 Azure 门户,您应该会看到集群正在运行。

启用了 GPU 的集群

有两种方法在 Azure 上部署启用了 NVIDIA GPU 的工作负载集群:

  • 创建具有 GPU Worker 的工作负载集群,并在集群上手动安装 GPU 策略和运算符
  • (技术预览版)使用 ClusterResourceSet (CRS) 配置管理集群,以自动创建一个或多个启用了 GPU 的工作负载集群

下面的小节介绍了这两种方法以及如何测试启用了 GPU 的集群。

部署并启用 GPU 单个集群

要部署工作负载集群并手动对其进行配置以利用 Azure 上可用的 NVIDIA GPU 虚拟机,请执行以下操作:

  1. 在集群的配置文件中,对于工作节点,将 AZURE_NODE_MACHINE_TYPE 设置为与 GPU 兼容的虚拟机类型,例如 Standard_NC4as_T4_v3

  2. 使用集群配置文件部署集群:

    tanzu cluster create MY-GPU-CLUSTER -f MY-GPU-CONFIG
    

    其中,MY-GPU-CLUSTER 是分配给集群的名称。

  3. 在集群上安装 GPU 集群策略和 GPU 运算符:

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

    2. 从集群 API 提供程序 Azure 存储库下载所需的 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 的列表。

为 GPU 集群部署配置管理集群(技术预览版)

注意

此功能处于不受支持的技术预览版状态;请参见 TKG 功能状态

每当将 gpu: nvidia 添加到集群清单中的标签时,可以将管理集群配置为自动创建启用了 GPU 的工作负载集群。为此,请安装 ClusterResourceSet (CRS) 并将其激活,如下所示:

  1. 要配置管理集群以创建 GPU 集群,请执行以下操作:

    1. 在 VMware {code} 示例交换中搜索 TKG 的 GPU CRS 并下载 Tanzu Kubernetes Grid v1.4 的 gpu-crs.yaml 文件。

    2. kubectl 的上下文设置为管理集群的上下文:

      kubectl config use-context my-management-cluster-admin@my-management-cluster
      
    3. 将 CRS 文件应用于管理集群,使用 --server-side 选项处理大量 ConfigMap 数据:

      kubectl apply -f gpu-crs.yaml --server-side
      
  2. 要创建 GPU 工作负载集群,请执行以下操作:

    1. 在集群的配置文件中,对于工作节点,将 AZURE_NODE_MACHINE_TYPE 设置为与 GPU 兼容的虚拟机类型,例如 Standard_NC4as_T4_v3

    2. 使用具有 --dry-run 选项的 tanzu cluster create 通过集群配置文件生成部署清单:

      tanzu cluster create MY-GPU-CLUSTER -f MY-GPU-CONFIG --dry-run > MY-GPU-CLUSTER-MANIFEST
      

      其中,MY-GPU-CLUSTER 是分配给集群的名称。

    3. 通过将集群传递到 kubectl apply 来创建集群:

      kubectl apply -f MY-GPU-CLUSTER-MANIFEST
      
    4. 运行 kubectl get pods -A。您应该会看到 default 命名空间中的 gpu-operator- pod 以及 gpu-operator-resources 命名空间中的 nvidia- pod 的列表。

测试启用了 GPU 的集群

要测试启用了 GPU 的集群,请执行以下操作:

  1. 通过运行 NVIDIA 文档中的 CUDA VectorAdd 矢量添加测试来测试 GPU 处理。

  2. 测试 GPU 运算符:

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

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

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