Sdílet prostřednictvím


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čů.

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