在 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 $RESOURCE_GROUP_NAME --location $LOCATION
請使用
az aks create
建立具有單一節點集區的 AKS 叢集。az aks create \ --resource-group $RESOURCE_GROUP_NAME \ --name $CLUSTER_NAME \ --vm-set-type VirtualMachineScaleSets \ --node-count 2 \ --location $LOCATION \ --load-balancer-sku standard \ --generate-ssh-keys
建立叢集需要幾分鐘的時間。
當叢集準備就緒時,請使用
az aks get-credentials
命令,來取得叢集認證。az aks get-credentials --resource-group $RESOURCE_GROUP_NAME --name $CLUSTER_NAME
新增節點集區
上一個步驟中建立的叢集有單一節點集區。 在本區段中,我們會將第二個節點集區新增至叢集。
使用
az aks nodepool add
命令建立新的節點集區。 下列範例會建立名為 mynodepool 的節點集區,該集區會執行三個節點:az aks nodepool add \ --resource-group $RESOURCE_GROUP_NAME \ --cluster-name $CLUSTER_NAME \ --name $NODE_POOL_NAME \ --node-count 3
查看節點集區的狀態,請使用
az aks node pool list
命令,並指定您的資源群組和叢集名稱。az aks nodepool list --resource-group $RESOURCE_GROUP_NAME --cluster-name $CLUSTER_NAME
下列範例輸出顯示已成功使用三個節點建立 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 且 Kubernetes 版本小於1.29.0 的叢集不支援 ARM64 節點集區。
- ARM64 SKU 不支援已啟用 FIPS 的節點集區。
- ARM64 SKU 不支援 Windows 節點集區。
新增 ARM64 節點集區
使用
az aks nodepool add
,將 ARM64 節點集區新增至現有的叢集。az aks nodepool add \ --resource-group $RESOURCE_GROUP_NAME \ --cluster-name $CLUSTER_NAME \ --name $ARM_NODE_POOL_NAME \ --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 $RESOURCE_GROUP_NAME \ --cluster-name $CLUSTER_NAME \ --name $AZ_LINUX_NODE_POOL_NAME \ --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 $RESOURCE_GROUP_NAME \ --cluster-name $CLUSTER_NAME \ --name $NODE_POOL_NAME \ --node-count 3 \ --vnet-subnet-id $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 $RESOURCE_GROUP_NAME \ --cluster-name $CLUSTER_NAME \ --os-type Windows \ --name $CONTAINER_D_NODE_POOL_NAME \ --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 $RESOURCE_GROUP_NAME \ --cluster-name $CLUSTER_NAME \ --name $CONTAINER_D_NODE_POOL_NAME \ --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 $RESOURCE_GROUP_NAME \ --cluster-name $CLUSTER_NAME \ --kubernetes-version 1.20.7 \ --aks-custom-headers WindowsContainerRuntime=containerd
具有暫時性 OS 磁碟的節點集區
使用將
--node-osdisk-type
旗標設定為Ephemeral
的az aks nodepool add
命令,將使用暫時性 OS 磁碟的節點集區新增至現有的叢集。注意
- 您可以使用
--node-osdisk-type
旗標搭配az aks create
命令,在叢集建立期間指定暫時性 OS 磁碟。 - 如果您想要建立具有網路連接 OS 磁碟的節點集區,您可以藉由指定
--node-osdisk-type Managed
來執行此動作。
az aks nodepool add --name $EPHEMERAL_NODE_POOL_NAME --cluster-name $CLUSTER_NAME --resource-group $RESOURCE_GROUP_NAME -s Standard_DS3_v2 --node-osdisk-type Ephemeral
- 您可以使用
重要
透過暫時性 OS,您可以部署 VM 快取的大小的 VM 和執行個體映像。 AKS 中的預設節點 OS 磁碟設定會使用 128 GB,這表示您需要快取大於 128 GB 的 VM 大小。 預設 Standard_DS2_v2 的快取大小為 86 GB,容量不足。 Standard_DS3_v2 VM SKU 的快取大小為 172 GB,符合需求。 您也可以使用 --node-osdisk-size
來減少 OS 磁碟的預設大小,但請記住 AKS 映像的大小下限為 30 GB。
刪除節點集區
如果您不再需要節點集區,可以將其刪除,並移除基礎 VM 節點。
警告
當您刪除節點集區時,AKS 不會執行隔離和清空,而且沒有復原選項適用於刪除節點集區時可能會發生的資料遺失。 如果其他節點集區上無法排程 Pod,則這些應用程式會變成無法使用。 當使用中的應用程式沒有資料備份,或能夠在叢集中的其他節點集區上執行時,請確定您不會刪除節點集區。 若要將重新排程 Pod 的中斷降到最低,而此 Pod 目前正在您想刪除的節點集區上執行,則請先在節點集區的所有節點上執行隔離和清空,再刪除。
刪除節點集區,請使用
az aks nodepool delete
命令,並指定節點集區名稱。az aks nodepool delete --resource-group $RESOURCE_GROUP_NAME --cluster-name $CLUSTER_NAME --name $NODE_POOL_NAME --no-wait
刪除節點和節點集區需要幾分鐘的時間。
下一步
在本文中,您已了解如何在 AKS 叢集中建立多個節點集區。 如需了解如何管理多個節點集區,請參閱在 Azure Kubernetes Service (AKS) 中管理叢集的多個節點集區。