Beim Bereitstellen von Workloads auf AKS müssen Sie eine Entscheidung über die Konfiguration des Knotenpools hinsichtlich der erforderlichen VM-Größe treffen. Da Ihre Workloads immer komplexer werden und unterschiedliche CPU-, Speicher- und Funktionsanforderungen haben, wird es schwierig, die VM-Konfiguration für zahlreiche Ressourcenanforderungen zu entwerfen.
Bei der automatischen Bereitstellung von Knoten wird auf der Grundlage der anstehenden Pod-Ressourcenanforderungen über die optimale VM-Konfiguration entschieden, um diese Workloads auf die effizienteste und kostengünstigste Weise auszuführen.
NAP basiert auf dem Open-Source-Projekt Karpenter und auch der AKS-Anbieter ist Open Source. NAP stellt Karpenter automatisch in Ihren AKS-Clustern bereit und konfiguriert und verwaltet sie.
Wichtig
Die automatische Bereitstellung von Knoten für AKS befindet sich derzeit in der VORSCHAU.
Die zusätzlichen Nutzungsbestimmungen für Microsoft Azure-Vorschauen enthalten rechtliche Bedingungen. Sie gelten für diejenigen Azure-Features, die sich in der Beta- oder Vorschauversion befinden oder aber anderweitig noch nicht zur allgemeinen Verfügbarkeit freigegeben sind.
Voraussetzungen
Sie benötigen ein Azure-Abonnement. Falls Sie über kein Azure-Abonnement verfügen, können Sie ein kostenloses Konto erstellen.
Installieren Sie die aks-preview-Erweiterung für die Befehlszeilenschnittstelle
Installieren Sie die CLI-Erweiterung aks-preview mit dem Befehl az extension add.
az extension add --name aks-preview
Aktualisieren Sie die Erweiterung mit dem Befehl az extension update, um sicherzustellen, dass Sie die neueste Version installiert haben.
az extension update --name aks-preview
Registrieren des NodeAutoProvisioningPreview-Featureflags
Registrieren Sie das Featureflag NodeAutoProvisioningPreview mithilfe des Befehls az feature register.
az feature register --namespace "Microsoft.ContainerService" --name "NodeAutoProvisioningPreview"
Es dauert einige Minuten, bis der Status Registered (Registriert) angezeigt wird.
Überprüfen Sie den Registrierungsstatus mithilfe des Befehls az feature show.
az feature show --namespace "Microsoft.ContainerService" --name "NodeAutoProvisioningPreview"
Wenn der Zustand Registered (Registriert) lautet, aktualisieren Sie die Registrierung des Ressourcenanbieters Microsoft.ContainerService mithilfe des Befehls az provider register.
az provider register --namespace Microsoft.ContainerService
Aktivieren Sie die automatische Bereitstellung von Knoten für einen neuen Cluster mithilfe des Befehls az aks create, und legen Sie --node-provisioning-mode auf Auto fest. Außerdem müssen Sie --network-plugin auf azure, --network-plugin-mode auf overlay und --network-dataplane auf cilium festlegen.
az aks create \
--name $CLUSTER_NAME \
--resource-group $RESOURCE_GROUP_NAME \
--node-provisioning-mode Auto \
--network-plugin azure \
--network-plugin-mode overlay \
--network-dataplane cilium \
--generate-ssh-keys
Aktivieren Sie die automatische Bereitstellung von Knoten für einen neuen Cluster mithilfe des Befehls az deployment group create, und geben Sie den Parameter --template-file mit dem Pfad zur Azure Resource Manager (ARM)-Vorlagendatei an.
az deployment group create --resource-group $RESOURCE_GROUP_NAME --template-file ./nap.json
Die Datei nap.json sollte die folgende ARM-Vorlage enthalten:
Aktivieren der automatischen Bereitstellung von Knoten für einen vorhandenen Cluster
Aktivieren Sie die automatische Bereitstellung von Knoten für einen vorhandenen Cluster mithilfe des Befehls az aks update, und legen Sie --node-provisioning-mode auf Auto fest. Außerdem müssen Sie --network-plugin auf azure, --network-plugin-mode auf overlay und --network-dataplane auf cilium festlegen.
az aks update --name $CLUSTER_NAME --resource-group $RESOURCE_GROUP_NAME --node-provisioning-mode Auto --network-plugin azure --network-plugin-mode overlay --network-dataplane cilium
Knotenpools
Die automatische Bereitstellung von Knoten verwendet eine Liste von VM-SKUs als Ausgangspunkt, um zu entscheiden, welche für die Workloads am besten geeignet ist, die sich in einem ausstehenden Zustand befinden. Wenn Sie steuern können, welche SKU Sie im anfänglichen Pool benötigen, können Sie bestimmte SKU-Familien oder VM-Typen und die maximale Menge an Ressourcen angeben, die von einem Anbieter verwendet werden.
Wenn Sie über bestimmte VM-SKUs verfügen, die reservierte Instanzen sind, können Sie diese VM nur als Startpool verwenden.
Sie können mehrere Knotenpooldefinitionen in einem Cluster haben, aber AKS stellt eine Standard-Knotenpooldefinition bereit, die Sie ändern können:
apiVersion: karpenter.sh/v1beta1
kind: NodePool
metadata:
name: default
spec:
disruption:
consolidationPolicy: WhenUnderutilized
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
Unterstützte Anforderungen für die Bereitstellung von Knoten
SKU-Selektoren mit bekannten Bezeichnungen
Auswahl
Beschreibung
Beispiel
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)
Spot oder On-Demand
karpenter.azure.com/sku-cpu
Anzahl der CPUs in VM
16
karpenter.azure.com/sku-memory
Arbeitsspeicher in 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
[true, false]
karpenter.azure.com/sku-storage-premium-capable
Gibt an, ob der VM Premium IO-Speicher unterstützt
Größenbeschränkung für den kurzlebigen Betriebssystemdatenträger in Gb
92
topology.kubernetes.io/zone
Die Verfügbarkeitszone(n)
[uksouth-1,uksouth-2,uksouth-3]
kubernetes.io/os
Betriebssystem (Nur Linux während der Vorschau)
linux
kubernetes.io/arch
CPU-Architektur (AMD64 oder ARM64)
[amd64, arm64]
Verwenden Sie den vm list-skus-Befehl aus der Azure CLI, um die VM-SKU-Funktionen und zulässigen Werte auflisten zu können.
az vm list-skus --resource-type virtualMachines --location <location> --query '[].name' --output table
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 von einem Nodepool verwendet werden, wobei Grenzwerte innerhalb der Knotenpoolspezifikation angegeben werden.
# Resource limits constrain the total size of the cluster.
# Limits prevent Karpenter 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. Definieren Sie die relative Gewichtung ihrer Knotenpooldefinitionen.
# 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
Kubernetes- und Knotenimageupdates
AKS mit NAP verwaltet standardmäßig die Kubernetes-Versionsupgrades und VM-Betriebssystem-Datenträgerupdates für Sie.
Kubernetes-Upgrades
Kubernetes-Upgrades für NAP-Knotenpools folgen der Kubernetes-Version der Steuerungsebene. Wenn Sie ein Clusterupgrade durchführen, werden Ihre NAP-Knoten automatisch aktualisiert, um derselben Versionsverwaltung zu folgen.
Aktualisierungen von Knotenbildern
Standardmäßig werden virtuelle NAP-Knotenpool-VM automatisch aktualisiert, wenn ein neues Bild verfügbar ist. Wenn Sie einen Knotenpool an eine bestimmte Knotenimageversion anheften möchten, können Sie die imageVersion für die Knotenklasse festlegen:
kubectl edit aksnodeclass default
Legen Sie in der Knotenklassendefinition die imageVersion auf eine der veröffentlichten Versionen fest, die in den AKS-Versionshinweisen aufgeführt sind. Sie können auch die Verfügbarkeit von Bildern in Regionen anzeigen, indem Sie auf den AKS-Release-Tracker verweisen.
Die imageVersion ist der date-Anteil auf dem Knotenbild, da nur Ubuntu 22.04 unterstützt wird, zum Beispiel wäre „AKSUbuntu-2204-202311.07.0“ „202311.07.0“.
Durch das Entfernen der imageVersion-Spezifikation würde der Knotenpool so zurückgesetzt, dass er auf die neueste Version des Knotenbilds aktualisiert wird.
Knotenunterbrechung
Wenn die Workloads auf Ihren Knoten herunterskalieren, verwendet NAP Unterbrechungsregeln in der Knotenpoolspezifikation, um zu entscheiden, wann und wie diese Knoten entfernt und ihre Workloads möglicherweise effizienter geplant werden.
Sie können einen Knoten manuell mithilfe von kubectl delete node entfernen, aber NAP kann auch steuern, wann es Ihre Knoten optimieren soll.
disruption:
# Describes which types of Nodes NAP should consider for consolidation
consolidationPolicy: WhenUnderutilized | WhenEmpty
# 'WhenUnderutilized', NAP will consider all nodes for consolidation and attempt to remove or replace Nodes when it discovers that the Node is underutilized and could be changed to reduce cost
# `WhenEmpty`, NAP will only consider nodes for consolidation that contain no workload pods
# The amount of time NAP should wait after discovering a consolidation decision
# This value can currently only be set when the consolidationPolicy is 'WhenEmpty'
# You can choose to disable consolidation entirely by setting the string value 'Never'
consolidateAfter: 30s
Überwachen von Auswahlereignissen
Die automatische Bereitstellung von Knoten erzeugt Clusterereignisse, mit denen Bereitstellungs- und Planungsentscheidungen überwacht werden können. Sie können Ereignisse über den Kubernetes-Ereignisdatenstrom anzeigen.
kubectl get events -A --field-selector source=karpenter -w
Zusammenarbeit auf GitHub
Die Quelle für diesen Inhalt finden Sie auf GitHub, wo Sie auch Issues und Pull Requests erstellen und überprüfen können. Weitere Informationen finden Sie in unserem Leitfaden für Mitwirkende.
Feedback zu Azure Kubernetes Service
Azure Kubernetes Service ist ein Open Source-Projekt. Wählen Sie einen Link aus, um Feedback zu geben:
In diesem Modul erfahren Sie mehr über die wichtigsten Kubernetes-Infrastrukturkomponenten, einschließlich Steuerungsebenenknoten, Knotenpools und Workloadressourcen wie Pods, Bereitstellungen und Sets.
In diesem Artikel erfahren Sie, wie Sie die Autoskalierung für Cluster verwenden, um zur Erfüllung der Anwendungsanforderungen Ihre AKS-Workloads (Azure Kubernetes Service) zu skalieren.