在 Azure Kubernetes Service 中使用虛擬機節點集區 (AKS)

在本文中,您將瞭解 AKS 的新虛擬機節點集區類型。

使用虛擬機器節點集區時,AKS 會直接管理每個單一節點的佈建和啟動程序。 針對虛擬機器擴展集節點集區,AKS 會管理虛擬機器擴展集的模型,並使用它來達到節點集區中所有節點的一致性。 虛擬機器節點集區可讓您使用最適合您個別工作負載的虛擬機器來協調叢集。

透過虛擬機節點池,AKS 直接管理每個節點的配置與啟動。 對於虛擬機縮放集節點池,AKS 管理虛擬機縮放集的模型,並利用它在所有節點池中達成一致性。 虛擬機節點池讓你能用最適合你個人工作負載的虛擬機來協調叢集。

虛擬機節點池概覽

運作方式

節點池由一組虛擬機(VM)組成,不同虛擬機大小支援不同類型的工作負載。 這些虛擬機器大小稱為 SKU,會分類為針對特定用途最佳化的不同系列。 更多資訊請參閱 VM SKU 文件。 透過虛擬機節點池,你可以執行多 SKU 手動縮放及多 SKU 自動縮放。

若要啟用多個虛擬機器大小的調整,虛擬機器節點集區類型會使用 ScaleProfile,其中包含指出如何調整節點集區的組態,特別是所需的虛擬機器大小清單和每個大小的計數。 ManualScaleProfile是縮放設定檔,會指定一個想要的虛擬機器大小及該類型在節點集區中的總計數。 ManualScaleProfile 中只允許一個虛擬機器大小。 您必須為節點集區中的每個虛擬機器大小建立個別的 ManualScaleProfile。 建立新的虛擬機器節點池時,您可以使用vm-size 欄位為虛擬機器大小設定初始手動縮放設定檔,並加入node-count。 您也可以依循新增手動縮放設定檔的指示,新增更多手動縮放設定檔。

若要啟用多種虛擬機器大小的調整,虛擬機器節點集區類型會使用包含相關設定的 ScaleProfile,以指定節點集區可如何調整規模,具體而言,就是所需的虛擬機器大小清單以及每種大小的數量。 ManualScaleProfile是縮放設定檔,會指定一個想要的虛擬機器大小及該類型在節點集區中的總計數。 A ManualScaleProfile 只支援一種虛擬機大小。 您必須為節點集區中的每個虛擬機器大小建立個別的 ManualScaleProfile。 當建立新的虛擬機器節點集區時,請使用 vm-size 欄位並包含 node-count,為虛擬機器大小新增初始手動擴展設定檔。 你也可以按照新增手動刻度設定檔的說明,新增更多手動刻度設定檔。

虛擬機的節點池也支援 Auto 模式,這表示節點池可以使用 叢集自動縮放器。 虛擬機器節點集區在手動和自動調整模式下,總共支援最多五個擴展設定檔。 每個設定檔都會指定一種同系列的虛擬機器 SKU。 每個 AutoScaleProfile 節點池中都可以有自己的最小與最大節點數。

附註

建立新的 虛擬機器 節點集區時,你可以設定多個擴縮設定檔,而且節點集區中至少需要一個手動或自動擴縮設定檔。

虛擬機節點池的優點

虛擬機器節點集區類型的優點包括:

  • 彈性:節點規格可以更新,以適應您目前的工作負載和需求。
  • 微調控制:單一節點層級的控制允許指定和混合不同規格的節點,以解除單一模型的限制並改善一致性。
  • 效率:您可以減少叢集的節點磁碟使用量,以簡化操作需求。

虛擬機節點池支援每個節點池最多五個可擴展配置檔,因此工作負載可以使用多個同系列虛擬機 SKU,而不必為每個 SKU 設置獨立的節點池。

比較 AKS 的計算擴展經驗

下表強調如何比較虛擬機器節點集區與標準擴展集節點集區。

節點集區類型 擴展與節點管理能力
虛擬機器節點集區 您可以在節點集區中新增、移除或更新節點。 虛擬機類型可以是同一家族類型的任何虛擬機(例如 D 系列、A 系列等等)。 虛擬機器 節點池也支援多版本手動及自動縮放。
以節點集區為基礎的虛擬機器擴展集 您可以在節點集區中新增或移除相同大小和類型的節點。 如果您將新的虛擬機器大小新增至叢集,則需要建立新的節點集區。

我在 AKS 上應該選擇哪一種運算擴展體驗?

根據你的工作負載需求,有多種計算擴展經驗需要考慮。 請參考各項的使用案例:

  • 節點自動配置:最適合多版本自動擴展,以及更智慧、靈活的虛擬機版本選擇(包含多個版本系列)。
  • 虛擬機器 節點池:最適合多版本手動縮放,並支援多版本自動縮放。 需要為每個節點集區最多選擇五種特定大小的版本。
  • 虛擬機器擴展集:支援單一版本手動縮放及單一版本自動縮放。 需要為每個節點池選擇一種大小的特定版本。

虛擬機器節點集區限制

  • 池中指定的虛擬機大小必須是相同類型。 例如,GPU 與非 GPU 虛擬機,或 x86 與 ARM64 虛擬機不能在同一個節點池中。
  • InifiniBand 無法使用。
  • 不支援節點集區快照集。
  • 節點集區中選取的所有 VM 大小都必須來自類似的虛擬機器系列。 例如,您無法將 N 系列虛擬機器類型與相同節點集區中的 D 系列虛擬機器類型混合在一起。
  • 使用臨時作業系統磁碟時,你需要選擇節點池中所有支援相同臨時作業系統磁碟放置的虛擬機大小。 由於 DiffDiskPlacement 是單一池層級的值,AKS 無法在同一節點池中表達每個虛擬機大小的不同位置。
  • 虛擬機器節點集區每個節點集區總共允許最多五個擴展設定檔。 每個手動或自動縮放設定檔都會指定同一虛擬機器系列中的一種虛擬機器大小。
  • 不支援 Windows 節點集區。

暫時性作業系統磁碟放置位置相容性

當您新增混合了具有不同暫時性作業系統磁碟配置之 VM 大小的擴展設定檔時,建立或更新作業會失敗,並出現 InvalidParameter 錯誤及子程式碼 EphemeralOSMixedPlacementNotSupported。

請使用以下其中一種修復選項:

  • 使用共享相同短暫作業系統磁碟位置的虛擬機大小。
  • 將虛擬機大小拆分成獨立的節點池,讓每個池有一個位置。
  • 使用受管理作業系統磁碟,而非臨時作業系統磁碟。

新增擴展設定檔之前,請先確定配置

在你將虛擬機大小加入 虛擬機器 節點池之前,先檢查目標區域的 SKU 能力,並確認臨時作業系統磁碟放置的相容性。

  1. 列出候選虛擬機大小並檢視關鍵功能:

    az vm list-skus \
        --location <region> \
        --size Standard_D \
        --resource-type virtualMachines \
        --query "[].{name:name, capabilities:capabilities[?name=='EphemeralOSDiskSupported' || name=='MaxResourceVolumeMB' || name=='NvmeDiskSizeInMiB']}" \
        --output json
    
  2. 確認每個選擇的虛擬機大小是否支援臨時作業系統磁碟(EphemeralOSDiskSupported),並識別本地磁碟的可用位置(MaxResourceVolumeMB 臨時/資源磁碟與 NvmeDiskSizeInMiB NVMe)。

  3. 將 VM 大小分組,讓每個 虛擬機器 節點集區使用單一相容的放置位置。

例如,如果一個設定檔使用 Standard_D4ds_v5 (暫存/資源磁碟放置),另一個設定檔使用 Standard_D4ads_v6 (NVMe 配置),則應將它們分開在不同的節點池中,或使用受管理作業系統磁碟。

這很重要

預檢與假設狀況行為:目前沒有專門的預檢 API 可以在部署前驗證跨擴展設定檔的混合暫時性作業系統磁碟配置。 az deployment group what-if (ARM 的假設)並不保證能偵測到這種節點池相容性衝突。 權威檢查發生在 AKS 處理建立或更新請求時,若放置位置不相容則回傳 EphemeralOSMixedPlacementNotSupported 。

先決條件

  • Azure 訂用帳戶。 如果您沒有帳戶,您可以建立免費帳戶。
  • Azure CLI 版本 2.85.0 或更新版本已安裝並配置。 若要尋找版本,請執行 az --version。 欲了解更多安裝或升級Azure CLI的資訊,請參見 Install Azure CLI。
  • 此功能需 Kubernetes 版本 1.27 或以上。 要升級你的 Kubernetes 版本,請參見 升級 AKS 叢集。

這很重要

自訂虛擬網路需求:若您將虛擬機節點池部署至自訂虛擬網路,叢集必須使用 使用者指派的管理身份 ,且目標子網至少擁有 網路貢獻者 權限。 與虛擬機規模集節點池不同,虛擬機節點池僅依賴叢集身份來進行子網連接操作,且不使用第一方令牌。 使用系統指派管理身份的叢集在自訂虛擬網路上建立或更新虛擬機節點池時,會失敗於檢查前驗證,並返回 InvalidParameter 錯誤訊息。 欲了解更多關於為叢集設定使用者指派的管理身份的資訊,請參閱「 在 AKS 中使用受管理身份」。

建立具有虛擬機器節點集區的 AKS 叢集

附註

擴展設定檔中只允許一個 VM 大小,而虛擬機器節點集區的整體上限為五個 VM 擴展設定檔。

使用 az aks create 命令,將 --vm-set-type 旗標設定為 "VirtualMachines",建立具有虛擬機器節點集區的 AKS 叢集。

以下範例建立一個名為 myAKSCluster 的叢集,並有一個包含兩個節點的 虛擬機器 節點池:

az aks create \
    --resource-group myResourceGroup \
    --name myAKSCluster \
    --vm-set-type "VirtualMachines" \
    --vm-sizes "Standard_D4s_v3" \
    --node-count 2

建立一個 AKS 叢集,這個叢集包含位於自訂虛擬網路中的虛擬機節點池

當你將 虛擬機器 節點池部署到自訂虛擬網路時,必須建立一個由使用者指派的管理身份,並在建立叢集前,先在目標子網授予其 Network Contributor 權限。

  1. 建立虛擬網路和子網路。

    az network vnet create \
        --resource-group myResourceGroup \
        --name myVnet \
        --address-prefixes 10.1.0.0/16 \
        --subnet-name mySubnet \
        --subnet-prefix 10.1.0.0/24
    
  2. 取得子網路資源 ID。

    SUBNET_ID=$(az network vnet subnet show \
        --resource-group myResourceGroup \
        --vnet-name myVnet \
        --name mySubnet \
        --query id \
        --output tsv)
    
  3. 建立使用者指派的受控識別。

    az identity create \
        --name myAKSIdentity \
        --resource-group myResourceGroup
    
  4. 取得管理身份的主體 ID 和資源 ID。

    IDENTITY_PRINCIPAL_ID=$(az identity show \
        --name myAKSIdentity \
        --resource-group myResourceGroup \
        --query principalId \
        --output tsv)
    
    IDENTITY_RESOURCE_ID=$(az identity show \
        --name myAKSIdentity \
        --resource-group myResourceGroup \
        --query id \
        --output tsv)
    
  5. 將網路參與者角色指派給目標子網路上的受控身分識別。

    az role assignment create \
        --assignee $IDENTITY_PRINCIPAL_ID \
        --role "Network Contributor" \
        --scope $SUBNET_ID
    

    將授與叢集受控識別的權限傳播完成,最多可能需要 60 分鐘。

  6. 在建立叢集前,請確認該角色指派是否存在於目標子網路上。

    az role assignment list \
        --assignee $IDENTITY_PRINCIPAL_ID \
        --role "Network Contributor" \
        --scope $SUBNET_ID \
        --query "[].{Role:roleDefinitionName, Scope:scope}" \
        --output table
    

    當輸出顯示目標子網路範圍的網路參與者角色時,請繼續進行。

  7. 在您的自訂虛擬網路中建立 AKS 叢集,其中包含虛擬機器的節點池。

    az aks create \
        --resource-group myResourceGroup \
        --name myAKSCluster \
        --vm-set-type "VirtualMachines" \
        --vm-sizes "Standard_D4s_v3" \
        --node-count 2 \
        --vnet-subnet-id $SUBNET_ID \
        --assign-identity $IDENTITY_RESOURCE_ID
    

