在 Azure Kubernetes Service (AKS) 中建立叢集的節點集區
在 Azure Kubernetes Service (AKS) 中,具有相同設定的節點會共同組成節點集區。 這些節點集區包含用來執行應用程式的基礎 VM。 當您建立 AKS 叢集時,您要定義初始的節點數目及其大小 (SKU),這會建立一個系統節點集區。
若要支援具有不同計算或儲存體需求的應用程式,您可以建立的使用者節點集區。 系統節點集區的主要用途是裝載重要系統 Pod,例如 CoreDNS 和 konnectivity
。 使用者節點集區主要用來託管您的應用程式 Pod。 例如,使用較多的使用者節點集區,以提供密集計算應用程式,或存取高效能 SSD 儲存體所需的 GPU。 但是,如果您希望 AKS 叢集中只有一個集區,您可以在系統節點集區上排定應用程式 Pod。
注意
這項功能可讓您更充分掌控建立和管理多個節點集區,而且需要個別的命令,才能建立/更新/刪除 (CRUD) 作業。 之前,透過 az aks create
或 az aks update
使用 managedCluster API 進行叢集作業,而且是變更控制平面和單一節點集區的唯一選項。 這項功能會透過 agentPool API 公開代理程式集區的個別作業集,並需要使用 az aks nodepool
命令集,在個別節點集區上執行作業。
本文說明如何在 AKS 叢集中建立一個或多個節點集區。
開始之前
- 您需要安裝和設定 Azure CLI 2.2.0 版或更新版本。 執行
az --version
以尋找版本。 如果您需要安裝或升級,請參閱安裝 Azure CLI。 - 如需規劃儲存體設定,請參閱 Azure Kubernetes Service 中應用程式適用的儲存體選項。
限制
在建立支援多個節點集區的 AKS 叢集時,需遵守下列限制:
- 請參閱 Azure Kubernetes Service (AKS) 中的配額、虛擬機器大小限制及區域可用性。
- 如果您有其他系統節點集區可以取代其在 AKS 叢集中的位置,您可以刪除系統節點集區。 否則,您無法刪除系統節點集區。
- 系統集區必須包含至少一個節點,而使用者節點集區則可包含零個或多個節點。
- AKS 叢集必須使用標準 SKU 負載平衡器來使用多個節點集區。 基本 SKU 負載平衡器不支援此功能。
- AKS 叢集必須使用節點的虛擬機器擴展集。
- 節點集區的名稱只能包含小寫英數字元,且開頭必須為小寫字母。
- 如果是 Linux 節點集區,長度必須介於 1 到 12 個字元之間。
- 如果是 Windows 節點集區,長度必須介於 1 到 6 個字元之間。
- 所有節點集區必須位於相同的虛擬網路中。
- 當您在叢集建立時建立多個節點集區時,節點集區的所有 Kubernetes 版本都必須符合控制平面的版本集。
建立 AKS 叢集
重要
如果您在生產環境中執行 AKS 叢集的單一系統節點集區,建議您針對該節點集區使用至少三個節點。 如果一個節點關閉,將會失去控制平面資源,且備援遭到損害。 擁有更多控制平面節點將可減輕此風險。
使用
az group create
命令建立 Azure 資源群組。az group create --name myResourceGroup --location eastus
請使用
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
建立叢集需要幾分鐘的時間。
當叢集準備就緒時,請使用
az aks get-credentials
命令,來取得叢集認證。az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
新增節點集區
上一個步驟中建立的叢集有單一節點集區。 在本區段中,我們會將第二個節點集區新增至叢集。
使用
az aks nodepool add
命令建立新的節點集區。 下列範例會建立名為 mynodepool 的節點集區,該集區會執行三個節點:az aks nodepool add \ --resource-group myResourceGroup \ --cluster-name myAKSCluster \ --name mynodepool \ --node-count 3
查看節點集區的狀態,請使用
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 節點集區,您必須選擇 Dpsv5、Dplsv5 或 Epsv5 系列虛擬機器。
限制
- 已啟用 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-preview
Azure 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) 中管理叢集的多個節點集區。