Sdílet prostřednictvím


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

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) (náhled) využívá nevyřízené požadavky na prostředky podů k určení optimální konfigurace virtuálního počítače pro spuštění těchto úloh nejefektivnějším a nákladově nejefektivnějším způsobem.

Architektura NAP je založená na opensourcovém projektu Karpenter a poskytovatel AKS je také open source. NAP automaticky nasadí, nakonfiguruje a spravuje Karpenter v klastrech AKS.

Důležité

Automatické zřizování uzlů (NAP) pro AKS je aktuálně ve verzi PREVIEW. Podívejte se na doplňkové podmínky užívání služby Microsoft Azure Preview pro právní podmínky, které se vztahují na funkce Azure, jež jsou ve verzi beta, Preview nebo jinak ještě nejsou obecně dostupné.

Než začnete

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

  1. Nainstalujte CLI rozšíření pomocí příkazu aks-preview.

    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
    

Zaregistruj příznak funkce NodeAutoProvisioningPreview

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

    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í

  • Nemůžete povolit v clusteru, kde mají fondy uzlů povolené automatické škálování clusteru.

Nepodporované funkce

  • Pooly uzlů Windows
  • Použití vlastní konfigurace na kubelet uzlu
  • Klastry 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ů
  • Vlastní CATrustCertifikáty
  • Režim Start Stop
  • Proxy server HTTP
  • OutboundType mutace. Všechny typy odchozích dat jsou podporovány, avšak po vytvoření je nemůžete změnit.
  • Privátní cluster (a používání vlastního privátního DNS)

Konfigurace sítě

Doporučené konfigurace sítě pro clustery s povoleným automatickým zřizováním uzlů jsou následující:

Náš doporučený mechanismus pravidel sítě je Cilium.

V současné době se nepodporují následující konfigurace sítí:

  • Zásady sítě Calico
  • Dynamické přidělování IP adres
  • Statické přidělování bloků CIDR

Povolit automatické zřizování uzlů

Povolení automatického provisioningu 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 azure, --network-plugin-mode na overlay 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
    

Povolit automatické 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 azure, --network-plugin-mode na overlay 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
    

Skupiny uzlů

Automatické zřizování uzlů používá jako výchozí bod seznam skladových položek virtuálních počítačů k určení, která skladová položka je nejvhodnější pro úlohy, které jsou ve stavu čekání na vyřízení. Pokud máte kontrolu nad produktovou jednotkou, kterou chcete v počáteční skupině, můžete určit konkrétní rodiny produktových jednotek nebo typy virtuálních počítačů a maximální počet prostředků, které zřizovací nástroj používá. Můžete také odkazovat na různé specifikace v souboru fondu uzlů, například určení spotových instancí nebo instancí na vyžádání, více architektur a další.

Pokud máte konkrétní velikosti virtuálních počítačů, které jsou instance s rezervací, můžete chtít používat jako výchozí fond jenom tyto virtuální počítače.

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/v1
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

Požadavky na poskytovatele uzlů

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

Selektor 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 SKU (bez 'v', použijte 1) 1 , 2
karpenter.sh/capacity-type Typ přidělování virtuálních počítačů (spotový/ na vyžádání) okamžitý nebo na vyžádání
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 (úložiště prémiové schopnosti) Jestli virtuální počítač podporuje úložiště Premium IO [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) [architektura amd64, arm64]

Pokud chcete zobrazit seznam možností skladové položky virtuálního počítače a povolených hodnot, použijte vm list-skus příkaz Azure CLI.

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

Omezení fondu uzlů

Ve výchozím nastavení se automatické zřizování uzlů pokouší 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 skupiny uzlů

Pokud máte definovány více poolů uzlů, je možné upřednostnit místo, 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 automatickým zřizováním uzlů 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í.

Aktualizace Kubernetes

Upgrady Kubernetes pro uzly automatického zřizování se řídí verzí Kubernetes řídicího panelu. Pokud provedete upgrade clusteru, uzly automatického zřizování se automaticky aktualizují, aby dodržovaly stejné verzování.

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 pool uzlů k určité verzi obrazu uzlu, můžete nastavit imageVersion ve třídě uzlu:

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. Také můžete zobrazit dostupnost obrazů v oblastech pomocí sledovače verzí AKS.

ImageVersion je část názvu image uzlu, která obsahuje datum, protože se podporuje pouze Ubuntu 22.04, například "AKSUbuntu-2204-202311.07.0" by bylo "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 verze obrazu by způsobilo, že fond uzlů bude aktualizován na nejnovější verzi obrazu uzlu.

Důležité

Po aktualizaci klíče SSH AKS automaticky neaktualizuje uzly. Kdykoli se můžete rozhodnout spustit [operaci aktualizace fondu uzlů][node-image-upgrade]. Operace aktualizace klíčů SSH se projeví po dokončení aktualizace image uzlu. U clusterů s povoleným automatickým zřizováním uzlů je možné aktualizaci image uzlu provést použitím nového popisku u vlastního prostředku Kubernetes NodePool.

Přerušení uzlu

Když se úlohy na uzlech škálují dolů, automatické zřizování uzlů používá pravidla přerušení ve specifikaci fondu uzlů k rozhodnutí, kdy a jak tyto uzly odebrat, a potenciálně přeplánovat úlohy, aby byly efektivnější. To se provádí především prostřednictvím konsolidace, která odstraňuje nebo nahrazuje uzly pro kontejnery podů v optimální konfiguraci. Stavové úvahy využívají ConsolidationPolicy jako například WhenUnderUtilized, WhenEmpty nebo WhenEmptyOrUnderUtilized k aktivaci konsolidace. consolidateAfter je podmínka založená na čase, která se dá nastavit tak, aby umožňovala čas vyrovnávací paměti mezi akcemi.

Uzel můžete odebrat ručně pomocí kubectl delete node, ale automatické poskytování uzlů může také řídit, kdy by měly být uzly optimalizovány na základě vašich specifikací.

  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é poskytování uzlu vytváří události clusteru, které lze 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

Zakázání automatického zřizování nodů

Automatické zřizování uzlů lze zakázat pouze tehdy, když:

  • Neexistují žádné uzly spravované architekturou NAP. Slouží kubectl get nodes -l karpenter.sh/nodepool k zobrazení uzlů spravovaných architekturou NAP.
  • Všechny existující karpenter.sh/NodePools mají nastavenou spec.limits.cpu hodnotu 0.

Postup vypnutí automatického zřizování uzlů

  1. Nastavte všechna pole karpenter.sh/NodePools spec.limits.cpu na hodnotu 0. To brání vytvoření nových uzlů, ale nenaruší aktuálně spuštěné uzly.

Poznámka:

Pokud vám nezáleží na tom, aby se zajistilo, že každý pod, který běžel na uzlu NAP, je bezpečně migrován na ne-NAP uzel, můžete přeskočit kroky 2 a 3 a místo toho použít kubectl delete node příkaz pro každý uzel spravovaný NAP.

Přeskočení kroků 2 a 3 se nedoporučuje, protože některé pody můžou být nevyřízené a nebudou respektovat soubory PDB.

Nespouštějte kubectl delete node na žádných uzlech, které nespravuje NAP.

  1. Přidejte "taint karpenter.azure.com/disable:NoSchedule" ke každému karpenter.sh/NodePool.

    apiVersion: karpenter.sh/v1
    kind: NodePool
    metadata:
      name: default
    spec:
      template:
        spec:
          ...
          taints:
            - key: karpenter.azure.com/disable,
              effect: NoSchedule
    

    Tím se spustí proces migrace úloh na uzlech spravovaných architekturou NAP na uzly bez architektury NAP, které dodržují limity souborů PDB a přerušení. Pody se budou migrovat na uzly bez architektury NAP, pokud se dají přizpůsobit. Pokud není dostatek pevně stanovené kapacity, zůstanou některé uzly spravované NAP.

  2. Zvyšte kapacitu stávajících AgentPools ManagedCluster s pevnou velikostí nebo vytvořte nové AgentPools s pevnou velikostí, aby se zatížení převzalo z uzlů spravovaných pomocí NAP. Při přidání těchto uzlů do clusteru se vyprázdní uzly spravované architekturou NAP a práce se migruje na uzly s pevným škálováním.

  3. Ověřte, že všechny uzly spravované NAP jsou odstraněny pomocí kubectl get nodes -l karpenter.sh/nodepool. Pokud stále existují NAP-spravované uzly, to pravděpodobně znamená, že clusteru došla kapacita pro pevné škálování a je potřeba více uzlů k migraci zbývajících úloh.

  4. Aktualizujte parametr režimu zřizování uzlu managedCluster na Manual.

    az aks update \
        --name $CLUSTER_NAME \
        --resource-group $RESOURCE_GROUP_NAME \
        --node-provisioning-mode Manual