Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
In diesem Artikel wird erläutert, wie Sie Knotenpools für die automatische Bereitstellung (Node Auto-Provisioning, NAP) in Azure Kubernetes Service (AKS) konfigurieren, einschließlich SKU-Selektoren, Ressourcenbeschränkungen und Prioritätsgewichtungen. Außerdem finden Sie Beispiele, die Ihnen bei den ersten Schritten helfen.
Übersicht über Knotenpools in NAP
NAP verwendet SKU-Anforderungen für virtuelle Computer (VM), um die besten virtuellen Computer für ausstehende Workloads zu entscheiden. Sie können Folgendes konfigurieren:
- SKU-Familien und bestimmte Instanztypen.
- Ressourcenlimits und Prioritäten.
- Spot- oder On-Demand-Instanzen.
- Anforderungen an Architektur und Funktionen.
Die Ressource NodePool legt Einschränkungen für die Knoten fest, die NAP erstellt, und die Pods, die auf diesen Knoten ausgeführt werden. Wenn Sie NAP zum ersten Mal installieren, wird eine Standardeinstellung NodePoolerstellt. Sie können diesen Knotenpool ändern oder zusätzliche Knotenpools für Ihre Workloadanforderungen erstellen.
Wichtige Verhaltensweisen von NodePools in NAP
Beachten Sie bei der Konfiguration NodePools für NAP die folgenden Verhaltensweisen:
- NAP erfordert mindestens ein
NodePool, um zu funktionieren. - NAP wertet jede konfigurierte
NodePoolaus. - NAP überspringt
NodePoolsmit Taints, die ein Pod nicht toleriert. - NAP wendet Startup-Taints auf bereitgestellte Knoten an, erfordert jedoch keine Podtoleranz.
- NAP funktioniert am besten mit sich gegenseitig ausschließenden
NodePools. Wenn mehrereNodePoolsübereinstimmen, wird die mit der höchsten Gewichtung verwendet.
Überprüfen der Standardkonfiguration des Knotenpools
Die Konfiguration des standardmäßigen Karpenter-NodePool namens default, erstellt durch NAP, sieht wie folgt aus:
apiVersion: karpenter.sh/v1
kind: NodePool
metadata:
name: default
spec:
disruption:
consolidationPolicy: WhenEmptyOrUnderutilized
expireAfter: Never
template:
spec:
nodeClassRef:
name: default
# 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
Außerdem wird ein system-surge Knotenpool erstellt, der dazu beiträgt, Systempoolknoten automatisch zu skalieren.
Steuern der Konfiguration des Standardknotenpools während der Clustererstellung
Wenn Sie einen neuen AKS-Cluster erstellen, der mit NAP mithilfe der Azure CLI aktiviert ist, können Sie das --node-provisioning-default-pools Flag einschließen, um die Konfiguration des Standard-NAP NodePoolzu steuern.
Das --node-provisioning-default-pools Flag steuert die Standard-NAP-Konfiguration NodePool und akzeptiert die folgenden Werte:
-
Auto(Standard): Erstellt zwei StandardNodePoolsfür die sofortige Verwendung. -
None: ErstelltNodePoolsnicht. Sie müssen Ihre eigenen definieren.
Warnung
Wechseln von Auto zu None: Wenn Sie die Einstellung von Auto zu None einem vorhandenen Cluster ändern, werden die Standardeinstellungen NodePools nicht automatisch gelöscht. Sie müssen sie manuell löschen, wenn Sie sie nicht mehr benötigen.
Konfigurationsoptionen für Knotenpools
In den folgenden Abschnitten werden verschiedene Konfigurationsoptionen für NodePools NAP beschrieben, darunter bekannte Bezeichnungen und SKU-Selektoren, Knotenpoolgrenzen und Knotenpoolgewichte.
Bekannte Etiketten und SKU-Auswähler
Kubernetes definiert bekannte Bezeichnungen , die Azure implementiert. Sie können diese Bezeichnungen im spec.requirements Abschnitt der NodePool API definieren. NAP unterstützt auch Azure-spezifische Bezeichnungen für eine erweiterte Planung.
karpenter.azure.com SKU-Selektoren
In der folgenden Tabelle sind die karpenter.azure.com SKU-Selektoren aufgeführt, die Sie im spec.requirements Abschnitt Ihrer NodePool API verwenden können, um die VM-Merkmale für Ihre Knoten zu definieren.
| Selector | Description | Example |
|---|---|---|
karpenter.azure.com/sku-family |
VM-SKU-Familie | D, F, L usw. |
karpenter.azure.com/sku-name |
Expliziter SKU-Name | Standard_A1_v2 |
karpenter.azure.com/sku-version |
SKU-Version (ohne "v", kann 1 verwenden) | 1, 2 |
karpenter.sh/capacity-type |
VM-Zuordnungstyp (Spot / On-Demand) | Sofortige Zahlung |
karpenter.azure.com/sku-cpu |
Anzahl der CPUs in VM | 16 |
karpenter.azure.com/sku-memory |
Arbeitsspeicher im VM in MiB | 131072 |
kubernetes.azure.com/sku-cpu |
Anzahl der CPUs in VM | 16 |
kubernetes.azure.com/sku-memory |
Arbeitsspeicher im VM in MiB | 131072 |
karpenter.azure.com/sku-gpu-name |
GPU-Name | A100 |
karpenter.azure.com/sku-gpu-manufacturer |
GPU-Hersteller | NVIDIA |
karpenter.azure.com/sku-gpu-count |
GPU-Anzahl pro VM | 2 |
karpenter.azure.com/sku-networking-accelerated |
Gibt an, ob die VM das Netzwerk beschleunigt hat. | [wahr, falsch] |
karpenter.azure.com/sku-storage-premium-capable |
Gibt an, ob der virtuelle Computer Premium IO-Speicher unterstützt | [wahr, falsch] |
karpenter.azure.com/sku-storage-ephemeralos-maxsize |
Größenbeschränkung für den ephemeralen Betriebssystemdatenträger (OS) in Gb | 92 |
kubernetes.io Bekannte Bezeichnungen
In der folgenden Tabelle sind die kubernetes.io bekannten Labels aufgeführt, die Sie im spec.requirements-Abschnitt Ihrer NodePool API verwenden können, um Knotenmerkmale für Ihre Knoten zu definieren:
| Etikett | Description | Example |
|---|---|---|
topology.kubernetes.io/zone |
Verfügbarkeitszone(n) | [uksouth-1,uksouth-2,uksouth-3] |
kubernetes.io/os |
Betriebssystem | linux |
kubernetes.io/arch |
CPU-Architektur (AMD64 oder ARM64) | [amd64; arm64] |
Beispiele für SKU-Familien
Mit der karpenter.azure.com/sku-family Auswahl können Sie bestimmte VM-Familien ansprechen.
| Familie | Description |
|---|---|
| D-Serie | Allgemeine VMs mit ausgewogenem CPU-zu-Arbeitsspeicher-Verhältnis |
| F-Serie | Computeoptimierte VMs mit hohem CPU-zu-Arbeitsspeicher-Verhältnis |
| E-Serie | Speicheroptimierte VMs für speicherintensive Anwendungen |
| L-Serie | Speicheroptimierte VMs mit hohem Datenträgerdurchsatz |
| N-Serie | GPU-fähige VMs für rechenintensive Workloads |
Beispielkonfiguration mit SKU-Familie:
requirements:
- key: karpenter.azure.com/sku-family
operator: In
values:
- D
- F
Beispiele für SKU-Namen
Mit der karpenter.azure.com/sku-name Auswahl können Sie den genauen VM-Instanztyp angeben.
requirements:
- key: karpenter.azure.com/sku-name
operator: In
values:
- Standard_D4s_v3
- Standard_F8s_v2
Beispiele für SKU-Versionen
Der karpenter.azure.com/sku-version Selektor zielt auf bestimmte Generationen von VM-SKUs ab.
requirements:
- key: karpenter.azure.com/sku-version
operator: In
values:
- "3" # v3 generation
- "5" # v5 generation
Beispiel für verfügbarkeitszone
Mit der topology.kubernetes.io/zone Auswahl können Sie die Verfügbarkeitszonen für Ihre Knoten angeben.
requirements:
- key: topology.kubernetes.io/zone
operator: In
values:
- eastus-1
- eastus-2
Hinweis
Sie finden verfügbare Zonen für Ihre Region mithilfe des az account list-locations --output table Azure CLI-Befehls.
Architekturbeispiel
Mit der kubernetes.io/arch Auswahl können Sie die CPU-Architektur für Ihre Knoten angeben. NAP unterstützt sowohl amd64- als auch arm64-Knoten.
requirements:
- key: kubernetes.io/arch
operator: In
values:
- amd64
- arm64
Beispiel für das Betriebssystem
Mit der kubernetes.io/os Auswahl können Sie das Betriebssystem für Ihre Knoten angeben.
requirements:
- key: kubernetes.io/os
operator: In
values:
- linux
Beispiel für kapazitätstyp
Mit der karpenter.sh/capacity-type Auswahl können Sie angeben, ob Spot- oder On-Demand-Instanzen verwendet werden sollen.
Hinweis
NAP priorisiert Spotinstanzen, wenn sowohl Spot- als auch On-Demand-Instanzen angegeben werden.
requirements:
- key: karpenter.sh/capacity-type
operator: In
values:
- spot
- on-demand
Grenzwerte für Knotenpools
Standardmäßig versucht NAP, Ihre Workloads innerhalb des verfügbaren Azure-Kontingents zu planen. Sie können auch die obere Grenze von Ressourcen angeben, die ein Knotenpool verwendet, indem Sie Grenzwerte innerhalb der Knotenpoolspezifikation angeben. Zum Beispiel:
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
Gewichtung des Knotenpools
Wenn Sie mehrere Knotenpools definiert haben, können Sie festlegen, wo eine Workload geplant werden soll, indem Sie die relative Gewichtung in Ihren Knotenpooldefinitionen festlegen. Beispiel:
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
Nächste Schritte
Weitere Informationen zur automatischen Bereitstellung von Knoten in AKS finden Sie in den folgenden Artikeln: