本主题介绍了如何配置 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 管理集群和工作负载集群是公用集群。但是,您也可以将其配置为专用集群,这意味着其 API 服务器使用 Azure 内部负载均衡器 (ILB),因此只能从集群自身的 VNet 或对等互连 VNet 中访问。
要使 Azure 集群成为专用集群,请在其配置文件中包含以下内容:
将 AZURE_ENABLE_PRIVATE_CLUSTER
设置为 true
。
(可选)将 AZURE_FRONTEND_PRIVATE_IP
设置为集群负载均衡器的内部地址。
10.0.0.100
。将 AZURE_VNET_NAME
、AZURE_VNET_CIDR
、AZURE_CONTROL_PLANE_SUBNET_NAME
、AZURE_CONTROL_PLANE_SUBNET_CIDR
、AZURE_NODE_SUBNET_NAME
和 AZURE_NODE_SUBNET_CIDR
设置为用于其他 Azure 专用集群的 VNet 和子网。
(可选)如果您需要控制平面和工作节点能够通过 Azure Internet 连接访问 Internet,请将 AZURE_ENABLE_CONTROL_PLANE_OUTBOUND_LB
和 AZURE_ENABLE_NODE_OUTBOUND_LB
设置为 true
。
默认情况下,Azure 专用集群会为负载均衡器类型的每个 Kubernetes 服务创建一个公用 IP 地址。要将负载均衡器服务配置为使用专用 IP 地址,请将以下注释添加到部署清单中:
---
metadata:
annotations:
service.beta.kubernetes.io/azure-load-balancer-internal: "true"
有关详细信息,请参见集群 API 提供程序 Azure 文档中的 API 服务器端点。
Tanzu Kubernetes Grid 可以在多个目标平台帐户上运行工作负载集群,例如在不同的团队之间拆分云使用情况,或者将不同的安全配置文件应用于生产、转储和开发工作负载。
要将工作负载集群部署到备用 Azure 服务主体帐户(不同于用于部署其管理集群的帐户),请执行以下操作:
创建备用 Azure 帐户。您可以在后面的步骤中使用此帐户的详细信息创建 AzureClusterIdentity。有关创建 Azure 服务主体帐户的信息,请参见 Azure 文档中的入门:使用门户创建可访问资源的 Azure AD 应用程序和服务主体。
将 kubectl
的上下文设置为管理集群:
kubectl config use-context MY-MGMT-CLUSTER@MY-MGMT-CLUSTER
其中,MY-MGMT-CLUSTER
是管理集群的名称。
使用以下内容创建 secret.yaml
文件:
apiVersion: v1
kind: Secret
metadata:
name: SECRET-NAME
type: Opaque
data:
clientSecret: CLIENT-SECRET
其中:
SECRET-NAME
是客户端密码的密钥名称。CLIENT-SECRET
是服务主体身份的客户端密钥。客户端密码必须采用 base64 编码。使用该文件创建 Secret
对象:
kubectl apply -f secret.yaml
创建包含以下内容的 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-1
和 CLUSTER-NAMESPACE-2
是允许集群使用其中标识的 Kubernetes 命名空间。可以使用命名空间阵列选择这些命名空间。使用该文件创建 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 门户,您应该会看到集群正在运行。
有两种方法在 Azure 上部署启用了 NVIDIA GPU 的工作负载集群:
ClusterResourceSet
(CRS) 配置管理集群,以自动创建一个或多个启用了 GPU 的工作负载集群下面的小节介绍了这两种方法以及如何测试启用了 GPU 的集群。
要部署工作负载集群并手动对其进行配置以利用 Azure 上可用的 NVIDIA GPU 虚拟机,请执行以下操作:
在集群的配置文件中,对于工作节点,将 AZURE_NODE_MACHINE_TYPE
设置为与 GPU 兼容的虚拟机类型,例如 Standard_NC4as_T4_v3
。
使用集群配置文件部署集群:
tanzu cluster create MY-GPU-CLUSTER -f MY-GPU-CONFIG
其中,MY-GPU-CLUSTER
是分配给集群的名称。
在集群上安装 GPU 集群策略和 GPU 运算符:
如果 kubectl context
不是当前上下文,则将其设置为集群。
从集群 API 提供程序 Azure 存储库下载所需的 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 的列表。
注意此功能处于不受支持的技术预览版状态;请参见 TKG 功能状态。
每当将 gpu: nvidia
添加到集群清单中的标签时,可以将管理集群配置为自动创建启用了 GPU 的工作负载集群。为此,请安装 ClusterResourceSet
(CRS) 并将其激活,如下所示:
要配置管理集群以创建 GPU 集群,请执行以下操作:
在 VMware {code} 示例交换中搜索 TKG 的 GPU CRS 并下载 Tanzu Kubernetes Grid v1.4 的 gpu-crs.yaml
文件。
将 kubectl
的上下文设置为管理集群的上下文:
kubectl config use-context my-management-cluster-admin@my-management-cluster
将 CRS 文件应用于管理集群,使用 --server-side
选项处理大量 ConfigMap
数据:
kubectl apply -f gpu-crs.yaml --server-side
要创建 GPU 工作负载集群,请执行以下操作:
在集群的配置文件中,对于工作节点,将 AZURE_NODE_MACHINE_TYPE
设置为与 GPU 兼容的虚拟机类型,例如 Standard_NC4as_T4_v3
。
使用具有 --dry-run
选项的 tanzu cluster create
通过集群配置文件生成部署清单:
tanzu cluster create MY-GPU-CLUSTER -f MY-GPU-CONFIG --dry-run > MY-GPU-CLUSTER-MANIFEST
其中,MY-GPU-CLUSTER
是分配给集群的名称。
通过将集群传递到 kubectl apply
来创建集群:
kubectl apply -f MY-GPU-CLUSTER-MANIFEST
运行 kubectl get pods -A
。您应该会看到 default
命名空间中的 gpu-operator-
pod 以及 gpu-operator-resources
命名空间中的 nvidia-
pod 的列表。
要测试启用了 GPU 的集群,请执行以下操作:
通过运行 NVIDIA 文档中的 CUDA VectorAdd 矢量添加测试来测试 GPU 处理。
测试 GPU 运算符:
纵向扩展工作负载集群的工作节点计数:
tanzu cluster scale MY-GPU-CLUSTER -w 2
再次运行 kubectl get pods -A
。您应该会看到为添加的节点列出的其他 gpu-operator-
和 nvidia-
pod。