Správa fondů uzlů pro cluster ve službě Azure Kubernetes Service (AKS)
Ve službě Azure Kubernetes Service (AKS) jsou uzly stejné konfigurace seskupené do fondů uzlů. Tyto fondy uzlů obsahují základní virtuální počítače, na kterých běží vaše aplikace. Při vytváření clusteru AKS definujete počáteční počet uzlů a jejich velikost (SKU). Vzhledem k tomu, že se požadavky aplikací mění, budete možná muset změnit nastavení ve fondech uzlů. Můžete například potřebovat škálovat počet uzlů ve fondu uzlů nebo upgradovat verzi Kubernetes fondu uzlů.
Tento článek ukazuje, jak spravovat jeden nebo více fondů uzlů v clusteru AKS.
Než začnete
- V tématu Vytvoření fondů uzlů pro cluster ve službě Azure Kubernetes Service (AKS) se dozvíte, jak vytvořit fondy uzlů pro clustery AKS.
- Potřebujete nainstalovanou a nakonfigurovanou verzi Azure CLI 2.2.0 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. - Projděte si možnosti úložiště pro aplikace ve službě Azure Kubernetes Service a naplánujte konfiguraci úložiště.
Omezení
Při vytváření a správě clusterů AKS, které podporují více fondů uzlů, platí následující omezení:
- Viz Kvóty, omezení velikosti virtuálních počítačů a dostupnost oblastí ve službě Azure Kubernetes Service (AKS).
- Systémové fondy musí obsahovat alespoň jeden uzel a fondy uzlů uživatelů můžou obsahovat nula nebo více uzlů.
- Po vytvoření nemůžete změnit velikost virtuálního počítače fondu uzlů.
- Při vytváření více fondů uzlů v době vytváření clusteru musí všechny verze Kubernetes používané fondy uzlů odpovídat sadě verzí pro řídicí rovinu. Po zřízení clusteru pomocí operací fondu uzlů můžete provádět aktualizace.
- V clusteru nebo fondu uzlů nemůžete současně spouštět operace upgradu a škálování. Pokud se je pokusíte spustit současně, zobrazí se chyba. Každý typ operace musí být u cílového prostředku dokončen před dalším požadavkem na stejný prostředek. Další informace najdete v průvodci odstraňováním potíží.
Upgrade fondu s jedním uzlem
Poznámka:
Verze image operačního systému fondu uzlů je svázaná s verzí Clusteru Kubernetes. Po upgradu clusteru získáte pouze upgrady imagí operačního systému.
V tomto příkladu upgradujeme fond uzlů mynodepool . Vzhledem k tomu, že existují dva fondy uzlů, musíme k upgradu použít az aks nodepool upgrade
příkaz.
Pomocí příkazu zkontrolujte všechny dostupné upgrady
az aks get-upgrades
.az aks get-upgrades --resource-group myResourceGroup --name myAKSCluster
Pomocí příkazu upgradujte fond
az aks nodepool upgrade
uzlů mynodepool.az aks nodepool upgrade \ --resource-group myResourceGroup \ --cluster-name myAKSCluster \ --name mynodepool \ --kubernetes-version KUBERNETES_VERSION \ --no-wait
Pomocí příkazu vypíšete stav fondů
az aks nodepool list
uzlů.az aks nodepool list --resource-group myResourceGroup --cluster-name myAKSCluster
Následující příklad výstupu ukazuje , že mynodepool je ve stavu upgrade :
[ { ... "count": 3, ... "name": "mynodepool", "orchestratorVersion": "KUBERNETES_VERSION", ... "provisioningState": "Upgrading", ... "vmSize": "Standard_DS2_v2", ... }, { ... "count": 2, ... "name": "nodepool1", "orchestratorVersion": "1.15.7", ... "provisioningState": "Succeeded", ... "vmSize": "Standard_DS2_v2", ... } ]
Upgrade uzlů na zadanou verzi trvá několik minut.
Osvědčeným postupem je upgradovat všechny fondy uzlů v clusteru AKS na stejnou verzi Kubernetes. Výchozím chováním az aks upgrade
je upgrade všech fondů uzlů společně s řídicí rovinou, aby bylo dosaženo tohoto zarovnání. Možnost upgradovat jednotlivé fondy uzlů umožňuje provádět postupný upgrade a plánovat pody mezi fondy uzlů, aby se zachovala doba provozu aplikace v rámci výše uvedených omezení.
Upgrade řídicí roviny clusteru s více fondy uzlů
Poznámka:
Kubernetes používá standardní schéma správy verzí sémantické správy verzí . Číslo verze se vyjadřuje jako x.y.z, kde x je hlavní verze, y je podverze a z je verze opravy. Například ve verzi 1.12.6 je hlavní verze 12, 12 je podverze a 6 je verze opravy. Verze Řídicí roviny Kubernetes a počáteční fond uzlů se nastaví během vytváření clusteru. Ostatní fondy uzlů mají při přidání do clusteru nastavenou verzi Kubernetes. Verze Kubernetes se můžou lišit mezi fondy uzlů a mezi fondem uzlů a řídicí rovinou.
Cluster AKS má dva objekty prostředků clusteru s přidruženými verzemi Kubernetes:
- Verze Kubernetes řídicí roviny clusteru a
- Fond uzlů s verzí Kubernetes
Řídicí rovina se mapuje na jeden nebo více fondů uzlů. Chování operace upgradu závisí na tom, který příkaz Azure CLI použijete.
az aks upgrade
upgraduje řídicí rovinu a všechny fondy uzlů v clusteru na stejnou verzi Kubernetes.az aks upgrade
--control-plane-only
s příznakem upgraduje pouze řídicí rovinu clusteru a ponechá všechny fondy uzlů beze změny.az aks nodepool upgrade
upgraduje pouze fond cílových uzlů se zadanou verzí Kubernetes.
Ověřovací pravidla pro upgrady
Upgrady Kubernetes pro řídicí rovinu clusteru a fondy uzlů se ověřují pomocí následujících sad pravidel:
Pravidla pro platné verze pro upgrade fondů uzlů:
- Verze fondu uzlů musí mít stejnou hlavní verzi jako řídicí rovina.
- Podverze fondu uzlů musí být ve dvou podverzi verze řídicí roviny.
- Verze fondu uzlů nemůže být větší než verze ovládacího prvku
major.minor.patch
.
Pravidla pro odeslání operace upgradu:
- Řídicí rovinu ani verzi Kubernetes fondu uzlů nejde downgradovat.
- Pokud není zadaná verze Kubernetes fondu uzlů, chování závisí na klientovi. V šablonách Resource Manageru se deklarace vrátí do existující verze definované pro fond uzlů. Pokud není nic nastavené, použije k návratu verzi řídicí roviny.
- Nemůžete současně odesílat více operací na jednom zdroji řídicí roviny nebo fondu uzlů. V daném okamžiku můžete upgradovat nebo škálovat řídicí rovinu nebo fond uzlů.
Ruční škálování fondu uzlů
S tím, jak se zatížení aplikace mění, může být potřeba škálovat počet uzlů ve fondu uzlů. Počet uzlů je možné vertikálně navýšit nebo snížit.
Pomocí příkazu škálujte počet uzlů ve fondu
az aks node pool scale
uzlů.az aks nodepool scale \ --resource-group myResourceGroup \ --cluster-name myAKSCluster \ --name mynodepool \ --node-count 5 \ --no-wait
Pomocí příkazu vypíšete stav fondů
az aks node pool list
uzlů.az aks nodepool list --resource-group myResourceGroup --cluster-name myAKSCluster
Následující příklad výstupu ukazuje , že fond uzlů je ve stavu škálování s novým počtem pěti uzlů:
[ { ... "count": 5, ... "name": "mynodepool", "orchestratorVersion": "1.15.7", ... "provisioningState": "Scaling", ... "vmSize": "Standard_DS2_v2", ... }, { ... "count": 2, ... "name": "nodepool1", "orchestratorVersion": "1.15.7", ... "provisioningState": "Succeeded", ... "vmSize": "Standard_DS2_v2", ... } ]
Dokončení operace škálování trvá několik minut.
Automatické škálování konkrétního fondu uzlů pomocí automatického škálování clusteru
AKS nabízí samostatnou funkci pro automatické škálování fondů uzlů pomocí funkce označované jako automatické škálování clusteru. Tuto funkci můžete povolit s jedinečným minimálním a maximálním počtem škálování na fond uzlů.
Další informace najdete v tématu použití automatického škálování clusteru.
Odebrání konkrétních virtuálních počítačů ve stávajícím fondu uzlů (Preview)
Důležité
Funkce AKS ve verzi Preview jsou k dispozici na samoobslužné bázi. Verze Preview jsou poskytovány "tak, jak jsou" a "dostupné", a jsou vyloučené ze smluv o úrovni služeb a omezené záruky. Verze Preview AKS jsou částečně pokryty zákaznickou podporou na základě maximálního úsilí. Proto tyto funkce nejsou určené pro produkční použití. Další informace najdete v následujících článcích podpory:
Zaregistrujte nebo aktualizujte
aks-preview
rozšíření pomocíaz extension add
příkazu neboaz extension update
příkazu.# Register the aks-preview extension az extension add --name aks-preview # Update the aks-preview extension az extension update --name aks-preview
Vypíše existující uzly pomocí
kubectl get nodes
příkazu.kubectl get nodes
Výstup by měl vypadat podobně jako v následujícím příkladu výstupu:
NAME STATUS ROLES AGE VERSION aks-mynodepool-20823458-vmss000000 Ready agent 63m v1.21.9 aks-mynodepool-20823458-vmss000001 Ready agent 63m v1.21.9 aks-mynodepool-20823458-vmss000002 Ready agent 63m v1.21.9
Pomocí příkazu odstraňte zadané virtuální počítače
az aks nodepool delete-machines
. Nezapomeňte zástupné symboly nahradit vlastními hodnotami.az aks nodepool delete-machines \ --resource-group <resource-group-name> \ --cluster-name <cluster-name> \ --name <node-pool-name> --machine-names <vm-name-1> <vm-name-2>
Pomocí příkazu ověřte, že se virtuální počítače úspěšně odstranily
kubectl get nodes
.kubectl get nodes
Výstup by už neměl obsahovat virtuální počítače, které jste zadali v
az aks nodepool delete-machines
příkazu.
Přidružení skupin rezervací kapacity k fondům uzlů
S tím, jak se vaše požadavky na úlohy mění, můžete ke fondům uzlů přidružit existující skupiny rezervací kapacity, abyste zajistili přidělenou kapacitu pro fondy uzlů.
Požadavky na použití skupin rezervací kapacity s AKS
Použijte rozhraní příkazového řádku verze 2.56 nebo novější a rozhraní API verze 2023-10-01 nebo vyšší.
Skupina rezervací kapacity by už měla existovat a měla by obsahovat minimálně jednu rezervaci kapacity, jinak se fond uzlů přidá do clusteru s upozorněním a nepřidružuje se žádná skupina rezervací kapacity. Další informace najdete v tématu Skupiny rezervací kapacity.
Musíte vytvořit spravovanou identitu přiřazenou uživatelem pro skupinu prostředků, která obsahuje skupinu rezervací kapacity (CRG). Spravované identity přiřazené systémem nebudou pro tuto funkci fungovat. V následujícím příkladu nahraďte proměnné prostředí vlastními hodnotami.
IDENTITY_NAME=myID RG_NAME=myResourceGroup CLUSTER_NAME=myAKSCluster VM_SKU=Standard_D4s_v3 NODE_COUNT=2 LOCATION=westus2 az identity create --name $IDENTITY_NAME --resource-group $RG_NAME IDENTITY_ID=$(az identity show --name $IDENTITY_NAME --resource-group $RG_NAME --query identity.id -o tsv)
Roli musíte přiřadit
Contributor
k identitě přiřazené uživatelem, kterou jste vytvořili výše. Další podrobnosti najdete v postupu přiřazení role Azure.Vytvořte nový cluster a přiřaďte nově vytvořenou identitu.
az aks create \ --resource-group $RG_NAME \ --name $CLUSTER_NAME \ --location $LOCATION \ --node-vm-size $VM_SKU --node-count $NODE_COUNT \ --assign-identity $IDENTITY_ID \ --generate-ssh-keys
Identitu spravovanou uživatelem můžete také přiřadit k existujícímu spravovanému clusteru pomocí příkazu update.
az aks update \ --resource-group $RG_NAME \ --name $CLUSTER_NAME \ --location $LOCATION \ --node-vm-size $VM_SKU \ --node-count $NODE_COUNT \ --enable-managed-identity \ --assign-identity $IDENTITY_ID
Přidružení existující skupiny rezervací kapacity k fondu uzlů
Pomocí příkazu přidružte existující skupinu rezervací kapacity k fondu az aks nodepool add
uzlů a zadejte skupinu rezervací kapacity s příznakem --crg-id
. Následující příklad předpokládá, že máte CRG s názvem "myCRG".
RG_NAME=myResourceGroup
CLUSTER_NAME=myAKSCluster
NODEPOOL_NAME=myNodepool
CRG_NAME=myCRG
CRG_ID=$(az capacity reservation group show --capacity-reservation-group $CRG_NAME --resource-group $RG_NAME --query id -o tsv)
az aks nodepool add --resource-group $RG_NAME --cluster-name $CLUSTER_NAME --name $NODEPOOL_NAME --crg-id $CRG_ID
Přidružení existující skupiny rezervací kapacity k fondu systémových uzlů
Pokud chcete přidružit existující skupinu rezervací kapacity k fondu systémových uzlů, přidružte cluster k identitě přiřazené uživatelem k vaší skupině CRG a samotné skupině CRG během vytváření clusteru. Použijte příkaz az aks create
s příznakem --assign-identity
a --crg-id
příznakem.
IDENTITY_NAME=myID
RG_NAME=myResourceGroup
CLUSTER_NAME=myAKSCluster
NODEPOOL_NAME=myNodepool
CRG_NAME=myCRG
CRG_ID=$(az capacity reservation group show --capacity-reservation-group $CRG_NAME --resource-group $RG_NAME --query id -o tsv)
IDENTITY_ID=$(az identity show --name $IDENTITY_NAME --resource-group $RG_NAME --query identity.id -o tsv)
az aks create \
--resource-group $RG_NAME \
--cluster-name $CLUSTER_NAME \
--crg-id $CRG_ID \
--assign-identity $IDENTITY_ID \
--generate-ssh-keys
Poznámka:
Odstranění fondu uzlů implicitně oddružuje fond uzlů od jakékoli přidružené skupiny rezervací kapacity před odstraněním fondu uzlů. Odstranění clusteru implicitně disociuje všechny fondy uzlů v daném clusteru od přidružených skupin rezervací kapacity.
Poznámka:
Existující fond uzlů nelze aktualizovat pomocí skupiny rezervací kapacity. Doporučeným přístupem je přidružit skupinu rezervací kapacity při vytváření fondu uzlů.
Určení velikosti virtuálního počítače pro fond uzlů
Možná budete muset vytvořit fondy uzlů s různými velikostmi a možnostmi virtuálních počítačů. Můžete například vytvořit fond uzlů, který obsahuje uzly s velkým množstvím procesoru nebo paměti nebo fondu uzlů, který poskytuje podporu GPU. V další části použijete tainty a tolerance k tomu, abyste plánovači Kubernetes řekli, jak omezit přístup k podům, které se můžou spouštět na těchto uzlech.
V následujícím příkladu vytvoříme fond uzlů založený na GPU, který používá velikost virtuálního počítače Standard_NC6s_v3 . Tyto virtuální počítače využívají kartu NVIDIA Tesla K80. Informace najdete v tématu Dostupné velikosti pro virtuální počítače s Linuxem v Azure.
Pomocí příkazu vytvořte fond
az aks node pool add
uzlů. Zadejte název gpunodepool a pomocí--node-vm-size
parametru zadejte Standard_NC6 velikost.az aks nodepool add \ --resource-group myResourceGroup \ --cluster-name myAKSCluster \ --name gpunodepool \ --node-count 1 \ --node-vm-size Standard_NC6s_v3 \ --no-wait
Pomocí příkazu zkontrolujte stav fondu
az aks nodepool list
uzlů.az aks nodepool list --resource-group myResourceGroup --cluster-name myAKSCluster
Následující příklad výstupu ukazuje fond uzlů gpunodepool je Vytváření uzlů se zadaným VmSize:
[ { ... "count": 1, ... "name": "gpunodepool", "orchestratorVersion": "1.15.7", ... "provisioningState": "Creating", ... "vmSize": "Standard_NC6s_v3", ... }, { ... "count": 2, ... "name": "nodepool1", "orchestratorVersion": "1.15.7", ... "provisioningState": "Succeeded", ... "vmSize": "Standard_DS2_v2", ... } ]
Úspěšné vytvoření fondu gpunode trvá několik minut.
Zadání taintu, popisku nebo značky pro fond uzlů
Při vytváření fondu uzlů můžete k němu přidat tainty, popisky nebo značky. Když přidáte taint, popisek nebo značku, všechny uzly v rámci fondu uzlů získají také tento taint, popisek nebo značku.
Důležité
Přidání taintů, popisků nebo značek do uzlů by se mělo provádět pro celý fond uzlů pomocí az aks nodepool
. Nedoporučujeme používat kubectl
tainty, popisky nebo značky u jednotlivých uzlů ve fondu uzlů.
Nastavení taintů fondu uzlů
AKS podporuje dva druhy taintů uzlů: tainty uzlů a inicializační tainty uzlů (Preview). Další informace najdete v tématu Použití taintů uzlů v clusteru Azure Kubernetes Service (AKS).
Další informace o tom, jak používat pokročilé plánované funkce Kubernetes, najdete v tématu Osvědčené postupy pro pokročilé funkce plánovače v AKS.
Nastavení tolerance fondu uzlů
V předchozím kroku jste při vytváření fondu uzlů použili taint sku=gpu:NoSchedule . Následující příklad manifestu YAML používá toleraci, která plánovači Kubernetes umožňuje spustit pod NGINX na uzlu v tomto fondu uzlů.
Vytvořte soubor s názvem
nginx-toleration.yaml
a zkopírujte ho v následujícím příkladu YAML.apiVersion: v1 kind: Pod metadata: name: mypod spec: containers: - image: mcr.microsoft.com/oss/nginx/nginx:1.15.9-alpine name: mypod resources: requests: cpu: 100m memory: 128Mi limits: cpu: 1 memory: 2G tolerations: - key: "sku" operator: "Equal" value: "gpu" effect: "NoSchedule"
Naplánujte pod pomocí
kubectl apply
příkazu.kubectl apply -f nginx-toleration.yaml
Naplánování podu a načtení image NGINX trvá několik sekund.
Pomocí příkazu zkontrolujte stav
kubectl describe pod
.kubectl describe pod mypod
Následující zhuštěný ukázkový výstup ukazuje použití tolerance sku=gpu:NoSchedule . V části události plánovač přiřadil pod uzlu aks-taintnp-28993262-vmss0000000 :
[...] Tolerations: node.kubernetes.io/not-ready:NoExecute for 300s node.kubernetes.io/unreachable:NoExecute for 300s sku=gpu:NoSchedule Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal Scheduled 4m48s default-scheduler Successfully assigned default/mypod to aks-taintnp-28993262-vmss000000 Normal Pulling 4m47s kubelet pulling image "mcr.microsoft.com/oss/nginx/nginx:1.15.9-alpine" Normal Pulled 4m43s kubelet Successfully pulled image "mcr.microsoft.com/oss/nginx/nginx:1.15.9-alpine" Normal Created 4m40s kubelet Created container Normal Started 4m40s kubelet Started container
Na uzlech v taintnpu je možné naplánovat pouze pody, které mají tuto tolerance. Všechny ostatní pody jsou naplánované ve fondu uzlů nodepool1 . Pokud vytváříte více fondů uzlů, můžete pomocí taintů a tolerance omezit, jaké pody je možné na těchto prostředcích uzlů naplánovat.
Nastavení popisků fondu uzlů
Další informace najdete v tématu Použití popisků v clusteru Azure Kubernetes Service (AKS).
Nastavení značek Fondu uzlů Azure
Další informace najdete v tématu Použití značek Azure ve službě Azure Kubernetes Service (AKS).
Správa fondů uzlů pomocí šablony Resource Manageru
Když k vytváření a správě prostředků používáte šablonu Azure Resource Manageru, můžete změnit nastavení v šabloně a znovu ji nasadit, aby aktualizovala prostředky. U fondů uzlů AKS nemůžete po vytvoření clusteru AKS aktualizovat počáteční profil fondu uzlů. Toto chování znamená, že nemůžete aktualizovat existující šablonu Resource Manageru, provést změnu fondů uzlů a pak šablonu znovu nasadit. Místo toho musíte vytvořit samostatnou šablonu Resource Manageru, která aktualizuje fondy uzlů pro existující cluster AKS.
Vytvořte šablonu, například
aks-agentpools.json
, a vložte do následujícího ukázkového manifestu. Nezapomeňte podle potřeby upravit hodnoty. Tato ukázková šablona konfiguruje následující nastavení:- Aktualizuje fond uzlů Linuxu s názvem myagentpool, aby se spustily tři uzly.
- Nastaví uzly ve fondu uzlů tak, aby spouštěly Kubernetes verze 1.15.7.
- Definuje velikost uzlu jako Standard_DS2_v2.
{ "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#", "contentVersion": "1.0.0.0", "parameters": { "clusterName": { "type": "string", "metadata": { "description": "The name of your existing AKS cluster." } }, "location": { "type": "string", "metadata": { "description": "The location of your existing AKS cluster." } }, "agentPoolName": { "type": "string", "defaultValue": "myagentpool", "metadata": { "description": "The name of the agent pool to create or update." } }, "vnetSubnetId": { "type": "string", "defaultValue": "", "metadata": { "description": "The Vnet subnet resource ID for your existing AKS cluster." } } }, "variables": { "apiVersion": { "aks": "2020-01-01" }, "agentPoolProfiles": { "maxPods": 30, "osDiskSizeGB": 0, "agentCount": 3, "agentVmSize": "Standard_DS2_v2", "osType": "Linux", "vnetSubnetId": "[parameters('vnetSubnetId')]" } }, "resources": [ { "apiVersion": "2020-01-01", "type": "Microsoft.ContainerService/managedClusters/agentPools", "name": "[concat(parameters('clusterName'),'/', parameters('agentPoolName'))]", "location": "[parameters('location')]", "properties": { "maxPods": "[variables('agentPoolProfiles').maxPods]", "osDiskSizeGB": "[variables('agentPoolProfiles').osDiskSizeGB]", "count": "[variables('agentPoolProfiles').agentCount]", "vmSize": "[variables('agentPoolProfiles').agentVmSize]", "osType": "[variables('agentPoolProfiles').osType]", "type": "VirtualMachineScaleSets", "vnetSubnetID": "[variables('agentPoolProfiles').vnetSubnetId]", "orchestratorVersion": "1.15.7" } } ] }
Nasaďte šablonu pomocí
az deployment group create
příkazu.az deployment group create \ --resource-group myResourceGroup \ --template-file aks-agentpools.json
Tip
Do fondu uzlů můžete přidat značku přidáním vlastnosti značky do šablony, jak je znázorněno v následujícím příkladu:
... "resources": [ { ... "properties": { ... "tags": { "name1": "val1" }, ... } } ...
Aktualizace clusteru AKS může trvat několik minut v závislosti na nastavení fondu uzlů a operacích, které definujete v šabloně Resource Manageru.
Další kroky
- Další informace o řízení podů napříč fondy uzlů najdete v tématu Osvědčené postupy pro pokročilé funkce plánovače v AKS.
- Pomocí skupin umístění bezkontaktní komunikace můžete snížit latenci aplikací AKS.
- Veřejné IP adresy na úrovni instance umožňují uzlům přímo obsluhovat provoz.
Azure Kubernetes Service