Automatische Bereitstellung von Knoten (Vorschau)
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.
- Die Azure CLI muss installiert sein.
- Installieren Sie die Azure CLI-Erweiterung
aks-preview
. Mindestversion 0.5.170. - Registrieren Sie das NodeAutoProvisioningPreviewfeature-Flag.
Installieren Sie die aks-preview
-Erweiterung für die Befehlszeilenschnittstelle
Installieren Sie die CLI-Erweiterung
aks-preview
mit dem Befehlaz 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 Befehlsaz 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
Begrenzungen
- Die einzige zulässige Netzwerkkonfiguration ist Azure CNI Overlay mit Powered by Cilium.
- Sie können die Aktivierung nicht in einem Cluster vornehmen, in dem die automatische Clusterskalierung für Knotenpools aktiviert ist.
Nicht unterstützte Funktionen
- Windows-Knotenpools
- Anwenden von benutzerdefinierten Konfigurationen auf Knoten-Kubelets
- IPv6-Cluster
- Dienstprinzipale
Hinweis
Sie können entweder eine system- oder benutzerseitig zugewiesene verwaltete Identität verwenden.
- Datenträgerverschlüsselungssätze
- CustomCATrustCertificates
- Starten/Beenden
- HTTP-Proxy
- OutboundType-Anpassungen. Alle OutboundTypes werden unterstützt. Sie können sie jedoch nach der Erstellung nicht mehr ändern.
Automatische Bereitstellung von Knoten aktivieren
Aktivieren der automatischen Bereitstellung von Knoten für einen neuen Cluster
Aktivieren Sie die automatische Bereitstellung von Knoten für einen neuen Cluster mithilfe des Befehls
az aks create
, und legen Sie--node-provisioning-mode
aufAuto
fest. Außerdem müssen Sie--network-plugin
aufazure
,--network-plugin-mode
aufoverlay
und--network-dataplane
aufcilium
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 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
aufAuto
fest. Außerdem müssen Sie--network-plugin
aufazure
,--network-plugin-mode
aufoverlay
und--network-dataplane
aufcilium
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 | [true, false] |
karpenter.azure.com/sku-storage-ephemeralos-maxsize | 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“.
apiVersion: karpenter.azure.com/v1alpha2
kind: AKSNodeClass
metadata:
annotations:
kubernetes.io/description: General purpose AKSNodeClass for running Ubuntu2204
nodes
meta.helm.sh/release-name: aks-managed-karpenter-overlay
meta.helm.sh/release-namespace: kube-system
creationTimestamp: "2023-11-16T23:59:06Z"
generation: 1
labels:
app.kubernetes.io/managed-by: Helm
helm.toolkit.fluxcd.io/name: karpenter-overlay-main-adapter-helmrelease
helm.toolkit.fluxcd.io/namespace: 6556abcb92c4ce0001202e78
name: default
resourceVersion: "1792"
uid: 929a5b07-558f-4649-b78b-eb25e9b97076
spec:
imageFamily: Ubuntu2204
imageVersion: 202311.07.0
osDiskSizeGB: 128
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
Azure Kubernetes Service