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. Je důležité, abyste použili nejnovější verze zabezpečení nebo upgradovali, abyste získali nejnovější funkce. V tomto článku se dozvíte, jak vyhledat, nakonfigurovat a použít upgrady clusteru AKS.

Informace o clusterech AKS, které používají více fondů uzlů nebo uzlů Windows Serveru, najdete v tématu Upgrade fondu uzlů v AKS. Pokud chcete upgradovat konkrétní fond uzlů bez provedení upgradu clusteru Kubernetes, projděte si téma Upgrade konkrétního fondu uzlů.

Upgrady verzí Kubernetes

Při upgradu podporovaného clusteru AKS není možné přeskočit podverze Kubernetes. Všechny upgrady musíte provést postupně podle čísla hlavní verze. Jsou například povoleny upgrady mezi 1.14.x ->1.15.x nebo 1.15.x ->1.16.x , ale verze 1.14.x ->1.16.x není povolená.

Přeskočení více verzí je možné provést pouze při upgradu z nepodporované verze zpět na podporovanou verzi. Například upgrade z nepodporované verze 1.10.x –> podporovaná verze 1.15.x může být dokončena, pokud je k dispozici. Při upgradu z nepodporované verze , která přeskočí dvě nebo více podverzí, se upgrade provádí bez záruky funkčnosti a je vyloučen ze smluv o úrovni služeb a omezené záruky. Pokud je vaše verze výrazně za zastaralý, doporučujeme cluster vytvořit znovu.

Poznámka

Každá operace upgradu, ať už ručně nebo automaticky, upgraduje verzi image uzlu, pokud ještě nepoužívá nejnovější verzi. Nejnovější verze je závislá na úplné verzi AKS a je možné ji zjistit pomocí sledování verzí AKS.

Důležité

Operace upgradu může selhat, pokud jste provedli přizpůsobení uzlů agenta AKS. Další informace najdete v našich zásadách podpory.

Než začnete

  • Pokud používáte Azure CLI, musíte mít 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, musíte mít Azure PowerShell verzi 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 tématu [Operace poskytovatele prostředků Azure].

Upozornění

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

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, že cluster je možné upgradovat na verze 1.19.1 a 1.19.3:

Name     ResourceGroup    MasterVersion    Upgrades
-------  ---------------  ---------------  --------------
default  myResourceGroup  1.18.10          1.19.1, 1.19.3

Řešení potíží s chybovými zprávami při upgradu clusteru AKS

Následující příklad výstupu znamená, že appservice-kube 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 obdržíte 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 máte Azure CLI verze 2.11.0 nebo novější, zobrazí se zpráva, že je potřeba spustit upgrade az upgrade Azure CLI na nejnovější verzi.

Pokud je rozhraní příkazového řádku Azure CLI aktualizované a zobrazí se následující příklad výstupu, 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. Upgrade clusteru na novější verzi Kubernetes se nepodporuje, když az aks get-upgrades se zobrazí, že nejsou k dispozici žádné upgrady.

Upgrade clusteru AKS

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

  • Do clusteru se zadanou verzí Kubernetes přidejte nový uzel vyrovnávací paměti (nebo tolik uzlů, kolik je nakonfigurovaných při maximálním nárůstu).
  • Cordon a vyprázdněte jeden ze starých uzlů, aby se minimalizovalo přerušení spuštěných aplikací. Pokud používáte maximální přepětí, zadržuje a vyprázdní tolik uzlů ve stejnou dobu jako zadaný počet uzlů vyrovnávací paměti.
  • Když je starý uzel zcela vyprázdněný, přepíše se do image, aby získal novou verzi, a stane se uzlem vyrovnávací paměti pro následující uzel, který se má upgradovat.
  • 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 existujících uzlů agenta a zůstatek zóny.

Poznámka

Pokud není zadaná žádná oprava, cluster se automaticky upgraduje na nejnovější opravu GA zadané podverze. Pokud například nastavíte --kubernetes-version na 1.21 , cluster se upgraduje na 1.21.9.

Při upgradu pomocí podverze aliasu se podporuje pouze vyšší podverze. Například upgrade z verze na 1.20 neaktivuje upgrade na nejnovější obecně dostupnou 1.20 opravu, ale upgrade na 1.21 verzi na aktivuje upgrade na nejnovější obecně dostupnou 1.211.20.x opravu.

Důležité

Ujistěte se, že všechny PodDisruptionBudgets soubory (PDB) umožňují přesunutí alespoň jedné repliky podů najednou, jinak operace vyprázdnění/vyřazení selže. Pokud operace vyprazdňování selže, operace upgradu záměrně selže, aby se zajistilo, že nedojde k přerušení aplikací. Opravte prosím, co způsobilo zastavení operace (nesprávné soubory PDB, nedostatečná kvóta atd.) a zkuste operaci opakovat.

  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ď používá 1.19.1:

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

Zobrazení událostí upgradu

Při upgradu clusteru může na každém uzlu dojít k následujícím událostem Kubernetes:

  • Přepětí: Vytvoří přepětový uzel.
  • Vyprázdnění: Vyřaďte pody z uzlu. Každý pod má k dokončení vyřazení časový limit 30 sekund.
  • Aktualizace: Aktualizace uzlu je úspěšná nebo neúspěšná.
  • Odstranit: Odstraní přepětí uzlu.

Slouží kubectl get events k zobrazení událostí ve výchozích oborech názvů při spuštění upgradu. Příklad:

kubectl get events 

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

...
default 2m1s Normal Drain node/aks-nodepool1-96663640-vmss000001 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 %!s(MISSING)
...

Automatické zastavení upgradů clusteru při změnách způsobujících chybu rozhraní API (Preview)

Důležité

Funkce AKS Preview jsou k dispozici na základě samoobslužného souhlasu. Verze Preview se poskytují "tak, jak jsou" a "tak, jak jsou" a "tak, jak jsou k dispozici" a jsou vyloučeny ze smluv o úrovni služeb a omezené záruky. Verze Preview AKS jsou částečně pokryté zákaznickou podporou v maximálním úsilí. Z tohoto důvodu nejsou tyto funkce určeny pro produkční použití. Další informace najdete v následujících článcích podpory:

Pokud chcete zůstat v rámci podporované verze Kubernetes, obvykle musíte cluster upgradovat alespoň jednou ročně a připravit se na všechna možná přerušení. Mezi tato přerušení patří přerušení způsobená zásadními změnami rozhraní API, vyřazením a závislostmi, jako jsou Helm a CSI. Může být obtížné tato přerušení předvídat a migrovat kritické úlohy, aniž by došlo k výpadku.

AKS teď automaticky zastaví operace upgradu, které se skládají ze změny podverze, pokud se zjistí zastaralá rozhraní API. Tato funkce vás upozorní chybovou zprávou, pokud zjistí využití rozhraní API, která jsou v cílové verzi zastaralá.

Aby k zastavení došlo, musí být splněna všechna následující kritéria:

  • Operace upgradu je změna podverze Kubernetes pro řídicí rovinu clusteru.
  • Verze Kubernetes, na kterou upgradujete, je 1.26 nebo novější.
  • Pokud se provádí prostřednictvím rozhraní REST, operace upgradu používá verzi 2023-01-02-preview preview rozhraní API nebo novější.
  • Pokud se provádí prostřednictvím Azure CLI, aks-preview musí být nainstalované rozšíření rozhraní příkazového řádku 0.5.154 nebo novější.
  • K poslednímu použití zastaralých rozhraní API pro cílovou verzi, na kterou upgradujete, musí dojít do 12 hodin před provedením operace upgradu. AKS zaznamenává využití po hodinách, takže není zaručeno, že se v detekci objeví jakékoli využití zastaralých rozhraní API během jedné hodiny.
  • Dokonce i využití rozhraní API, které ve skutečnosti sleduje zastaralé prostředky, je zde popsáno. Podívejte se na sloveso pro rozlišení.

Omezení rizik při zastavených operacích upgradu

Pokud se pokusíte o upgrade a jsou splněna všechna předchozí kritéria, zobrazí se chybová zpráva podobná následující příkladu:

Bad Request({
  "code": "ValidationError",
  "message": "Control Plane upgrade is blocked due to recent usage of a Kubernetes API deprecated in the specified version. Please refer to https://kubernetes.io/docs/reference/using-api/deprecation-guide to migrate the usage. To bypass this error, set enable-force-upgrade in upgradeSettings.overrideSettings. Bypassing this error without migrating usage will result in the deprecated Kubernetes API calls failing. Usage details: 1 error occurred:\n\t* usage has been detected on API flowcontrol.apiserver.k8s.io.prioritylevelconfigurations.v1beta1, and was recently seen at: 2023-03-23 20:57:18 +0000 UTC, which will be removed in 1.26\n\n",
  "subcode": "UpgradeBlockedOnDeprecatedAPIUsage"
})

Po zobrazení chybové zprávy máte dvě možnosti, jak tento problém zmírnit. Můžete buď odebrat používání zastaralých rozhraní API (doporučeno), nebo obejít ověřování, aby se ignorovaly změny rozhraní API.

  1. V Azure Portal přejděte na stránku přehledu clusteru a vyberte Diagnostikovat a řešit problémy.

  2. Přejděte do kategorie Vytvoření, upgrade, odstranění a škálování a vyberte Vyřazení rozhraní API Kubernetes.

    Snímek obrazovky s Azure Portal zobrazující část Vyřazení vybraných rozhraní KUBERNETES API

  3. Počkejte 12 hodin od zobrazení posledního zastaralého využití rozhraní API. Zkontrolujte příkaz v zastaralém využití rozhraní API a zjistěte, jestli se jedná o watch.

  4. Zkuste upgrade clusteru zopakovat.

Můžete také zkontrolovat využití rozhraní API v minulosti tak, že povolíte Container Insights a prozkoumáte protokoly auditu kube. Zkontrolujte příkaz v zastaralém rozhraní API, abyste zjistili, jestli se jedná o případ použití watch.

Vynechání ověřování kvůli ignorování změn rozhraní API

Poznámka

Tato metoda vyžaduje, abyste použili aks-preview rozšíření Azure CLI verze 0.5.134 nebo novější. Tato metoda se nedoporučuje, protože zastaralá rozhraní API v cílové verzi Kubernetes nemusí dlouhodobě fungovat. Po dokončení upgradu doporučujeme je co nejdříve odebrat.

Pokud chcete ignorovat změny az aks update způsobující chybu rozhraní API, použijte příkaz a nastavte enable-force-upgradeupgrade-override-until vlastnost, která definuje konec okna, během kterého se ověřování vynechá. Pokud není nastavená žádná hodnota, nastaví se výchozí hodnota okna na tři dny od aktuálního času. Zadané datum a čas musí být v budoucnosti.

az aks update --name myAKSCluster --resource-group myResourceGroup --enable-force-upgrade --upgrade-override-until 2023-10-01T13:00:00Z

Poznámka

Z je označení zóny pro nulový posun UTC/GMT, označovaný také jako čas Zulu. Tento příklad nastaví konec okna na 13:00:00 GMT. Další informace najdete v článku Kombinovaná reprezentace data a času.

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

Důležité

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

Nastavení maximálního přepětí ve fondu uzlů je trvalé. Toto nastavení budou používat i další upgrady Kubernetes nebo verze uzlu. Hodnotu maximálního přepětí pro fondy uzlů můžete kdykoli změnit. Pro fondy produkčních uzlů doporučujeme nastavit maximální přepětí na 33 %.

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

Ve výchozím nastavení AKS konfiguruje upgrady tak, aby se přehouply s jedním uzlem navíc. Výchozí hodnota 1 pro nastavení maximálního přepětí umožňuje AKS minimalizovat přerušení úloh vytvořením dalšího uzlu před kordónem nebo vyprázdněním stávajících aplikací, který nahradí starší uzel s verzí. Hodnotu maximálního nárůstu je možné přizpůsobit pro fond uzlů a umožnit tak kompromis mezi rychlostí upgradu a přerušením upgradu. Když hodnotu maximálního přepětí zvýšíte, proces upgradu se dokončí rychleji. Pokud nastavíte velkou hodnotu maximálního nárůstu, může během procesu upgradu dojít k přerušení.

Například hodnota maximálního nárůstu 100 % poskytuje nejrychlejší možný proces upgradu (zdvojnásobení počtu uzlů), ale zároveň způsobí, že se současně vyprázdní všechny uzly ve fondu uzlů. Pro testovací prostředí můžete chtít použít vyšší hodnotu, například tuto. Pro fondy produkčních uzlů doporučujeme max_surge nastavení 33 %.

AKS pro maximální přepětí přijímá celočíselné hodnoty i procentuální hodnotu. Celé číslo, například 5 , označuje pět dalších uzlů, které se mají převést. Hodnota 50 % označuje hodnotu nárůstu poloviny aktuálního počtu uzlů ve fondu. Maximální procentuální hodnoty přepětí můžou být minimálně 1 % a maximum 100 %. Procentuální hodnota se zaokrouhlí nahoru na nejbližší počet uzlů. Pokud je hodnota maximálního přepětí vyšší než požadovaný počet uzlů, které se mají upgradovat, použije se pro hodnotu maximálního přepětí počet uzlů, které se mají upgradovat.

Během upgradu může být hodnota maximálního přepětí minimálně 1 a maximální hodnota rovna počtu uzlů ve fondu uzlů. Můžete nastavit větší hodnoty, ale maximální počet uzlů použitý k maximálnímu nárůstu není vyšší než počet uzlů ve fondu v době upgradu.

Nastavení hodnot maximálního přepětí

Pomocí následujících příkazů nastavte hodnoty maximálního přepětí pro nové nebo existující fondy uzlů:

# 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

Nastavit kanál automatického upgradu

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

Zvláštní aspekty pro fondy uzlů, které pokrývají více zón dostupnosti

AKS používá ve skupinách uzlů vyrovnávání zóny best effort. Během nárůstu upgradu jsou zóny pro uzly v Virtual Machine Scale Sets předem neznámé, což může během upgradu dočasně způsobit nevyváženou konfiguraci zóny. Po dokončení upgradu ale AKS přepětové uzly odstraní a zachová původní zůstatek zóny. Pokud chcete během upgradů zachovat vyvážené zóny, můžete zvýšit nárůst na několik ze tří uzlů a Virtual Machine Scale Sets vyrovnávat uzly mezi zónami dostupnosti s vyrovnáváním zón best effort.

Pokud máte řadiče pvc zálohované disky Azure LRS, budou svázané s konkrétní zónou. Obnovení se nemusí podařit okamžitě, pokud přepětí uzlu neodpovídá zóně PVC. To může způsobit výpadek aplikace, když operace upgradu dál vyprázdní uzly, ale virtuální počítače jsou vázané na zónu. Pokud chcete tento případ vyřešit a zachovat vysokou dostupnost, nakonfigurujte ve své aplikaci rozpočet pro přerušení podů , aby kubernetes během operace vyprazdňování respektoval vaše požadavky na dostupnost.

Optimalizace upgradů za účelem zvýšení výkonu a minimalizace výpadků

Kombinace časového období plánované údržby, maximálního přepětí a rozpočtu na přerušení podů může výrazně zvýšit pravděpodobnost úspěšného dokončení upgradů uzlů do konce časového období údržby a zároveň minimalizovat přerušení.

  • Časové období plánované údržby umožňuje servisním týmům naplánovat automatický upgrade během předdefinovaného časového období, obvykle období s nízkým provozem, aby se minimalizoval dopad na úlohy. Doporučuje se doba trvání okna nejméně 4 hodiny.
  • Max Surge ve fondu uzlů umožňuje vyžádat si další kvótu během procesu upgradu a současně omezuje počet uzlů vybraných pro upgrade. Vyšší maximální nárůst má za následek rychlejší proces upgradu. Jeho nastavení na 100 % se ale nedoporučuje, protože by se upgradovaly všechny uzly současně, což by mohlo způsobit přerušení spuštěných aplikací. Doporučuje se maximální kvóta nárůstu 33 % pro fondy produkčních uzlů.
  • Rozpočet přerušení podů je nastavený pro aplikace služeb a omezuje počet podů, které můžou být mimo provoz během dobrovolných přerušení, jako jsou upgrady uzlů řízené AKS. Je možné ho nakonfigurovat jako minAvailable repliky, které označují minimální počet podů aplikace, které musí být aktivní, nebo maxUnavailable replik, označující maximální počet podů aplikace, které je možné ukončit, a zajistit tak vysokou dostupnost aplikace. Projděte si doprovodné materiály ke konfiguraci rozpočtů PDB (Pod Disruption Budget). Hodnoty PDB by se měly ověřit, aby bylo možné určit nastavení, která nejlépe fungují pro vaši konkrétní službu.

Další kroky

V tomto článku se dozvíte, jak upgradovat existující cluster AKS. Další informace o nasazení a správě clusterů AKS najdete v následujících kurzech: