Cvičení – konfigurace více uzlů a povolení škálování na nulu v clusteru AKS
Služba Azure Kubernetes Service umožňuje vytvořit různé fondy uzlů tak, aby konkrétní úlohy odpovídaly uzlům spuštěným v jednotlivých fondech uzlů.
Vzpomeňte si z příkladu sledování dronů, že váš tým vyvinul novou službu prediktivního modelování, která zpracovává informace o letu v extrémních povětrnostních podmínkách a vytváří optimální letové trasy. Tato služba vyžaduje podporu virtuálních počítačů využívajících grafický procesor (GPU) a spouští se jenom v konkrétních dnech v týdnu. Tým se chce ujistit, že pokud služba neběží, nepoužívají se žádné virtuální počítače.
Vytvoříte cluster Kubernetes spravovaný službou AKS (Azure Kubernetes Service). Dále nakonfigurujete cluster tak, aby podporoval více fondů uzlů a umožníte clusterům škálovat uzly ve fondech uzlů. Potom přidáte druhý fond uzlů pro podporu uživatelských úloh s dynamickým počtem uzlů. Nakonec škálujete počet uzlů na nulu, abyste snížili náklady na uzly používané v clusteru AKS.
Vytvoření nové skupiny prostředků
Přihlaste se do Azure Cloud Shellu pomocí svého účtu Azure. Vyberte verzi Bash prostředí Cloud Shell.
Hodnoty, které tady vytvoříte, budete opakovaně používat ve všech cvičeních v tomto modulu. Uložte výstup pro budoucí použití.
Zvolte oblast pro hostování vaší skupiny prostředků. Funkce z pozdějších cvičení nejsou dostupné ve všech oblastech. Z tohoto důvodu doporučujeme jako oblast používat eastus . Pokud se rozhodnete použít jinou hodnotu, změňte hodnotu
REGION_NAME
.Spuštěním následujících příkazů zaregistrujte proměnné:
REGION_NAME=eastus RESOURCE_GROUP=rg-akscostsaving AKS_CLUSTER_NAME=akscostsaving-$RANDOM
Tip
Můžete použít tlačítko Kopírovat pro kopírování příkazů do schránky. Pokud chcete vložit, klikněte pravým tlačítkem myši na nový řádek v terminálu Cloud Shellu a vyberte Vložit nebo použijte klávesovou zkratku Shift+Insert (⌘+V v macOS).
Každou hodnotu můžete zkontrolovat spuštěním
echo
příkazu,echo $REGION_NAME
například .Poznamenejte si svůj
AKS_CLUSTER_NAME
. V průběhu cvičení použijete tuto hodnotu později k vyčištění a nastavení konfigurace clusteru.echo $AKS_CLUSTER_NAME
Vytvořte novou skupinu prostředků s názvem rg-akscostsaving. Všechny prostředky, které vytvoříte v těchto cvičeních, nasadíte v této skupině prostředků. Použití jedné skupiny prostředků usnadňuje vyčištění prostředků po dokončení modulu.
az group create \ --name $RESOURCE_GROUP \ --location $REGION_NAME
Vytvoření clusteru AKS
Vytvořenou skupinou prostředků můžete v rámci skupiny vytvářet clustery AKS. Prvním krokem je získání verze Kubernetes ve vybrané oblasti. Tato verze je nastavená pro konfiguraci clusteru.
Pokud chcete získat verzi Kubernetes, spusťte
az aks get-versions
příkaz. Následující dotaz vrátí verzi Kubernetes, která není ve verzi Preview. Uložte hodnotu do proměnné Bash s názvemVERSION
. Pokud chcete načíst a uložit číslo verze, spusťte následující příkaz:VERSION=$(az aks get-versions \ --location $REGION_NAME \ --query "values[?isPreview==null].version | [-1]" \ --output tsv) echo $VERSION
Spuštěním
az aks create
příkazu vytvořte cluster AKS. Cluster běží se dvěma uzly ve fondu systémových uzlů. Dokončení tohoto příkazu může trvat několik minut.az aks create \ --resource-group $RESOURCE_GROUP \ --name $AKS_CLUSTER_NAME \ --location $REGION_NAME \ --kubernetes-version $VERSION \ --node-count 2 \ --load-balancer-sku standard \ --vm-set-type VirtualMachineScaleSets \ --generate-ssh-keys
Příkaz
az aks create
má několik parametrů, které umožňují přesnou konfiguraci clusteru Kubernetes. Při konfiguraci správné podpory pro škálování a více fondů uzlů v clusteru jsou důležité dva parametry:Parametr a hodnota Popis --load-balancer-sku standard
Výchozí podpora nástroje pro vyrovnávání zatížení v AKS je basic
. Nástroj pro vyrovnávání zatíženíbasic
se nepodporuje při použití více fondů uzlů. Nastavte hodnotu nastandard
.--vm-set-type VirtualMachineScaleSets
Pro použití funkcí škálování v AKS se vyžadují škálovací sady virtuálních počítačů. Tento parametr povoluje podporu škálovací sady. Všimněte si, že dva uzly jsou ve výchozím fondu uzlů nakonfigurované pomocí parametru
--node-count 2
. Vzpomeňte si z předchozího popisu, že základní systémové služby běží v rámci tohoto fondu systémových uzlů. Je důležité, aby produkční clustery používaly alespoň--node-count 3
a zajistily tak spolehlivost operace clusteru. Pro aspekty nákladů v tomto cvičení použijeme jen dva uzly.Spuštěním příkazu
az aks nodepool list
vypište seznam fondů uzlů v novém clusteru:az aks nodepool list --resource-group $RESOURCE_GROUP --cluster-name $AKS_CLUSTER_NAME
Tady je příklad výstupu tohoto příkazu:
[ { "agentPoolType": "VirtualMachineScaleSets", "availabilityZones": null, "count": 2, "enableAutoScaling": null, "enableNodePublicIp": false, "id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourcegroups/rg-akscostsaving/providers/Microsoft.ContainerService/managedClusters/akscostsaving-17835/agentPools/nodepool1", "mode": "System", "name": "nodepool1", ... "type": "Microsoft.ContainerService/managedClusters/agentPools", "upgradeSettings": null, "vmSize": "Standard_DS2_v2", "vnetSubnetId": null } ]
Všimněte si, že je fond
mode
uzlů nastavenýSystem
a žename
je automaticky přiřazený.
Přidání fondu uzlů
Váš cluster má jeden fond uzlů. Spuštěním
az aks nodepool add
příkazu přidejte druhý fond uzlů. Spuštěním příkazu v tomto kroku vytvořte fond uzlů uživatele se třemi uzly a názvembatchprocpl
. Mějte na paměti, že názvy fondů uzlů musí začínat malým písmenem a obsahovat jenom alfanumerické znaky. Názvy fondů uzlů jsou omezené na 12 znaků pro fondy uzlů s Linuxem a šest znaků pro fondy uzlů s Windows.Spusťte následující příkaz:
az aks nodepool add \ --resource-group $RESOURCE_GROUP \ --cluster-name $AKS_CLUSTER_NAME \ --name batchprocpl \ --node-count 2
Spuštěním příkazu
az aks nodepool list
vypište nový fond uzlů v novém clusteru:az aks nodepool list --resource-group $RESOURCE_GROUP --cluster-name $AKS_CLUSTER_NAME
Tady je příklad výstupu tohoto příkazu:
[ { "agentPoolType": "VirtualMachineScaleSets", "availabilityZones": null, "count": 2, "enableAutoScaling": null, "enableNodePublicIp": false, "id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourcegroups/rg-akscostsaving/providers/Microsoft.ContainerService/managedClusters/akscostsaving-17835/agentPools/batchprocpl", "mode": "User", "name": "batchprocpl", ... "type": "Microsoft.ContainerService/managedClusters/agentPools", "upgradeSettings": { "maxSurge": null }, "vmSize": "Standard_DS2_v2", "vnetSubnetId": null }, { "agentPoolType": "VirtualMachineScaleSets", "availabilityZones": null, "count": 2, "enableAutoScaling": null, "enableNodePublicIp": false, "id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourcegroups/rg-akscostsaving/providers/Microsoft.ContainerService/managedClusters/akscostsaving-17835/agentPools/nodepool1", "mode": "System", "name": "nodepool1", ... "type": "Microsoft.ContainerService/managedClusters/agentPools", "upgradeSettings": null, "vmSize": "Standard_DS2_v2", "vnetSubnetId": null } ]
Všimněte si, že parametr
mode
nového fondu uzlů je nastavený naUser
a parametrname
má hodnotubatchprocpl
.
Škálování počtu uzlů ve fondu uzlů na nulu
Spuštěním az aks nodepool scale
příkazu škálujte uzly ve fondu uzlů ručně.
Spusťte příkaz az aks nodepool scale
a pomocí parametru --node-count
nastavte hodnotu počtu uzlů na 0.
Tady je příklad tohoto příkazu:
az aks nodepool scale \
--resource-group $RESOURCE_GROUP \
--cluster-name $AKS_CLUSTER_NAME \
--name batchprocpl \
--node-count 0
Tady je příklad výstupu tohoto příkazu:
{
"agentPoolType": "VirtualMachineScaleSets",
"availabilityZones": null,
"count": 0,
"enableAutoScaling": null,
"enableNodePublicIp": false,
"id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourcegroups/rg-akscostsaving/providers/Microsoft.ContainerService/managedClusters/akscostsaving-17835/agentPools/batchprocpl",
"maxCount": null,
"maxPods": 110,
"minCount": null,
"mode": "User",
"name": "batchprocpl",
"nodeImageVersion": "AKSUbuntu-1604-2020.06.10",
"nodeLabels": null,
"nodeTaints": null,
"orchestratorVersion": "1.17.9",
"osDiskSizeGb": 128,
"osType": "Linux",
"provisioningState": "Succeeded",
"proximityPlacementGroupId": null,
"resourceGroup": "rg-akscostsaving",
"scaleSetEvictionPolicy": null,
"scaleSetPriority": null,
"spotMaxPrice": null,
"tags": null,
"type": "Microsoft.ContainerService/managedClusters/agentPools",
"upgradeSettings": {
"maxSurge": null
},
"vmSize": "Standard_DS2_v2",
"vnetSubnetId": null
}
Všimněte si, že hodnota parametru fondu count
uzlů je nastavena na hodnotu 0 a že hodnota je nastavena enableAutoScaling
na null
hodnotu . Pokud chcete naplánovat úlohy, musíte počet uzlů pro tento fond uzlů zvýšit ručně, protože vytváření uzlů se ve výchozím nastavení neprovádí automaticky.
Konfigurace kontextu Kubernetes
Ve výstupu předchozího příkazu je počet uzlů ve fondu nastavený na hodnotu 0. Dostupné uzly v clusteru si můžete ověřit spuštěním příkazu kubectl get nodes
.
Spusťte
kubectl
interakci se serverem rozhraní API vašeho clusteru. Aby se příkazkubectl
mohl připojit, musíte nakonfigurovat kontext clusteru Kubernetes. Kontext obsahuje adresu clusteru, uživatele a obor názvů. Spuštěnímaz aks get-credentials
příkazu nakonfigurujte kontext Kubernetes v Cloud Shellu.Načtěte přihlašovací údaje clusteru spuštěním tohoto příkazu:
az aks get-credentials \ --resource-group $RESOURCE_GROUP \ --name $AKS_CLUSTER_NAME
Tady je příklad výstupu tohoto příkazu.
Merged "akscostsaving-17835" as current context in /home/user/.kube/config
Vypište uzly ve fondech uzlů.
kubectl get nodes
Tady je příklad výstupu tohoto příkazu:
NAME STATUS ROLES AGE VERSION aks-nodepool1-37990379-vmss000000 Ready agent 32m v1.17.9 aks-nodepool1-37990379-vmss000001 Ready agent 32m v1.17.9
Všimněte si, že i když příkaz
az aks nodepool list
vypíše dva fondy uzlů, jsou v clusteru k dispozici jenom dva uzly a oba jsou z fondunodepool1
.
Pokud chcete optimalizovat náklady na AKS při přímé správě požadavků na úlohy, je dobré využít následující strategii:
- Škálujte počty uzlů ve fondech uzlů ručně.
- Nákladné fondy uzlů uživatele založené na NV škálujte na nulu.
Pojďme se podívat na strategii, ve které potřebujete škálovat uzly, ale neřídíte poptávku přímo.