將虛擬機器節點集區新增至現有的叢集

使用 az aks nodepool add 命令並將 --vm-set-type 旗標設定為 "VirtualMachines",將虛擬機器節點集區新增至現有叢集。

下列範例會將名為 myvmpool 的虛擬機器節點集區新增至 myAKSCluster 叢集。 節點池會建立一個 ManualScaleProfile,將 --vm-sizes 設定為 Standard_D4s_v3,並將 --node-count 設置為 3:

az aks nodepool add \
    --resource-group myResourceGroup \
    --cluster-name myAKSCluster \
    --name myvmpool \
    --vm-set-type "VirtualMachines" \
    --vm-sizes "Standard_D4s_v3" \
    --node-count 3

將手動擴展設定檔新增至節點集區

使用 az aks nodepool manual-scale add,將 --vm-sizes 旗標設定為 "Standard_D2s_v3" 並將 node-count 設定為 2,將手動擴展設定檔新增至節點集區。

下列範例會將手動調整設定檔新增至叢集 myAKSCluster 中的節點集區 myvmpool。 節點池包含兩個節點,VM SKU 為 Standard_D2s_v3:

az aks nodepool manual-scale add \
    --resource-group myResourceGroup \
    --cluster-name myAKSCluster \
    --name myvmpool \
    --vm-sizes "Standard_D2s_v3" \
    --node-count 2

更新現有的手動擴展設定檔

使用 az aks nodepool manual-scale update 命令,並將 --vm-sizes 旗標設定為 "Standard_D2s_v3",更新節點集區中現有的手動擴展設定檔。

附註

使用 --current-vm-sizes 參數來指定您要更新的現有節點集區大小。 您可以更新 --vm-sizes 和/或 --node-count。 使用其他工具或 REST API 時,您必須在更新節點集區擴展設定檔時,傳入完整 agentPoolProfiles.virtualMachinesProfile.scale 欄位。

下列範例會將手動調整設定檔更新為 myAKSCluster 叢集中的 myvmpool 節點集區。 指令將節點數更新為五個,並將虛擬機 SKU 從 Standard_D4s_v3 變更為 Standard_D8s_v3。

az aks nodepool manual-scale update \
    --resource-group myResourceGroup \
    --cluster-name myAKSCluster \
    --name myvmpool \
    --current-vm-sizes "Standard_D4s_v3" \
    --vm-sizes "Standard_D8s_v3" \
    --node-count 5

刪除手動擴展設定檔

使用 az aks nodepool manual-scale delete 命令刪除現有的手動擴展設定檔。

附註

--current-vm-sizes 參數會指定要刪除的現有節點集區大小。 使用其他工具或 REST API 來更新節點集區擴展設定檔時,請傳入完整的 agentPoolProfiles.virtualMachinesProfile.scale 欄位。

以下範例刪除了 Standard_D8s_v3 節點池中 虛擬機 SKU 的手動縮放設定檔。

az aks nodepool manual-scale delete \
    --resource-group myResourceGroup \
    --cluster-name myAKSCluster \
    --name myvmpool \
    --current-vm-sizes "Standard_D8s_v3"

具備 虛擬機器 Node Pool 的叢集自動縮放器

虛擬機節點池支援 叢集自動調整器。 此支援允許對相同虛擬機大小的節點池及多個虛擬機大小的節點池進行自動擴展。 你可以在建立叢集時啟用此功能,新增節點池時使用旗標 --enable-cluster-autoscaler ,或在更新現有手動節點池時啟用。

