Delen via


Automatische inrichting van knooppunten (preview)

Wanneer u workloads implementeert in AKS, moet u een beslissing nemen over de configuratie van de knooppuntgroep met betrekking tot de benodigde VM-grootte. Naarmate uw workloads complexer worden en verschillende CPU-, geheugen- en mogelijkheden nodig hebben om uit te voeren, wordt de overhead van het ontwerpen van uw VM-configuratie voor talloze resourceaanvragen moeilijk.

Het automatisch inrichten van knooppunten (NAP) (preview) besluit op basis van de vereisten voor in behandeling zijnde podresources de optimale VM-configuratie om deze workloads op de meest efficiënte en rendabele manier uit te voeren.

NAP is gebaseerd op het Open Source Karpenter-project en de AKS-provider is ook Open Source. NAP implementeert en configureert Karpenter automatisch op uw AKS-clusters en configureert en beheert.

Belangrijk

Automatische inrichting van knooppunten (NAP) voor AKS is momenteel in PREVIEW. Raadpleeg de Aanvullende voorwaarden voor Microsoft Azure-previews voor juridische voorwaarden die van toepassing zijn op Azure-functies die in bèta of preview zijn of die anders nog niet algemeen beschikbaar zijn.

Voordat u begint

aks-preview De CLI-extensie installeren

  1. Installeer de aks-preview CLI-extensie met behulp van de az extension add opdracht.

    az extension add --name aks-preview
    
  2. Werk de extensie bij om ervoor te zorgen dat u de nieuwste versie hebt geïnstalleerd met behulp van de az extension update opdracht.

    az extension update --name aks-preview
    

NodeAutoProvisioningPreview De functievlag registreren

  1. Registreer de NodeAutoProvisioningPreview functievlag met behulp van de az feature register opdracht.

    az feature register --namespace "Microsoft.ContainerService" --name "NodeAutoProvisioningPreview"
    

    Het duurt enkele minuten voordat de status Geregistreerd wordt weergegeven.

  2. Controleer de registratiestatus met behulp van de az feature show opdracht.

    az feature show --namespace "Microsoft.ContainerService" --name "NodeAutoProvisioningPreview"
    
  3. Wanneer de status Geregistreerd weergeeft, vernieuwt u de registratie van de Microsoft.ContainerService-resourceprovider met behulp van de az provider register opdracht.

    az provider register --namespace Microsoft.ContainerService
    

Beperkingen

  • De enige toegestane netwerkconfiguratie is Azure CNI-overlay met Powered by Cilium.
  • U kunt niet inschakelen in een cluster waarvoor automatische schaalaanpassing van clusters is ingeschakeld voor knooppuntgroepen

Niet-ondersteunde functies

  • Windows-knooppuntgroepen
  • Aangepaste configuratie toepassen op de kubelet van het knooppunt
  • IPv6-clusters
  • Service-principals

    Notitie

    U kunt een door het systeem toegewezen of door de gebruiker toegewezen beheerde identiteit gebruiken.

  • Schijfversleutelingssets
  • CustomCATrustCertificates
  • Modus Stoppen starten
  • HTTP-proxy
  • OutboundType mutatie. Alle uitgaandetypes worden ondersteund, maar u kunt deze niet wijzigen nadat u deze hebt gemaakt.
  • Privécluster (en PRIVÉ-DNS van BYO)

Automatische inrichting van knooppunten inschakelen

Automatische inrichting van knooppunten inschakelen op een nieuw cluster

  • Schakel automatische inrichting van knooppunten in op een nieuw cluster met behulp van de az aks create opdracht en ingesteld --node-provisioning-mode op Auto. U moet ook het --network-plugin instellen op azure, --network-plugin-mode op overlayen --network-dataplane op cilium.

    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
    

Automatische inrichting van knooppunten inschakelen op een bestaand cluster

  • Schakel automatische inrichting van knooppunten in op een bestaand cluster met behulp van de az aks update opdracht en ingesteld --node-provisioning-mode op Auto. U moet ook het --network-plugin instellen op azure, --network-plugin-mode op overlayen --network-dataplane op cilium.

    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
    

Knooppuntpools

Automatische inrichting van knooppunten maakt gebruik van een lijst met VM-SKU's als uitgangspunt om te bepalen welke workloads het meest geschikt zijn voor de workloads die in behandeling zijn. Als u controle hebt over de gewenste SKU in de eerste pool, kunt u specifieke SKU-families of VM-typen opgeven en de maximale hoeveelheid resources die een inrichtingsfunctie gebruikt.

Als u bijvoorbeeld specifieke VM-SKU's hebt die gereserveerde instanties zijn, wilt u deze VM's mogelijk alleen gebruiken als de begingroep.

U kunt meerdere knooppuntgroepdefinities in een cluster hebben, maar AKS implementeert een standaarddefinitie voor knooppuntgroepen die u kunt wijzigen:

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

Ondersteunde vereisten voor knooppuntinrichting

SKU-selectors met bekende labels

