本主题介绍了如何配置 Tanzu Kubernetes Grid (TKG) 工作负载集群以使用特定于 Microsoft Azure,以及不能在集群的平面配置文件或 Kubernetes 样式对象规范中完全配置的功能。
有关如何使用配置文件和对象规范在 Azure 上配置工作负载集群的信息,请参阅 Azure 集群配置文件。
默认情况下,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。