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. - Od verze 1.30 Kubernetes a verze 1.27 LTS budou při upgradu na beta rozhraní API ve výchozím nastavení zakázaná.
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. Minimální povolená hodnota časového limitu je 5 minut. Maximální limit pro vypršení časového limitu vyprázdnění je 24 hodin.
- 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.28
výsledky upgradu clusteru na 1.28.9
.
Další informace najdete v tématu Podporované upgrady podverze Kubernetes v AKS.
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ď 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 neboaz aks nodepool update
příkazu.# Set max surge for a new node pool az aks nodepool add --name mynodepool --resource-group MyResourceGroup --cluster-name MyManagedCluster --max-surge 33% # Update max surge for an existing node pool az aks nodepool update --name mynodepool --resource-group 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. Minimální povolená hodnota časového limitu vyprázdnění je 5 minut a maximální limit časového limitu vyprázdnění je 24 hodin.
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. Doporučuje se také, aby dlouho běžící pody nakonfigurovali [terminationGracePeriodSeconds
][https://kubernetes.io/docs/concepts/containers/container-lifecycle-hooks/].
Pomocí příkazu nebo
az aks nodepool update
příkazu nastavte časový limit vyprázdnění uzlu pro nové nebo existující fondyaz aks nodepool add
uzlů.# Set drain timeout for a new node pool az aks nodepool add --name mynodepool --resource-group MyResourceGroup --cluster-name MyManagedCluster --drain-timeout 100 # Update drain timeout for an existing node pool az aks nodepool update --name mynodepool --resource-group 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 add
příkazu ,az aks nodepool update
neboaz aks nodepool upgrade
příkazu.# Set node soak time for a new node pool az aks nodepool add --name MyNodePool --resource-group MyResourceGroup --cluster-name MyManagedCluster --node-soak-duration 10 # Update node soak time for an existing node pool az aks nodepool update --name MyNodePool --resource-group 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 --name MyNodePool --resource-group 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.
Azure Kubernetes Service