在 Azure Kubernetes Service (AKS) 中建立叢集的節點集區

在 Azure Kubernetes Service (AKS) 中,具有相同設定的節點會共同組成節點集區。 這些節點集區包含用來執行應用程式的基礎 VM。 當您建立 AKS 叢集時,您要定義初始的節點數目及其大小 (SKU),這會建立一個系統節點集區

若要支援具有不同計算或儲存體需求的應用程式,您可以建立的使用者節點集區。 系統節點集區的主要用途是裝載重要系統 Pod,例如 CoreDNS 和 konnectivity。 使用者節點集區主要用來託管您的應用程式 Pod。 例如,使用較多的使用者節點集區,以提供密集計算應用程式,或存取高效能 SSD 儲存體所需的 GPU。 但是,如果您希望 AKS 叢集中只有一個集區,您可以在系統節點集區上排定應用程式 Pod。

注意

這項功能可讓您更充分掌控建立和管理多個節點集區,而且需要個別的命令,才能建立/更新/刪除 (CRUD) 作業。 之前,透過 az aks createaz aks update 使用 managedCluster API 進行叢集作業,而且是變更控制平面和單一節點集區的唯一選項。 這項功能會透過 agentPool API 公開代理程式集區的個別作業集,並需要使用 az aks nodepool 命令集,在個別節點集區上執行作業。

本文說明如何在 AKS 叢集中建立一個或多個節點集區。

開始之前

限制

在建立支援多個節點集區的 AKS 叢集時,需遵守下列限制:

  • 請參閱 Azure Kubernetes Service (AKS) 中的配額、虛擬機器大小限制及區域可用性
  • 如果您有其他系統節點集區可以取代其在 AKS 叢集中的位置,您可以刪除系統節點集區。 否則,您無法刪除系統節點集區。
  • 系統集區必須包含至少一個節點,而使用者節點集區則可包含零個或多個節點。
  • AKS 叢集必須使用標準 SKU 負載平衡器來使用多個節點集區。 基本 SKU 負載平衡器不支援此功能。
  • AKS 叢集必須使用節點的虛擬機器擴展集。
  • 節點集區的名稱只能包含小寫英數字元,且開頭必須為小寫字母。
    • 如果是 Linux 節點集區,長度必須介於 1 到 12 個字元之間。
    • 如果是 Windows 節點集區,長度必須介於 1 到 6 個字元之間。
  • 所有節點集區必須位於相同的虛擬網路中。
  • 當您在叢集建立時建立多個節點集區時,節點集區的所有 Kubernetes 版本都必須符合控制平面的版本集。

建立 AKS 叢集

重要

如果您在生產環境中執行 AKS 叢集的單一系統節點集區,建議您針對該節點集區使用至少三個節點。 如果一個節點關閉,將會失去控制平面資源,且備援遭到損害。 擁有更多控制平面節點將可減輕此風險。

  1. 使用 az group create 命令建立 Azure 資源群組。

    az group create --name myResourceGroup --location eastus
    
  2. 請使用 az aks create 建立具有單一節點集區的 AKS 叢集。

    az aks create \
        --resource-group myResourceGroup \
        --name myAKSCluster \
        --vm-set-type VirtualMachineScaleSets \
        --node-count 2 \
        --generate-ssh-keys \
        --load-balancer-sku standard
    

    建立叢集需要幾分鐘的時間。

  3. 當叢集準備就緒時,請使用 az aks get-credentials 命令,來取得叢集認證。

    az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
    

新增節點集區

上一個步驟中建立的叢集有單一節點集區。 在本區段中,我們會將第二個節點集區新增至叢集。

  1. 使用 az aks nodepool add 命令建立新的節點集區。 下列範例會建立名為 mynodepool 的節點集區,該集區會執行個節點:

    az aks nodepool add \
        --resource-group myResourceGroup \
        --cluster-name myAKSCluster \
        --name mynodepool \
        --node-count 3
    
  2. 查看節點集區的狀態,請使用 az aks node pool list 命令,並指定您的資源群組和叢集名稱。

    az aks nodepool list --resource-group myResourceGroup --cluster-name myAKSCluster
    

    下列範例輸出顯示已成功使用三個節點建立 mynodepool。 在上一個步驟中建立 AKS 叢集時,會建立預設的 nodepool1,其節點計數為 2

    [
      {
        ...
        "count": 3,
        ...
        "name": "mynodepool",
        "orchestratorVersion": "1.15.7",
        ...
        "vmSize": "Standard_DS2_v2",
        ...
      },
      {
        ...
        "count": 2,
        ...
        "name": "nodepool1",
        "orchestratorVersion": "1.15.7",
        ...
        "vmSize": "Standard_DS2_v2",
        ...
      }
    ]
    

ARM64 節點集區

ARM64 處理器為您的 Kubernetes 工作負載提供低電量計算。 若要建立 ARM64 節點集區,您必須選擇 Dpsv5Dplsv5Epsv5 系列虛擬機器。

限制

  • 已啟用 Defender 的叢集不支援 ARM64 節點集區。
  • ARM64 SKU 不支援已啟用 FIPS 的節點集區。

新增 ARM64 節點集區

  • 使用 az aks nodepool add,將 ARM64 節點集區新增至現有的叢集。

    az aks nodepool add \
        --resource-group myResourceGroup \
        --cluster-name myAKSCluster \
        --name armpool \
        --node-count 3 \
        --node-vm-size Standard_D2pds_v5
    

Azure Linux 節點集區

適用於 AKS 的 Azure Linux 容器主機是開放原始碼 Linux 發行版本,可做為 AKS 容器主機使用。 提供高可靠性、安全性和一致性。 僅包含執行容器工作負載所需的最小套件集合,可改善開機時間和整體效能。

新增 Azure Linux 節點集區

  • 使用 az aks nodepool add 命令並指定 --os-sku AzureLinux,將 Azure Linux 節點集區新增至現有的叢集。

    az aks nodepool add \
        --resource-group myResourceGroup \
        --cluster-name myAKSCluster \
        --name azlinuxpool \
        --os-sku AzureLinux
    

將 Ubuntu 節點移轉至 Azure Linux 節點

您可以使用下列其中一種方法,將現有的 Ubuntu 節點移轉至 Azure Linux:

具有唯一子網路的節點集區

工作負載可能需要將叢集的節點分割成不同的集區,以進行邏輯隔離。 叢集中每個節點集區專用的個別子網路可協助支援此隔離,其可解決需求,例如具有不連續的虛擬網路位址空間來分割跨節點集區。

注意

請確定使用 Azure CLI 2.35.0 版或更新版本。

限制

  • 所有指派給 nodepools 的子網路都必須屬於相同的虛擬網路。
  • 系統 Pod 必須能夠存取叢集中的所有節點和 Pod,以提供重要功能,例如 DNS 解析和通道 kubectl logs/exec/port-forward Proxy。
  • 如果您在建立叢集之後展開 VNET,則必須在原始 CIDR 區塊外部新增子網路之前,更新叢集。 當代理程式集區上新增 AKS 錯誤輸出時,aks-previewAzure CLI 延伸模組 (0.5.66 和更高版本) 現在支援執行az aks update命令且僅限必要的-g <resourceGroup> -n <clusterName>引數。 此命令會執行更新作業,而不需要進行任何變更,將可復原停滯在失敗狀態中的叢集。
  • 在 Kubernetes 版本低於 1.23.3 的叢集中,kube-proxy 會從新的子網路 SNAT 流量,這可能會導致 Azure 網路原則卸除封包。
  • Windows 節點 SNAT 流量至新的子網路,直到重新安裝節點集區的映像為止。
  • 內部負載平衡器預設為其中一個節點集區子網路。

新增具有唯一子網路的節點集區

  • 使用 az aks nodepool add 命令並指定 --vnet-subnet-id,將具有唯一子網路的節點集區新增至現有的叢集。

    az aks nodepool add \
        --resource-group myResourceGroup \
        --cluster-name myAKSCluster \
        --name mynodepool \
        --node-count 3 \
        --vnet-subnet-id <YOUR_SUBNET_RESOURCE_ID>
    

已啟用 FIPS 的節點集區

如需針對 AKS 叢集啟用「聯邦資訊處理標準 (FIPS)」的詳細資訊,請參閱 為 Azure Kubernetes Service (AKS) 節點集區啟用「聯邦資訊處理標準 (FIPS)」

Windows Server 節點集區搭配 containerd

從 Kubernetes 版本 1.20 或更高版本開始,您可以指定 containerd 做為 Windows Server 2019 節點集區的容器執行階段。 從 Kubernetes 1.23 開始,containerd 是 Windows 的預設且唯一的容器運行時間。

重要

使用 containerd 搭配 Windows Server 2019 節點集區時:

  • 控制平面和 Windows Server 2019 節點集區都必須使用 Kubernetes 1.20 版或更新版本。
  • 當您建立或更新節點集區以執行 Windows Server 容器時,--node-vm-size 的預設值是 Standard_D2s_v3 在 Kubernetes 版本 1.20 之前,Windows Server 2019 節點集區的建議大小下限。 使用 containerd 的 Windows Server 2019 節點集區建議大小下限為 Standard_D4s_v3。 設定 --node-vm-size 參數時,檢查受限制的 VM 大小清單。
  • 建議使用污點或標籤搭配執行 containerd 中的 Windows Server 2019 節點集區,並搭配部署來選擇節點或節點選取器,以確保工作負載已正確排程。

使用 containerd 新增 Windows Server 節點集區

  • 使用 az aks nodepool add,將具有 containerd 的 Windows Server 節點集區新增至您現有的叢集。

    注意

    如果您未指定 WindowsContainerRuntime=containerd 自訂標頭,節點集區預設仍會使用 containerd 作為容器執行階段。

    az aks nodepool add \
        --resource-group myResourceGroup \
        --cluster-name myAKSCluster \
        --os-type Windows \
        --name npwcd \
        --node-vm-size Standard_D4s_v3 \
        --kubernetes-version 1.20.5 \
        --aks-custom-headers WindowsContainerRuntime=containerd \
        --node-count 1
    

將指定現有的 Windows Server 節點集區升級至 containerd

  • 使用 az aks nodepool upgrade 以將特定節點集區從 Docker 升級至 containerd

    az aks nodepool upgrade \
        --resource-group myResourceGroup \
        --cluster-name myAKSCluster \
        --name npwd \
        --kubernetes-version 1.20.7 \
        --aks-custom-headers WindowsContainerRuntime=containerd
    

將所有現有的 Windows Server 節點集區升級至 containerd

  • 使用 az aks nodepool upgrade 以將所有節點集區從 Docker 升級至 containerd

    az aks nodepool upgrade \
        --resource-group myResourceGroup \
        --cluster-name myAKSCluster \
        --kubernetes-version 1.20.7 \
        --aks-custom-headers WindowsContainerRuntime=containerd
    

刪除節點集區

如果您不再需要節點集區,可以將其刪除,並移除基礎 VM 節點。

警告

當您刪除節點集區時,AKS 不會執行隔離和清空,而且沒有復原選項適用於刪除節點集區時可能會發生的資料遺失。 如果其他節點集區上無法排程 Pod,則這些應用程式會變成無法使用。 當使用中的應用程式沒有資料備份,或能夠在叢集中的其他節點集區上執行時,請確定您不會刪除節點集區。 若要將重新排程 Pod 的中斷降到最低,而此 Pod 目前正在您想刪除的節點集區上執行,則請先在節點集區的所有節點上執行隔離和清空,再刪除。

  • 刪除節點集區,請使用 az aks nodepool delete 命令,並指定節點集區名稱。

    az aks nodepool delete -g myResourceGroup --cluster-name myAKSCluster --name mynodepool --no-wait
    

    刪除節點和節點集區需要幾分鐘的時間。

下一步

在本文中,您已了解如何在 AKS 叢集中建立多個節點集區。 如需了解如何管理多個節點集區,請參閱在 Azure Kubernetes Service (AKS) 中管理叢集的多個節點集區