本主題說明如何設定 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 網際網路連線存取網際網路,請將 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 承租人識別碼。CLIENT-ID
是 Azure AD 應用程式的用戶端識別碼 (也稱為 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 Operator:
如果 kubectl context
不是目前內容,則將其設定為叢集。
從叢集 API 提供者 Azure 存放庫下載所需的 NVIDIA GPU 資源,並將其儲存到目前的目錄:
套用叢集原則:
kubectl apply clusterpolicy-crd.yaml
套用 GPU Operator:
kubectl apply gpu-operator-components.yaml
執行 kubectl get pods -A
。您應該會看到 default
命名空間中的 gpu-operator-
網繭以及 gpu-operator-resources
命名空間中的 nvidia-
網繭的清單。
附註此功能處於不受支援的技術預覽狀態;請參閱 TKG 功能狀態。
每當將 gpu: nvidia
新增到叢集資訊清單中的標籤時,可以將管理叢集設定為自動建立啟用了 GPU 的工作負載叢集。為此,請安裝 ClusterResourceSet
(CRS) 並將其啟用,如下所示:
若要設定管理叢集以建立 GPU 叢集,請執行以下動作:
在 VMware {code} Sample Exchange 中搜尋 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-
網繭以及 gpu-operator-resources
命名空間中的 nvidia-
網繭的清單。
若要測試啟用了 GPU 的叢集,請執行以下動作:
透過執行 NVIDIA 說明文件中的 CUDA VectorAdd 向量新增測試來測試 GPU 處理。
測試 GPU Operator:
垂直擴充工作負載叢集的工作節點計數:
tanzu cluster scale MY-GPU-CLUSTER -w 2
再次執行 kubectl get pods -A
。您應該會看到為新增的節點列出的其他 gpu-operator-
和 nvidia-
網繭。