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 網際網路連線存取網際網路,請將 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 承租人識別碼。
    • CLIENT-ID 是 Azure AD 應用程式的用戶端識別碼 (也稱為 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 工作節點的工作負載叢集,並在叢集上手動安裝 GPU 原則和 GPU Operator
  • (技術預覽) 使用 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 Operator:

    1. 如果 kubectl context 不是目前內容,則將其設定為叢集。

    2. 從叢集 API 提供者 Azure 存放庫下載所需的 NVIDIA GPU 資源,並將其儲存到目前的目錄:

    3. 套用叢集原則:

      kubectl apply clusterpolicy-crd.yaml
      
    4. 套用 GPU Operator:

      kubectl apply gpu-operator-components.yaml
      
  4. 執行 kubectl get pods -A。您應該會看到 default 命名空間中的 gpu-operator- 網繭以及 gpu-operator-resources 命名空間中的 nvidia- 網繭的清單。

為 GPU 叢集部署設定管理叢集 (技術預覽)

附註

此功能處於不受支援的技術預覽狀態;請參閱 TKG 功能狀態

每當將 gpu: nvidia 新增到叢集資訊清單中的標籤時,可以將管理叢集設定為自動建立啟用了 GPU 的工作負載叢集。為此,請安裝 ClusterResourceSet (CRS) 並將其啟用,如下所示:

  1. 若要設定管理叢集以建立 GPU 叢集,請執行以下動作:

    1. 在 VMware {code} Sample Exchange 中搜尋 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- 網繭以及 gpu-operator-resources 命名空間中的 nvidia- 網繭的清單。

測試啟用了 GPU 的叢集

若要測試啟用了 GPU 的叢集,請執行以下動作:

  1. 透過執行 NVIDIA 說明文件中的 CUDA VectorAdd 向量新增測試來測試 GPU 處理。

  2. 測試 GPU Operator:

    1. 垂直擴充工作負載叢集的工作節點計數:

      tanzu cluster scale MY-GPU-CLUSTER -w 2
      
    2. 再次執行 kubectl get pods -A。您應該會看到為新增的節點列出的其他 gpu-operator-nvidia- 網繭。

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