Freigeben über


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

Installieren Sie die aks-preview-Erweiterung für die Befehlszeilenschnittstelle

  1. Installieren Sie die CLI-Erweiterung aks-preview mit dem Befehl az extension add.

    az extension add --name aks-preview
    
  2. 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

  1. 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.

  2. Überprüfen Sie den Registrierungsstatus mithilfe des Befehls az feature show.

    az feature show --namespace "Microsoft.ContainerService" --name "NodeAutoProvisioningPreview"
    
  3. 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 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 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 [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