Selector Beschrijving Voorbeeld
karpenter.azure.com/sku-family VM-SKU-serie D, F, L etc.
karpenter.azure.com/sku-name Expliciete SKU-naam Standard_A1_v2
karpenter.azure.com/sku-version SKU-versie (zonder 'v', kan 1 gebruiken) 1 , 2
karpenter.sh/capacity-type VM-toewijzingstype (Spot/On Demand) spot of on-demand
karpenter.azure.com/sku-cpu Aantal CPU's in VM 16
karpenter.azure.com/sku-memory Geheugen in VM in MiB 131072
karpenter.azure.com/sku-gpu-name GPU-naam A100
karpenter.azure.com/sku-gpu-manufacturer GPU-fabrikant nvidia
karpenter.azure.com/sku-gpu-count AANTAL GPU's per VM 2
karpenter.azure.com/sku-networking-accelerated Of de VIRTUELE machine versneld netwerken heeft [waar, onwaar]
karpenter.azure.com/sku-storage-premium-capable Of de VM Premium IO-opslag ondersteunt [waar, onwaar]
karpenter.azure.com/sku-storage-ephemeralos-maxsize Groottelimiet voor de tijdelijke besturingssysteemschijf in Gb 92
topology.kubernetes.io/zone De beschikbaarheidszone(s) [uksouth-1,uksouth-2,uksouth-3]
kubernetes.io/os Besturingssysteem (alleen Linux tijdens preview) linux
kubernetes.io/arch CPU-architectuur (AMD64 of ARM64) [amd64, arm64]

Als u de mogelijkheden en toegestane waarden van de VM-SKU wilt weergeven, gebruikt u de vm list-skus opdracht van de Azure CLI.

az vm list-skus --resource-type virtualMachines --location <location> --query '[].name' --output table

Limieten voor knooppuntgroepen

NAP probeert standaard uw workloads te plannen binnen het Azure-quotum dat u beschikbaar hebt. U kunt ook de bovengrens opgeven voor resources die door een knooppuntgroep worden gebruikt, waarbij limieten worden opgegeven binnen de specificatie van de knooppuntgroep.

  # 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

Gewichten van knooppuntgroepen

Wanneer u meerdere knooppuntgroepen hebt gedefinieerd, is het mogelijk om een voorkeur in te stellen waar een workload moet worden gepland. Definieer het relatieve gewicht van uw knooppuntgroepdefinities.

  # 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

Updates voor Kubernetes- en knooppuntinstallatiekopieën

AKS met NAP beheert de Kubernetes-versie-upgrades en vm-besturingssysteemschijfupdates standaard voor u.

Kubernetes-upgrades

Kubernetes-upgrades voor NAP-knooppuntgroepen volgen de Kubernetes-versie van het besturingsvlak. Als u een clusterupgrade uitvoert, worden uw NAP-knooppunten automatisch bijgewerkt om dezelfde versiebeheer te volgen.

Updates van knooppuntinstallatiekopieën

Virtuele machines voor NAP-knooppuntgroepen worden standaard automatisch bijgewerkt wanneer er een nieuwe installatiekopieën beschikbaar zijn. Als u een knooppuntgroep wilt vastmaken op een bepaalde versie van de knooppuntinstallatiekopieën, kunt u de imageVersion instellen op de knooppuntklasse:

kubectl edit aksnodeclass default

Stel in de definitie van de knooppuntklasse de imageVersion in op een van de gepubliceerde releases die worden vermeld in de opmerkingen bij de AKS-release. U kunt ook de beschikbaarheid van afbeeldingen in regio's bekijken door te verwijzen naar de AKS-releasetracker

ImageVersion is het datumgedeelte van de knooppuntinstallatiekopie, omdat alleen Ubuntu 22.04 wordt ondersteund, bijvoorbeeld 'AKSVersion-2204-202311.07.0' zou '202311.07.0' zijn

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

Als u de imageVersion-specificatie verwijdert, wordt de knooppuntgroep teruggezet zodat deze wordt bijgewerkt naar de meest recente versie van de knooppuntinstallatiekopieën.

Onderbreking van knooppunt

Wanneer de workloads op uw knooppunten omlaag worden geschaald, gebruikt NAP onderbrekingsregels in de specificatie van de knooppuntgroep om te bepalen wanneer en hoe u deze knooppunten verwijdert en mogelijk uw workloads opnieuw moet plannen om efficiënter te zijn.

U kunt een knooppunt handmatig verwijderen met behulp van kubectl delete node, maar NAP kan ook bepalen wanneer uw knooppunten moeten worden geoptimaliseerd.

  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

Selectie-gebeurtenissen bewaken

Automatische inrichting van knooppunten produceert clustergebeurtenissen die kunnen worden gebruikt voor het bewaken van implementatie- en planningsbeslissingen die worden genomen. U kunt gebeurtenissen bekijken via de Kubernetes-gebeurtenissenstroom.

kubectl get events -A --field-selector source=karpenter -w