本文說明如何在 Azure Kubernetes Service (AKS) 中配置節點自動配置(NAP)節點池,包括 SKU 選擇器、資源限制及優先權重。 它還提供了示例來幫助您入門。
NAP 中的節點集區概觀
NAP 會使用虛擬機器 (VM) SKU 需求來決定擱置工作負載的最佳 VM。 您可以設定:
- SKU 系列和特定實例類型。
- 資源限制和優先順序。
- 現成與隨選執行個體。
- 架構和功能需求。
NodePool 資源對 NAP 建立的節點以及在這些節點上執行的 Pod 設定了條件約束。 當您第一次安裝 NAP 時,它會建立一個 預設 NodePool。 您可以修改此節點集區,或建立額外的節點集區,以符合您的工作負載需求。
NAP 中 NodePools 的主要行為
設定 NodePools NAP 時,請記住下列注意事項:
- NAP 至少需要一個
NodePool才能運作。 - NAP 會評估每一個已設定的
NodePool。 - NAP 會跳過那些帶有 Pod 無法容錯的污點的
NodePools。 - NAP 會對已佈建的節點套用啟動污點,但不要求 Pod 容錯。
- NAP 最適合用於互斥的
NodePools。 當多個NodePools匹配時,它使用權重最高的一個。
檢閱預設節點集區組態
NAP 創建的默認 Karpenter NodePool 名稱為 default 的配置如下:
apiVersion: karpenter.sh/v1
kind: NodePool
metadata:
name: default
spec:
disruption:
consolidationPolicy: WhenEmptyOrUnderutilized
template:
spec:
nodeClassRef:
group: karpenter.azure.com
kind: AKSNodeClass
name: default
expireAfter: Never
# Requirements that constrain the parameters of provisioned nodes.
# These requirements are combined with pod.spec.affinity.nodeAffinity rules.
# Operators { In, NotIn, Exists, DoesNotExist, Gt, and Lt } are supported.
# https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#operators
requirements:
- key: kubernetes.io/arch
operator: In
values:
- amd64
- key: kubernetes.io/os
operator: In
values:
- linux
- key: karpenter.sh/capacity-type
operator: In
values:
- on-demand
- key: karpenter.azure.com/sku-family
operator: In
values:
- D
它也會建立 system-surge 節點集區,以協助自動調整系統集區節點。
在叢集建立期間控制預設節點集區的組態
當你使用 Azure CLI 建立啟用 NAP 的新 AKS 叢集
旗 --node-provisioning-default-pools 標會控制預設 NAP NodePool 組態,並接受下列值:
-
Auto(預設):建立兩個標準NodePools以供立即使用。 -
None:不會建立任何NodePools。 您必須自行定義。
警告
變更從 Auto 到 None:如果您在現有叢集上將設定從 Auto 變更為 None,則預設的 NodePools 不會自動刪除。 如果您不再需要它們,則必須手動刪除它們。
節點集區組態選項
下列各節概述 NAP 中的各種設定選項 NodePools ,包括 已知標籤和 SKU 選取器、 節點集區限制和 節點集區加權。
知名標籤和 SKU 選擇器
Kubernetes 定義了知名的標籤 由 Azure 實作。 您可以在 API 的spec.requirements區段中NodePool定義這些標籤。 NAP 也支援 Azure 專屬標籤,方便更進階的排程。
下表列出你可以在 spec.requirements API 章節 NodePool 中使用的標籤,以定義節點的虛擬機特性:
| Selector | Description | Example |
|---|---|---|
karpenter.sh/capacity-type |
VM 配置類型 (Spot / 隨需) | 付現 |
karpenter.azure.com/sku-family |
VM SKU 系列 | D、F、L 等。 |
karpenter.azure.com/sku-series |
VM SKU 系列 | Dpls_v6 |
karpenter.azure.com/sku-name |
明確的 SKU 名稱 | Standard_A1_v2 |
karpenter.azure.com/sku-version |
SKU版本(不帶“v”,可以使用1個) | 1, 2 |
karpenter.azure.com/sku-cpu |
VM 中的 CPU 數目 | 16 |
karpenter.azure.com/sku-memory |
虛擬機器中的記憶體 (MiB) | 131072 |
karpenter.azure.com/sku-gpu-name |
GPU 名稱 | A100 |
karpenter.azure.com/sku-gpu-manufacturer |
GPU 製造商 | nvidia |
karpenter.azure.com/sku-gpu-count |
每個 VM 的 GPU 計數 | 2 |
karpenter.azure.com/sku-networking-accelerated |
VM 是否已加速網路 | [對,錯] |
karpenter.azure.com/sku-storage-premium-capable |
VM 是否支援進階 IO 儲存體 | [對,錯] |
karpenter.azure.com/sku-storage-ephemeralos-maxsize |
暫時性作業系統 (OS) 磁碟的大小限制 (以 Gb 為單位) | 92 |
kubernetes.azure.com/sku-cpu |
VM 中的 CPU 數目 | 16 |
kubernetes.azure.com/sku-memory |
虛擬機器中的記憶體 (MiB) | 131072 |
kubernetes.azure.com/cluster |
AKS 叢集名稱 | my-cluster |
kubernetes.azure.com/mode |
節點池模式 | [系統,使用者] |
kubernetes.azure.com/priority |
優先順序 | [現成品,標準] |
kubernetes.azure.com/os-sku |
作業系統 SKU | [Ubuntu, AzureLinux] |
kubernetes.azure.com/fips_enabled |
是否啟用了 FIPS | True |
topology.kubernetes.io/zone |
可用區域 | [UKSOUTH-1,UKSOUTH-2,UKSOUTH-3] |
kubernetes.io/os |
操作系統 | Linux |
kubernetes.io/arch |
CPU 架構(AMD64 或 ARM64) | [amd64, arm64] |
SKU 系列範例
karpenter.azure.com/sku-family選取器可讓您以特定虛擬機器系列為目標。
| 家庭 | Description |
|---|---|
| D 系列 | 具有平衡 CPU 與記憶體比率的一般用途 VM |
| F系列 | 具有高 CPU 與記憶體比率的計算最佳化 VM |
| E系列 | 適用於記憶體密集型應用程式的記憶體最佳化虛擬機 |
| L 系列 | 儲存體最佳化的高磁碟傳輸量 VM |
| N系列 | 適用於計算密集型工作負載的已啟用 GPU 的 VM |
使用 SKU 系列的設定範例:
requirements:
- key: karpenter.azure.com/sku-family
operator: In
values:
- D
- F
SKU 名稱範例
karpenter.azure.com/sku-name選取器可讓您指定確切的 VM 執行個體類型。
requirements:
- key: karpenter.azure.com/sku-name
operator: In
values:
- Standard_D4s_v3
- Standard_F8s_v2
SKU 版本範例
karpenter.azure.com/sku-version選取器會以特定世代的 VM SKU 為目標。
requirements:
- key: karpenter.azure.com/sku-version
operator: In
values:
- "3" # v3 generation
- "5" # v5 generation
可用區域範例
topology.kubernetes.io/zone選取器可讓您指定節點的可用區域。
requirements:
- key: topology.kubernetes.io/zone
operator: In
values:
- eastus-1
- eastus-2
備註
你可以使用 az account list-locations --output table Azure CLI 指令找到你所在地區可用的區域。
架構範例
kubernetes.io/arch選取器可讓您指定節點的 CPU 架構。 NAP 同時支援 amd64 和 arm64 節點。
requirements:
- key: kubernetes.io/arch
operator: In
values:
- amd64
- arm64
作業系統範例
kubernetes.io/os選取器可讓您指定節點的作業系統。
requirements:
- key: kubernetes.io/os
operator: In
values:
- linux
容量類型範例
karpenter.sh/capacity-type 選取器可讓您選擇是否使用現成或隨選執行個體。
備註
當同時指定現成和隨選執行個體時,NAP 會優先使用 現成執行個體。
requirements:
- key: karpenter.sh/capacity-type
operator: In
values:
- spot
- on-demand
節點集區限制
預設情況下,NAP 會嘗試在你可用的 Azure 配額內排程你的工作負載。 您也可以在節點儲存區規格內指定限制,以指定節點儲存區使用的資源上限。比如:
spec:
# Resource limits constrain the total size of the cluster.
# Limits prevent Node Auto Provisioning from creating new instances once the limit is exceeded.
limits:
cpu: "1000"
memory: 1000Gi
節點集區權重
當您定義多個節點集區時,您可以在節點集區定義中設定相對權重,以偏好工作負載預定的集區。 例如:
spec:
# Priority given to the node pool when the scheduler considers which to select.
# Higher weights indicate higher priority when comparing node pools.
# Specifying no weight is equivalent to specifying a weight of 0.
weight: 10
靜態節點池
靜態節點池允許你使用該欄位建立固定數量的節點 replicas 。 使用靜態節點池時,節點數量總是至少達到 replicas 欄位中的值,無論有無待定的 pod 壓力。 您也可以透過在 nodes 欄位中設定 limits,來設定此節點集區可擴增的節點數目上限。
apiVersion: karpenter.sh/v1
kind: NodePool
metadata:
name: static-node-pool
spec:
replicas: 5
template:
spec:
requirements:
- key: karpenter.azure.com/sku-name
operator: In
values:
- Standard_D4s_v3
- Standard_F8s_v2
- key: topology.kubernetes.io/zone
operator: In
values:
- eastus-1
- eastus-2
- eastus-3
limits:
nodes: 10 # Maximum number of nodes this node pool can scale up to
備註
當使用 limits 靜態節點池欄位時,只有 nodes: 欄位能調整。 資源無法設定。
後續步驟
如需 AKS 中節點自動布建的詳細資訊,請參閱下列文章: