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.21
1.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.
Upgradujte cluster pomocí
az aks upgrade
příkazu .az aks upgrade \ --resource-group myResourceGroup \ --name myAKSCluster \ --kubernetes-version KUBERNETES_VERSION
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.
Odebrání využití zastaralých rozhraní API (doporučeno)
V Azure Portal přejděte na stránku přehledu clusteru a vyberte Diagnostikovat a řešit problémy.
Přejděte do kategorie Vytvoření, upgrade, odstranění a škálování a vyberte Vyřazení rozhraní API Kubernetes.
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.
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-upgrade
upgrade-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í, nebomaxUnavailable
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: