Změna velikosti fondů uzlů v Azure Kubernetes Service (AKS)

Možná budete chtít změnit velikost virtuálních počítačů tak, aby vyhovovaly rostoucímu počtu nasazení nebo aby běžely větší úlohy. Změna velikosti instancí AKS přímo není podporována při použití škálovacích sad virtuálních počítačů v AKS, jak je uvedeno v zásadách podpory pro AKS:

Uzly agenta AKS se zobrazují na webu Azure Portal jako běžné prostředky Azure IaaS. Tyto virtuální počítače se ale nasazují do vlastní skupiny prostředků Azure (obvykle mají předponu MC_*). Přímé přizpůsobení těchto uzlů nemůžete provádět pomocí rozhraní API nebo prostředků IaaS. Všechny vlastní změny, které se neprovedou přes rozhraní API AKS, se nebudou uchovávat prostřednictvím upgradu, škálování, aktualizace nebo restartování.

V tomto článku se dozvíte o doporučené metodě, jak změnit velikost fondu uzlů vytvořením nového fondu uzlů s požadovanou velikostí SKU, izolováním a vyprázdněním existujících uzlů a následným odstraněním existujícího fondu uzlů.

Důležité

Tato metoda je specifická pro clustery AKS založené na škálovacích sadách virtuálních počítačů. Při použití fondů uzlů založených na virtuálních počítačích můžete snadno aktualizovat velikosti virtuálních počítačů v existujícím fondu uzlů pomocí jednoho příkazu Azure CLI a mít ve stejném fondu uzlů několik velikostí virtuálních počítačů. Další informace najdete v dokumentaci k fondům uzlů virtuálních počítačů.

Změna velikosti místního fondu uzlů VMSS (Preview)

Důležité

Funkce AKS ve verzi Preview jsou k dispozici na bázi samoobsluhy a dobrovolného přihlášení. Ukázky jsou poskytovány "tak, jak jsou" a "dle dostupnosti" a jsou vyloučeny ze smluv o úrovni služeb a z omezené záruky. Předběžné verze AKS jsou částečně pokryty zákaznickou podporou podle možností. Proto tyto funkce nejsou určené pro produkční použití. Další informace najdete v následujících článcích podpory:

Pomocí jediného příkazu az aks nodepool update --node-vm-size <new-size>teď můžete změnit velikost virtuálního počítače (SKU) existujícího fondu uzlů založených na VMSS. Když aktivujete tuto aktualizaci, poskytovatel prostředků AKS provede postupný upgrade:

  1. Navýšení počtu nových uzlů na cílovou velikost virtuálního počítače.
  2. Propojení a vyprázdnění starých uzlů
  3. Odstraňování starých uzlů.

Tím se zabrání ručnímu vytvoření, cordonu, vyprázdnění nebo odstranění pracovního postupu popsaného ve zbývající části tohoto článku.

Jak funguje zavedení změny velikosti

Nasazení změny velikosti používá stejný mechanismus postupného upgradu jako upgrade bitové kopie uzlu a upgrade verze Kubernetes, takže respektuje následující nastavení související s upgradem, která už jsou v poolu uzlů nakonfigurována. Konkrétně platí, že změna velikosti respektuje:

  • Max surge (--max-surge): Určuje, kolik dalších uzlů s cílovou velikostí virtuálního počítače se přidá během zavádění. Vyšší hodnota mění velikost fondu rychleji, ale spotřebovává více výpočetních prostředků a kvót IP adres; nižší hodnota je pomalejší, ale méně rušivá. Výchozí hodnota AKS je 1a 33% doporučuje se pro fondy produkčních uzlů.
  • Časový limit vyprázdnění uzlu (--drain-timeout): Jak dlouho AKS čeká na vypuzení podu u každého starého uzlu, než ho vynuceně odstraní. Výchozí hodnota je 30 minut. Zkombinujte to s příslušnými PodDisruptionBudgets, aby bylo možné úlohy bezpečně odstavit.
  • Doba trvání namočení uzlu (--node-soak-duration): Jak dlouho AKS čeká, až se nový uzel stane připraveným před přechodem na další dávku. Užitečné k tomu, aby se úlohy po změně velikosti virtuálního počítače stabilizovaly před pokračováním v nasazování.

Protože změna velikosti využívá stejný proces upgradu, platí stejné předpoklady: ujistěte se, že vaše předplatné má dostatečnou kapacitu pro nahrazení cílové velikosti virtuálních počítačů a dostatek dostupných IP adres v podsíti pro navyšované uzly a že vaše PodDisruptionBudgety umožňují, aby byla najednou odsunuta alespoň jedna replika, jinak může být změna velikosti během vyprazdňování uzlu zablokována. Kompletní doporučení najdete v tématu Osvědčené postupy pro upgrady fondu uzlů AKS.

Prerequisites

Změňte velikost fondu uzlů

az aks nodepool update Pomocí příkazu s parametrem --node-vm-size změňte velikost virtuálního počítače existujícího fondu uzlů založených na VMSS:

az aks nodepool update \
    --resource-group MyResourceGroup \
    --cluster-name MyManagedCluster \
    --name nodepool1 \
    --node-vm-size Standard_D4s_v3

Ověřování a nepodporované kombinace

Poskytovatel prostředků AKS ověří změnu velikosti požadavku a blokuje nekompatibilní změny velikosti virtuálního počítače. Následující změny nejsou podporovány v rámci změny velikosti VMSS na místě:

  • Změna typu řadiče disku (například SCSI na NVMe)
  • Změna architektury procesoru (například x64 na ARM64)
  • Změna podpory důvěrných výpočetních prostředků (například povolení nebo zakázání SNP)
  • Změna generování hypervisoru (například V1 na V2)
  • Kombinace změny velikosti s upgradem verze Kubernetes nebo změnou počtu uzlů ve stejné operaci

Pokud vaše cílová velikost virtuálního počítače vyžaduje některou z výše uvedených změn, použijte namísto toho ruční postup cordon a drain popsaný v následujících částech.

Poznámka:

Místní změna velikosti vyžaduje zvýšení kapacity pro zřízení nových uzlů s cílovou velikostí virtuálního počítače před vyprázdněním starých uzlů. Pokud je fond uzlů nakonfigurován s --max-surge 0 (to znamená, že platí --max-unavailable), požadavek na změnu velikosti bude zamítnut s chybou 400 Bad Request. Chcete-li pokračovat, nastavte --max-surge při změně velikosti pomocí alespoň na 1

az aks nodepool update \
    --resource-group MyResourceGroup \
    --cluster-name MyManagedCluster \
    --name nodepool1 \
    --node-vm-size Standard_D4s_v3 \
    --max-surge 33%

a po dokončení změny velikosti volitelně obnovte původní --max-surge hodnoty a --max-unavailable hodnoty.

Vytvoření nového fondu uzlů s požadovanou skladovou jednotkou

Poznámka:

Každý cluster AKS musí obsahovat alespoň jeden fond systémových uzlů s alespoň jedním uzlem. V tomto příkladu použijeme --mode možnost System k přidání fondu systémových uzlů k nahrazení fondu systémových uzlů, u kterého chceme změnit velikost. Režim fondu uzlů můžete kdykoli aktualizovat. Fond uzlů uživatele můžete přidat také nastavením --mode na User.

Při změně velikosti nezapomeňte zvážit všechny požadavky na úlohy, jako jsou zóny dostupnosti, a odpovídajícím způsobem nakonfigurovat fond uzlů VMSS. Možná budete muset upravit následující příkaz tak, aby co nejlépe vyhovoval vašim potřebám. Úplný seznam možností konfigurace najdete na az aks nodepool add referenční stránce.

  1. Pomocí příkazu vytvořte nový fond az aks nodepool add uzlů. V tomto příkladu vytvoříme nový fond uzlů se mynodepooltřemi uzly a Standard_DS3_v2 skladovou jednotkou virtuálního počítače pro nahrazení existujícího fondu uzlů, nodepool1který má Standard_DS2_v2 skladovou položku virtuálního počítače.

    az aks nodepool add \
        --resource-group myResourceGroup \
        --cluster-name myAKSCluster \
        --name mynodepool \
        --node-count 3 \
        --node-vm-size Standard_DS3_v2 \
        --mode System \
        --no-wait
    

    Vytvoření nového fondu uzlů trvá několik minut.

  2. Pomocí příkazu kubectl get nodes zjistěte stav nového fondu uzlů.

    kubectl get nodes
    

    Výstup by měl vypadat podobně jako v následujícím příkladu výstupu, který zobrazuje nový fond mynodepool uzlů i existující fond nodepool1uzlů:

    NAME                                 STATUS   ROLES   AGE   VERSION
    aks-mynodepool-98765432-vmss000000   Ready    agent   23m   v1.21.9
    aks-mynodepool-98765432-vmss000001   Ready    agent   23m   v1.21.9
    aks-mynodepool-98765432-vmss000002   Ready    agent   23m   v1.21.9
    aks-nodepool1-12345678-vmss000000    Ready    agent   10d   v1.21.9
    aks-nodepool1-12345678-vmss000001    Ready    agent   10d   v1.21.9
    aks-nodepool1-12345678-vmss000002    Ready    agent   10d   v1.21.9
    

Vymezit existující uzly

Ohraničení označuje zadané uzly jako neplánovatelné a zabrání přidávání dalších podů do těchto uzlů.

  1. Získejte názvy uzlů, které chcete odebrat, pomocí příkazu kubectl get nodes.

    kubectl get nodes
    

    Výstup by měl vypadat podobně jako v následujícím příkladu, který znázorňuje uzly v existujícím fondu uzlů nodepool1, který chcete dát do karantény.

    NAME                                STATUS   ROLES   AGE     VERSION
    aks-nodepool1-12345678-vmss000000   Ready    agent   7d21h   v1.21.9
    aks-nodepool1-12345678-vmss000001   Ready    agent   7d21h   v1.21.9
    aks-nodepool1-12345678-vmss000002   Ready    agent   7d21h   v1.21.9
    
  2. Obstavit existující uzly pomocí příkazu kubectl cordon a určením požadovaných uzlů v seznamu odděleného mezerami. Například:

    kubectl cordon aks-nodepool1-12345678-vmss000000 aks-nodepool1-12345678-vmss000001 aks-nodepool1-12345678-vmss000002
    

    Výstup by měl vypadat podobně jako v následujícím příkladu, který ukazuje, že uzly jsou uzavřené.

    node/aks-nodepool1-12345678-vmss000000 cordoned
    node/aks-nodepool1-12345678-vmss000001 cordoned
    node/aks-nodepool1-12345678-vmss000002 cordoned
    

Vyprázdnění existujících uzlů

Důležité

Pokud chcete úspěšně vyprázdnit uzly a vyřaďte spuštěné pody, ujistěte se, že všechny soubory PDB (PodDisruptionBudget) umožňují přesunutí alespoň jedné repliky podu najednou. Jinak operace vyprázdnění nebo vyřazení selže. Pokud to chcete zkontrolovat, můžete spustit kubectl get pdb -A a ověřit ALLOWED DISRUPTIONS , jestli je aspoň 1 nebo vyšší.

Když vypustíte uzly, pody spuštěné na nich se vyřadí a znovu vytvoří na ostatních plánovatelných uzlech.

  1. Vyprázdněte existující uzly pomocí příkazu kubectl drain a příznaků --ignore-daemonsets--delete-emptydir-data, uveďte požadované uzly v seznamu odděleném mezerami. Například:

    Důležité

    K vyřazení vytvořených --delete-emptydir-data a coredns podů AKS se vyžaduje použitímetrics-server. Pokud tento příznak nepoužíváte, zobrazí se chyba. Další informace najdete v dokumentaci k nástroji emptydir.

    kubectl drain aks-nodepool1-12345678-vmss000000 aks-nodepool1-12345678-vmss000001 aks-nodepool1-12345678-vmss000002 --ignore-daemonsets --delete-emptydir-data
    
  2. Po dokončení operace vyprázdnění by všechny pody (s výjimkou podů kontrolovaných sadami démonů) měly být spuštěny v novém node poolu. Můžete to ověřit pomocí příkazu kubectl get pods.

    kubectl get pods -o wide -A
    

Řešení potíží s vyřazením podů

Při vyprázdnění uzlů může dojít k následující chybě:

Error when evicting pods/[podname] -n [namespace] (will retry after 5s): Cannot evict pod as it would violate the pod's disruption budget.

Ve výchozím nastavení má váš cluster rozpočty přerušení podu, které spravuje služba AKS (například coredns-pdb nebo konnectivity-agent) s hodnotou MinAvailable1. Pokud jsou například spuštěné dva coredns pody, může být současně přerušen pouze jeden. Zatímco se jeden z nich znovu vytváří a je nedostupný, druhý pod coredns nelze vyřadit kvůli rozpočtu na narušení činnosti podu. Tento problém se vyřeší po naplánování a spuštění počátečního coredns podu, což umožňuje správné vyřazení a opětovné vytvoření druhého podu.

Tip

Zvažte vyprázdnění uzlů jeden po druhém pro plynulejší zkušenost s vyřazováním a abyste se vyhnuli omezení. Další informace naleznete v tématu:

Odebrání existujícího fondu uzlů

Důležité

Když odstraníte fond uzlů, AKS neprovádí izolaci a vyprázdnění. Chcete-li minimalizovat přerušení plánování podů aktuálně spuštěných ve fondu uzlů, který plánujete odstranit, před odstraněním proveďte cordon a vyprázdněte všechny uzly ve fondu uzlů.

  1. Pomocí příkazu az aks nodepool delete odstraňte původní fond uzlů.

    az aks nodepool delete \
        --resource-group myResourceGroup \
        --cluster-name myAKSCluster \
        --name nodepool1
    
  2. Ověřte, že váš cluster AKS má pouze nový fond uzlů a že aplikace a pody běží správně, pomocí příkazu kubectl get nodes.

    kubectl get nodes
    

    Výstup by měl vypadat jako v následujícím příkladu: zobrazuje pouze nový uzlový fond mynodepool.

    NAME                                 STATUS   ROLES   AGE   VERSION
    aks-mynodepool-98765432-vmss000000   Ready    agent   63m   v1.21.9
    aks-mynodepool-98765432-vmss000001   Ready    agent   63m   v1.21.9
    aks-mynodepool-98765432-vmss000002   Ready    agent   63m   v1.21.9
    

Další kroky

Po změně velikosti fondu uzlů pomocí cordonování a vyprázdnění se dozvíte více o používání více uzlových fondů.