當使用叢集自動擴展器搭配虛擬機節點池時,行為如下:

  • 向上擴展:自動調整器會回應暫止 Pod 壓力,並可在具有多種 VM 大小的節點集區中向上擴展節點數量。
  • 縮小規模:自動縮放器會根據節點的使用情況選擇特定節點。 你可以設定 scale-down-utilization-threshold,以調整叢集自動縮放觸發縮放動作的時機。 欲了解更多關於自動擴展設定的資訊,請參閱 叢集自動縮放器文件 。

限制

  • 此功能僅在公有雲中提供。
  • GPU 節點目前不支援。

建立一個啟用 虛擬機器 節點池與叢集自動擴展器的 AKS 叢集

  • 使用 az aks create 指令來建立一個包含虛擬機節點池的 AKS 叢集,將 --vm-set-type 旗標設定為 "VirtualMachines",並使用 --enable-cluster-autoscaler 旗標。

以下範例建立一個名為 myAKSCluster 的叢集,並建立一個 虛擬機器 節點池,使用節點大小Standard_D4s_v3、最小節點數為 2、最大節點數為 5:

az aks create \
    --resource-group myResourceGroup \
    --name myAKSCluster \
    --vm-set-type "VirtualMachines" \
    --node-vm-size "Standard_D4s_v3" \
    --enable-cluster-autoscaler \
    --min-count 2 \
    --max-count 5

在現有叢集中新增一個啟用叢集自動擴展器的虛擬機節點池

  • 使用 az aks nodepool add 指令建立虛擬機節點池,將 --vm-set-type 旗標設定為 "VirtualMachines",並使用 --enable-cluster-autoscaler 旗標。

以下範例將虛擬機節點池 myvmpool 並啟用叢集自動縮放器,加入名為 myAKSCluster 的叢集,虛擬機大小為「Standard_D4s_v3」,節點數為 2,最大節點數為 5:

az aks nodepool add \
    --resource-group myResourceGroup \
    --cluster-name myAKSCluster \
    --name myvmpool \
    --vm-set-type "VirtualMachines" \
    --node-vm-size "Standard_D4s_v3" \
    --enable-cluster-autoscaler \
    --min-count 2 \
    --max-count 5

更新 虛擬機器 節點池的叢集自動調整器設定

以下範例更新了虛擬機節點池 myvmpool 在名為 myAKSCluster 的叢集中,使用虛擬機大小為「Standard_D4s_v3」的設定:

az aks nodepool auto-scale update \
    --resource-group myResourceGroup \
    --cluster-name myAKSCluster \
    --name myvmpool \
    --current-node-vm-size "Standard_D4s_v3" \
    --min-count 3 \
    --max-count 7

將 虛擬機器 節點集區調整設定檔從手動調整模式切換為自動調整模式

以下範例會更新名為 myAKSCluster 的叢集中的 虛擬機器 節點集區 myvmpool,將所有手動調整規模設定檔轉換為具有相同最小和最大節點數的自動調整規模設定檔:

az aks nodepool update \
    --resource-group myResourceGroup \
    --cluster-name myAKSCluster \
    --name myvmpool \
    --enable-cluster-autoscaler \
    --min-count 2 \
    --max-count 5

在 虛擬機器 節點池中停用叢集自動調整器

你可以停用叢集自動調整器,或將虛擬機節點集區中的所有縮放設定檔從Auto模式切換為Manual模式。

以下範例禁用了名為 myAKSCluster 叢集的 虛擬機器 node pool myvmpool 的叢集自動擴展器。 會將所有縮放設定檔從 Auto 模式切換為 Manual 模式:

az aks nodepool update \
    --resource-group myResourceGroup \
    --cluster-name myAKSCluster \
    --name myvmpool \
    --disable-cluster-autoscaler

後續步驟

在本文中,您已了解如何在 AKS 中使用虛擬機器節點集區。 若要深入了解 AKS 中的節點集區,請參閱建立節點集區。