Upgrade clusteru Azure Kubernetes Service (AKS)

Součástí životního cyklu clusteru AKS je provádění pravidelných upgradů na nejnovější verzi Kubernetes. Abyste získali nejnovější funkce, je důležité použít nejnovější verze zabezpečení a upgrady. V tomto článku se dozvíte, jak zkontrolovat a použít upgrady na cluster AKS.

Upgrady verzí Kubernetes

Při upgradu podporovaného clusteru AKS nemůžete přeskočit podverze Kubernetes. Všechny upgrady musíte provést postupně podle čísla hlavní verze. Jsou například povoleny upgrady mezi verzemi 1.14.x ->1.15.x nebo 1.15.x ->1.16.x . 1.14.x ->1.16.x není povoleno. Při upgradu z nepodporované verze zpět na podporovanou verzi můžete přeskočit více verzí. Můžete například provést upgrade z nepodporované verze 1.10.x na podporovanou verzi 1.12.x , pokud je k dispozici.

Když provedete upgrade z nepodporované verze , která přeskočí dvě nebo více podverzí, upgrade nemá žádnou záruku funkčnosti a není vyloučen ze smluv o úrovni služeb a omezené záruky. Pokud je vaše verze výrazně zaplněná, doporučujeme místo toho cluster vytvořit znovu.

Než začnete

  • Pokud používáte Azure CLI, tento článek vyžaduje Azure CLI verze 2.34.1 nebo novější. Verzi zjistíte spuštěním příkazu az --version. Pokud potřebujete instalaci nebo upgrade, přečtěte si téma Instalace Azure CLI.
  • Pokud používáte Azure PowerShell, tento článek vyžaduje Azure PowerShell verze 5.9.0 nebo novější. Verzi zjistíte spuštěním příkazu Get-InstalledModule -Name Az. Pokud potřebujete provést instalaci nebo upgrade, přečtěte si téma Instalace Azure PowerShellu.
  • Provádění operací upgradu vyžaduje Microsoft.ContainerService/managedClusters/agentPools/write roli RBAC. Další informace o rolích Azure RBAC najdete v operacích poskytovatele prostředků Azure.
  • Počínaje verzí 1.30 Kubernetes a verzemi 1.27 LTS se při upgradu na verze beta rozhraní API ve výchozím nastavení zakáže.

Upozorňující

Při upgradu clusteru AKS se aktivuje kordon a vyprázdnění uzlů. Pokud máte k dispozici nízkou kvótu výpočetních prostředků, upgrade může selhat. Další informace najdete v tématu věnovaném navýšení kvót.

Kontrola dostupných upgradů clusteru AKS

Poznámka:

Pokud chcete mít přehled o opravách, vydaných verzích a aktualizacích AKS, podívejte se na sledování verzí AKS.

  • Pomocí příkazu zkontrolujte, které verze Kubernetes jsou pro váš cluster az aks get-upgrades k dispozici.

    az aks get-upgrades --resource-group myResourceGroup --name myAKSCluster --output table
    

    Následující příklad výstupu ukazuje aktuální verzi jako 1.26.6 a uvádí dostupné verze v části upgrades:

    {
      "agentPoolProfiles": null,
      "controlPlaneProfile": {
        "kubernetesVersion": "1.26.6",
        ...
        "upgrades": [
          {
            "isPreview": null,
            "kubernetesVersion": "1.27.1"
          },
          {
            "isPreview": null,
            "kubernetesVersion": "1.27.3"
          }
        ]
      },
      ...
    }
    

Řešení potíží s chybami upgradu clusteru AKS

Následující příklad výstupu znamená, appservice-kube že rozšíření není kompatibilní s vaší verzí Azure CLI (vyžaduje se minimálně verze 2.34.1):

The 'appservice-kube' extension is not compatible with this version of the CLI.
You have CLI core version 2.0.81 and this extension requires a min of 2.34.1.
Table output unavailable. Use the --query option to specify an appropriate query. Use --debug for more info.

Pokud se zobrazí tento výstup, musíte aktualizovat verzi Azure CLI. Příkaz az upgrade byl přidán ve verzi 2.11.0 a nefunguje s verzemi staršími než 2.11.0. Starší verze můžete aktualizovat přeinstalací Azure CLI, jak je popsáno v tématu Instalace Azure CLI. Pokud je vaše verze Azure CLI 2.11.0 nebo novější, spusťte az upgrade upgrade Azure CLI na nejnovější verzi.

Pokud se azure CLI aktualizuje a zobrazí se následující ukázkový výstup, znamená to, že nejsou k dispozici žádné upgrady:

ERROR: Table output unavailable. Use the --query option to specify an appropriate query. Use --debug for more info.

Pokud nejsou k dispozici žádné upgrady, vytvořte nový cluster s podporovanou verzí Kubernetes a migrujte úlohy z existujícího clusteru do nového clusteru. AKS nepodporuje upgrade clusteru na novější verzi Kubernetes, pokud az aks get-upgrades ukazuje, že nejsou k dispozici žádné upgrady.

Upgrade clusteru AKS

