Automatické zřizování uzlů (Preview)

Při nasazování úloh do AKS musíte rozhodnout o konfiguraci fondu uzlů v souvislosti s požadovanou velikostí virtuálního počítače. S tím, jak jsou vaše úlohy složitější a vyžadují různé možnosti procesoru, paměti a funkcí, je náročné navrhnout konfiguraci virtuálního počítače pro řadu požadavků na prostředky.

Automatické zřizování uzlů (NAP) (Preview) se rozhoduje na základě požadavků na nevyřízené prostředky podu, optimální konfigurace virtuálního počítače pro spouštění těchto úloh nejefektivnějším a nákladově efektivním způsobem.

Architektura NAP je založená na projektu Open Source Karpenter a poskytovatel AKS je také Open Source. Architektura NAP automaticky nasadí a nakonfiguruje a spravuje Karpenter v clusterech AKS.

Důležité

Automatické zřizování uzlů (NAP) pro AKS je aktuálně ve verzi PREVIEW. Právní podmínky, které platí pro funkce Azure, které jsou ve verzi beta, verzi Preview nebo které zatím nejsou veřejně dostupné, najdete v Dodatečných podmínkách použití pro Microsoft Azure verze Preview.

Než začnete

Instalace rozšíření rozhraní příkazového aks-preview řádku

  1. Nainstalujte rozšíření rozhraní příkazového aks-preview az extension add řádku pomocí příkazu.

    az extension add --name aks-preview
    
  2. Pomocí příkazu aktualizujte rozšíření, abyste měli nainstalovanou az extension update nejnovější verzi.

    az extension update --name aks-preview
    

Registrace příznaku NodeAutoProvisioningPreview funkce

  1. NodeAutoProvisioningPreview Pomocí příkazu zaregistrujte příznak az feature register funkce.

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

    Zobrazení stavu Zaregistrované trvá několik minut.

  2. Pomocí příkazu ověřte stav az feature show registrace.

    az feature show --namespace "Microsoft.ContainerService" --name "NodeAutoProvisioningPreview"
    
  3. Jakmile se stav projeví jako zaregistrovaný, aktualizujte registraci poskytovatele prostředků Microsoft.ContainerService pomocí az provider register příkazu.

    az provider register --namespace Microsoft.ContainerService
    

Omezení

  • Jedinou povolenou konfigurací sítě je překrytí Azure CNI s technologií Cilium.
  • V clusteru, kde fondy uzlů mají povolené automatické škálování clusteru, nejde povolit

Nepodporované funkce

  • Fondy uzlů Windows
  • Použití vlastní konfigurace na kubelet uzlu
  • Clustery IPv6
  • Instanční objekty

    Poznámka:

    Můžete použít spravovanou identitu přiřazenou systémem nebo spravovanou identitu přiřazenou uživatelem.

  • Sady šifrování disků
  • CustomCATrustCertificates
  • Spuštění režimu zastavení
  • Proxy server HTTP
  • OutboundType mut. Podporují se všechny typy odchozích přenosů, ale po vytvoření je nemůžete změnit.

Povolení automatického zřizování uzlů

Povolení automatického zřizování uzlů v novém clusteru

  • Povolte automatické zřizování uzlů v novém clusteru pomocí az aks create příkazu a nastavte --node-provisioning-mode na Auto. Musíte také nastavit --network-plugin , na azureoverlay--network-plugin-mode , a --network-dataplane na .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
    

Povolení automatického zřízení uzlu v existujícím clusteru

  • Povolte automatické zřizování uzlů v existujícím clusteru pomocí az aks update příkazu a nastavte --node-provisioning-mode na Auto. Musíte také nastavit --network-plugin , na azureoverlay--network-plugin-mode , a --network-dataplane na .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
    

Fondy uzlů

Automatické zřizování uzlu používá jako výchozí bod seznam skladových položek virtuálních počítačů k určení, která je nejvhodnější pro úlohy, které jsou ve stavu čekání na vyřízení. Když budete mít kontrolu nad požadovanou skladovou jednotkou v počátečním fondu, můžete určit konkrétní rodiny skladových položek nebo typy virtuálních počítačů a maximální množství prostředků, které zřizovací nástroj používá.

Pokud máte konkrétní skladové položky virtuálních počítačů, které jsou rezervované instance, můžete například chtít tyto virtuální počítače používat jenom jako výchozí fond.

V clusteru můžete mít několik definic fondu uzlů, ale AKS nasadí výchozí definici fondu uzlů, kterou můžete upravit:

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

Podporované požadavky zřizovacího modulu uzlu

Selektory skladových položek s dobře známými popisky

Výběr Popis Příklad
karpenter.azure.com/sku-family Řada skladových položek virtuálního počítače D, F, L atd.
karpenter.azure.com/sku-name Explicitní název skladové položky Standard_A1_v2
karpenter.azure.com/sku-version Verze skladové položky (bez "v", může použít 1) 1 , 2
karpenter.sh/capacity-type Typ přidělování virtuálních počítačů (spotový/ na vyžádání) spot nebo on-demand
karpenter.azure.com/sku-cpu Počet procesorů ve virtuálním počítači 16
karpenter.azure.com/sku-memory Paměť ve virtuálním počítači v MiB 131072
karpenter.azure.com/sku-gpu-name Název GPU A100
karpenter.azure.com/sku-gpu-manufacturer Výrobce GPU nvidia
karpenter.azure.com/sku-gpu-count Počet GPU na virtuální počítač 2
karpenter.azure.com/sku-networking-accelerated Jestli má virtuální počítač akcelerované síťové služby [pravda, nepravda]
karpenter.azure.com/sku-storage-premium-capable Jestli virtuální počítač podporuje Úložiště vstupně-výstupních operací úrovně Premium [pravda, nepravda]
karpenter.azure.com/sku-storage-ephemeralos-maxsize Omezení velikosti dočasného disku s operačním systémem v Gb 92
topology.kubernetes.io/zone Zóny dostupnosti [uksouth-1,uksouth-2,uksouth-3]
kubernetes.io/os Operační systém (pouze v Linuxu ve verzi Preview) Linux
kubernetes.io/arch Architektura procesoru (AMD64 nebo ARM64) [amd64, arm64]

Pokud chcete vypsat možnosti skladové položky virtuálního počítače a povolené hodnoty, použijte vm list-skus příkaz z Azure CLI.

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

Omezení fondu uzlů

Architektura NAP se ve výchozím nastavení pokusí naplánovat úlohy v rámci kvóty Azure, kterou máte k dispozici. Můžete také určit horní limit prostředků, které fond uzlů používá, a určit limity v rámci specifikace fondu uzlů.

  # 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

Váhy fondu uzlů

Pokud máte definovaných více fondů uzlů, je možné nastavit předvolbu, kde má být úloha naplánována. Definujte relativní váhu definic fondu uzlů.

  # 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

Aktualizace imagí Kubernetes a uzlů

AKS s architekturou NAP spravuje upgrady verzí Kubernetes a aktualizace disků operačního systému virtuálního počítače za vás ve výchozím nastavení.

Upgrady Kubernetes

Upgrady Kubernetes pro fondy uzlů NAP se řídí verzí Kubernetes řídicí roviny. Pokud provedete upgrade clusteru, uzly NAP se aktualizují automaticky, aby dodržovaly stejnou správu verzí.

Aktualizace imagí uzlu

Ve výchozím nastavení se virtuální počítače fondu uzlů NAP automaticky aktualizují, když je k dispozici nová image. Pokud chcete připnout fond uzlů v určité verzi image uzlu, můžete nastavit imageVersion ve třídě node:

kubectl edit aksnodeclass default

V definici třídy uzlu nastavte imageVersion na jednu z publikovaných verzí uvedených v poznámkách k verzi AKS. Dostupnost imagí v oblastech můžete zobrazit také pomocí sledování verzí AKS.

ImageVersion je datová část image uzlu, protože se podporuje jenom Ubuntu 22.04, například "AKSUbuntu-2204-202311.07.0" by byl "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

Odebrání specifikace imageVersion by vrátilo fond uzlů, aby se aktualizoval na nejnovější verzi image uzlu.

Přerušení uzlu

Při vertikálním snížení kapacity úloh na uzlech používá architektura NAP pravidla přerušení ve specifikaci fondu uzlů k rozhodnutí, kdy a jak tyto uzly odebrat, a potenciálně přeplánovat úlohy tak, aby byly efektivnější.

Uzel můžete odebrat ručně pomocí kubectl delete node, ale NAP může také řídit, kdy má optimalizovat uzly.

  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

Monitorování událostí výběru

Automatické zřizování uzlu vytváří události clusteru, které je možné použít k monitorování rozhodnutí o nasazení a plánování. Události můžete zobrazit prostřednictvím streamu událostí Kubernetes.

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