Během procesu upgradu clusteru provádí AKS následující operace:

  • Přidejte do clusteru, na kterém běží zadaná verze Kubernetes, nový uzel vyrovnávací paměti (nebo libovolný počet uzlů nakonfigurovaných v maximálním nárůstu).
  • Cordon a vyprázdněte jeden ze starých uzlů, abyste minimalizovali přerušení spuštěných aplikací. Pokud používáte maximální nárůst výkonu, kabelony a vyprázdní tolik uzlů najednou jako počet zadaných uzlů vyrovnávací paměti.
  • U dlouhotrvajících podů můžete nakonfigurovat vypršení časového limitu vyprázdnění uzlu, což umožňuje vlastní dobu čekání na vyřazení podů a řádné ukončení na jeden uzel. Pokud není zadáno, výchozí hodnota je 30 minut.
  • Když je starý uzel plně vyprázdněný, je zmagí, aby získal novou verzi a stane se uzlem vyrovnávací paměti pro následující uzel, který se má upgradovat.
  • Volitelně můžete nastavit dobu čekání mezi vyprázdněním uzlu a pokračováním v jeho opětovném vytvoření a přechodem na další uzel. Krátký interval umožňuje provádět další úlohy, jako je kontrola stavu aplikace z řídicího panelu Grafana během procesu upgradu. Pro proces upgradu doporučujeme krátký časový rámec, který je co možná nejblíže 0 minut. V opačném případě má vyšší doba namočení uzlu vliv na dobu, po kterou zjistíte problém. Minimální hodnota doby namočení je 0 minut, s maximálním počtem 30 minut. Pokud není zadána, výchozí hodnota je 0 minut.
  • Tento proces se opakuje, dokud nebudou upgradovány všechny uzly v clusteru.
  • Na konci procesu se odstraní poslední uzel vyrovnávací paměti a zachová se počet stávajících uzlů agenta a zůstatek zóny.

Poznámka:

Pokud není zadána žádná oprava, cluster se automaticky upgraduje na nejnovější opravu GA zadané podverze. Například nastavení --kubernetes-version pro 1.21 výsledky upgradu clusteru na 1.21.9.

Další informace najdete v tématu Podporované upgrady podverze Kubernetes v AKS.

  1. Upgradujte cluster pomocí az aks upgrade příkazu.

    az aks upgrade \
        --resource-group myResourceGroup \
        --name myAKSCluster \
        --kubernetes-version <KUBERNETES_VERSION>
    
  2. Pomocí příkazu ověřte, že upgrade proběhl úspěšně az aks show .

    az aks show --resource-group myResourceGroup --name myAKSCluster --output table
    

    Následující příklad výstupu ukazuje, že cluster teď běží 1.27.3:

    Name          Location    ResourceGroup    KubernetesVersion    ProvisioningState    Fqdn
    ------------  ----------  ---------------  -------------------  -------------------  ----------------------------------------------
    myAKSCluster  eastus      myResourceGroup  1.27.3               Succeeded            myakscluster-dns-379cbbb9.hcp.eastus.azmk8s.io
    

Nastavení kanálu automatického upgradu

V clusteru můžete nastavit kanál automatického upgradu. Další informace najdete v tématu Automatické upgrade clusteru AKS.

Přizpůsobení upgradu přepětí uzlů

Důležité

  • Nárůsty počtu uzlů vyžadují kvótu předplatného pro požadovaný maximální počet přepětí pro každou operaci upgradu. Například cluster s pěti fondy uzlů, z nichž každý má počet čtyř uzlů, má celkem 20 uzlů. Pokud má každý fond uzlů maximální hodnotu nárůstu 50 %, k dokončení upgradu se vyžaduje další výpočetní kvóta a kvóta IP adres 10 uzlů (2 uzly * 5 fondů).

  • Maximální nastavení přepětí ve fondu uzlů je trvalé. Následující upgrady Kubernetes nebo upgrady verzí uzlů budou toto nastavení používat. Maximální hodnotu přepětí pro fondy uzlů můžete kdykoli změnit. Pro fondy produkčních uzlů doporučujeme nastavení maximálního nárůstu 33 %.

  • Pokud používáte Azure CNI, ověřte, že v podsíti jsou dostupné IP adresy, aby splňovaly požadavky azure CNI na IP adresy.

AKS ve výchozím nastavení konfiguruje upgrady tak, aby přechází s jedním dalším uzlem. Výchozí hodnota jednoho pro maximální nastavení přepětí umožňuje AKS minimalizovat přerušení úloh vytvořením dalšího uzlu před cordonem/vyprázdněním existujících aplikací, aby nahradila starší verzi uzlu. Maximální hodnotu nárůstu na fond uzlů můžete přizpůsobit. Když zvýšíte maximální hodnotu nárůstu, proces upgradu se dokončí rychleji a během procesu upgradu může dojít k přerušení.

Například maximální hodnota nárůstu 100 % poskytuje nejrychlejší možný proces upgradu, ale také způsobí, že všechny uzly ve fondu uzlů budou současně vyprázdněny. Pro testovací prostředí můžete chtít použít vyšší hodnotu, například tuto hodnotu. Pro fondy produkčních uzlů doporučujeme max_surge nastavit 33 %.

AKS přijímá celočíselné hodnoty i procentuální hodnotu maximálního nárůstu. Celé číslo, například 5 , označuje pět dalších uzlů, které se mají přepět. Hodnota 50 % označuje nárůst hodnoty poloviny aktuálního počtu uzlů ve fondu. Maximální procentuální nárůst hodnot může být minimálně 1 % a maximálně 100 %. Procentuální hodnota se zaokrouhlí nahoru na nejbližší počet uzlů. Pokud je maximální hodnota nárůstu vyšší než požadovaný počet uzlů, které se mají upgradovat, použije se počet uzlů, které se mají upgradovat, pro maximální hodnotu nárůstu. Během upgradu může být maximální hodnota nárůstu minimálně 1 a maximální hodnota rovna počtu uzlů ve fondu uzlů. Můžete nastavit větší hodnoty, ale nemůžete nastavit maximální počet uzlů, které se používají k maximálnímu nárůstu kapacity, než je počet uzlů ve fondu v době upgradu.

Nastavení maximální hodnoty přepětí

  • Nastavte maximální hodnoty přepětí pro nové nebo existující fondy uzlů pomocí az aks nodepool add příkazu nebo az aks nodepool update příkazu.

    # Set max surge for a new node pool
    az aks nodepool add -n mynodepool -g MyResourceGroup --cluster-name MyManagedCluster --max-surge 33%
    
    # Update max surge for an existing node pool 
    az aks nodepool update -n mynodepool -g MyResourceGroup --cluster-name MyManagedCluster --max-surge 5
    

Nastavení hodnoty časového limitu vyprázdnění uzlu

V některých případech můžete mít na určitém podu dlouho spuštěnou úlohu a během běhu ji nejde převést na jiný uzel, například stavovou úlohu náročnou na paměť, která se musí dokončit. V těchto případech můžete nakonfigurovat časový limit vyprázdnění uzlu, který AKS bude respektovat v pracovním postupu upgradu. Pokud není zadána hodnota časového limitu pro vyprázdnění uzlu, výchozí hodnota je 30 minut. Pokud hodnota časového limitu vyprázdnění uplynula a pody jsou stále spuštěné, operace upgradu se zastaví. Jakákoli následná operace PUT obnoví zastavený upgrade.

  • Pomocí příkazu nebo az aks nodepool update příkazu nastavte časový limit vyprázdnění uzlu pro nové nebo existující fondy az aks nodepool add uzlů.

    # Set drain timeout for a new node pool
    az aks nodepool add -n mynodepool -g MyResourceGroup --cluster-name MyManagedCluster  --drain-timeout 100
    
    # Update drain timeout for an existing node pool
    az aks nodepool update -n mynodepool -g MyResourceGroup --cluster-name MyManagedCluster --drain-timeout 45
    

Nastavení hodnoty doby namočení uzlu

Pokud chcete umožnit dobu čekání mezi vyprázdněním uzlu a pokračováním jeho opětovného vytvoření a přechodem na další uzel, můžete nastavit dobu namočení na hodnotu mezi 0 a 30 minut. Pokud není zadána žádná hodnota doby namočení uzlu, výchozí hodnota je 0 minut.

  • Nastavte dobu namočení uzlu pro nové nebo existující fondy uzlů pomocí az aks nodepool addpříkazu , az aks nodepool updatenebo az aks nodepool upgrade příkazu.

    # Set node soak time for a new node pool
    az aks nodepool add -n MyNodePool -g MyResourceGroup --cluster-name MyManagedCluster --node-soak-duration 10
    
    # Update node soak time for an existing node pool
    az aks nodepool update -n MyNodePool -g MyResourceGroup --cluster-name MyManagedCluster --max-surge 33% --node-soak-duration 5
    
    # Set node soak time when upgrading an existing node pool
    az aks nodepool upgrade -n MyNodePool -g MyResourceGroup --cluster-name MyManagedCluster --max-surge 33% --node-soak-duration 20
    

Zobrazení událostí upgradu

  • Zobrazte události upgradu pomocí kubectl get events příkazu.

    kubectl get events 
    

    Následující příklad výstupu ukazuje některé z výše uvedených událostí během upgradu:

    ...
    default 2m1s Normal Drain node/aks-nodepool1-96663640-vmss000001 Draining node: [aks-nodepool1-96663640-vmss000001]
    ...
    default 1m45s Normal Upgrade node/aks-nodepool1-96663640-vmss000001   Soak duration 5m0s after draining node: aks-nodepool1-96663640-vmss000001
    ...
    default 9m22s Normal Surge node/aks-nodepool1-96663640-vmss000002 Created a surge node [aks-nodepool1-96663640-vmss000002 nodepool1] for agentpool nodepool1
    ...
    

Další kroky

Informace o konfiguraci automatických upgradů najdete v tématu Konfigurace automatických upgradů pro cluster AKS.

Podrobné informace o osvědčených postupech upgradu a dalších aspektech najdete v pokynech k opravám a upgradu AKS.