Övning – Konfigurera flera noder och aktivera skalning till noll i ett AKS-kluster
Med Azure Kubernetes Service kan du skapa olika nodpooler för att matcha specifika arbetsbelastningar med noderna som körs i varje nodpool.
Kom ihåg från exemplet med drönarspårning att ditt team har utvecklat en ny tjänst för förutsägelsemodellering som bearbetar flygvägsinformation under extrema väderförhållanden och skapar optimala flygvägar. Den här tjänsten kräver stöd för GPU-baserad virtuell dator (VM) och körs endast på specifika dagar under veckan. Teamet vill se till att inga virtuella datorer används när tjänsten inte körs.
Här skapar du ett AkS-hanterat Kubernetes-kluster (Azure Kubernetes Service). Därefter konfigurerar du klustret så att det stöder flera nodpooler och gör att kluster kan skala noderna i nodpoolerna. Sedan lägger du till en andra nodpool för att stödja användararbetsbelastningar med ett dynamiskt nodantal. Slutligen skalar du antalet noder till noll för att minska kostnaden för de noder som används i AKS-klustret.
Skapa en ny resursgrupp
Logga in på Azure Cloud Shell med ditt Azure-konto. Välj Bash-versionen av Cloud Shell.
Du återanvänder de värden som du skapar här under alla övningar i den här modulen. Spara utdata för framtida användning.
Välj en region som värd för resursgruppen. Funktioner från senare övningar är inte tillgängliga i alla regioner. Därför rekommenderar vi att du använder eastus som din region. Om du väljer att använda ett annat värde ändrar du värdet för
REGION_NAME
.Kör följande kommandon för att registrera dina variabler:
REGION_NAME=eastus RESOURCE_GROUP=rg-akscostsaving AKS_CLUSTER_NAME=akscostsaving-$RANDOM
Dricks
Du kan använda knappen Kopiera för att kopiera kommandon till urklippet. Om du vill klistra in högerklickar du på en ny rad i Cloud Shell-terminalen och väljer Klistra ineller använder kortkommandot Skift+Insert (⌘+V på macOS).
Du kan kontrollera varje värde genom att köra kommandot
echo
. till exempelecho $REGION_NAME
.Anteckna din
AKS_CLUSTER_NAME
. Under övningarna använder du det här värdet senare för rensning och konfigurationsinställningar för klustret.echo $AKS_CLUSTER_NAME
Skapa en ny resursgrupp med namnet rg-akscostsaving. Du distribuerar alla resurser som du skapar i de här övningarna i den här resursgruppen. En enskild resursgrupp gör det enklare att rensa resurserna när du har slutfört modulen.
az group create \ --name $RESOURCE_GROUP \ --location $REGION_NAME
Skapa AKS-klustret
När resursgruppen har skapats kan du skapa AKS-kluster i gruppen. Ditt första steg är att hämta Kubernetes-versionen i den valda regionen. Den här versionen är inställd på att konfigurera klustret.
Kör kommandot
az aks get-versions
för att hämta Kubernetes-versionen. Följande fråga returnerar en Kubernetes-version som inte är förhandsversion. Lagra värdet i en Bash-variabel med namnetVERSION
. Kör följande kommando för att hämta och lagra versionsnumret:VERSION=$(az aks get-versions \ --location $REGION_NAME \ --query "values[?isPreview==null].version | [-1]" \ --output tsv) echo $VERSION
Kör kommandot
az aks create
för att skapa AKS-klustret. Klustret körs med två noder i systemnodpoolen. Det kan ta några minuter att slutföra det här kommandot.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
Kommandot
az aks create
har flera parametrar som möjliggör exakt konfiguration av ditt Kubernetes-kluster. Det finns två viktiga parametrar för att konfigurera rätt stöd i klustret för skalning och flera nodpooler:Parameter och värde Beskrivning --load-balancer-sku standard
Standardstöd för lastbalanserare i AKS är basic
. Denbasic
lastbalanseraren stöds inte när du använder flera nodpooler. Ange värdet tillstandard
.--vm-set-type VirtualMachineScaleSets
Om du vill använda skalningsfunktionerna i AKS krävs virtuella maskinskalningsuppsättningar. Den här parametern aktiverar stöd för skalningsuppsättningar. Observera att två noder konfigureras i standardnodpoolen med hjälp av parametern
--node-count 2
. Kom ihåg från föregående beskrivning att viktiga systemtjänster körs i den här systemnodpoolen. Det är viktigt att produktionskluster använder minst--node-count 3
för tillförlitlighet i klusterdrift. Vi använder bara två noder här för kostnadsöverväganden i den här övningen.Kör kommandot
az aks nodepool list
för att visa nodpoolerna i det nya klustret:az aks nodepool list --resource-group $RESOURCE_GROUP --cluster-name $AKS_CLUSTER_NAME
Här är ett exempel på utdata från kommandot:
[ { "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 } ]
Observera att nodpoolens
mode
är inställd påSystem
och attname
tilldelas automatiskt.
Lägga till en nodpool
Klustret har en enda nodpool. Lägg till en andra nodpool genom att köra kommandot
az aks nodepool add
. Kör kommandot i det här steget för att skapa en användarnodpool med tre noder och namnetbatchprocpl
. Tänk på att namn på nodpooler måste börja med en liten bokstav och endast innehålla alfanumeriska tecken. Namn på nodpooler är begränsade till 12 tecken för Linux-nodpooler och sex tecken för Windows-nodpooler.Kör följande kommando:
az aks nodepool add \ --resource-group $RESOURCE_GROUP \ --cluster-name $AKS_CLUSTER_NAME \ --name batchprocpl \ --node-count 2
Kör kommandot
az aks nodepool list
för att visa en lista över den nya nodpoolen i det nya klustret:az aks nodepool list --resource-group $RESOURCE_GROUP --cluster-name $AKS_CLUSTER_NAME
Här är ett exempel på utdata från kommandot:
[ { "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 } ]
Observera att den nya nodpoolens
mode
är inställd påUser
och attname
ärbatchprocpl
.
Skala nodantalet för nodpoolen till noll
Kör kommandot az aks nodepool scale
för att skala noder i en nodpool manuellt.
Kör kommandot az aks nodepool scale
och använd parametern --node-count
för att ange värdet för antal noder till 0.
Här är ett exempel på kommandot:
az aks nodepool scale \
--resource-group $RESOURCE_GROUP \
--cluster-name $AKS_CLUSTER_NAME \
--name batchprocpl \
--node-count 0
Här är ett exempel på utdata från kommandot:
{
"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
}
Observera att nodpoolens count
parametervärde är inställt på 0 och att värdet för enableAutoScaling
är inställt på null
. Om du vill schemalägga arbetsbelastningar måste du öka antalet noder för den här nodpoolen manuellt, eftersom nodskapandet inte sker automatiskt som standard.
Konfigurera Kubernetes-kontexten
I utdata från föregående kommando anges antalet noderpooler till 0. Du kan bekräfta tillgängliga noder i klustret genom att köra kommandot kubectl get nodes
.
Kör
kubectl
för att interagera med klustrets API-server. Du måste konfigurera en Kubernetes-klusterkontext så attkubectl
kan ansluta. Kontexten innehåller klustrets adress, en användare och ett namnområde. Kör kommandotaz aks get-credentials
för att konfigurera Kubernetes-kontexten i Cloud Shell.Hämta autentiseringsuppgifterna för klustret genom att köra det här kommandot:
az aks get-credentials \ --resource-group $RESOURCE_GROUP \ --name $AKS_CLUSTER_NAME
Här är ett exempel på utdata från kommandot.
Merged "akscostsaving-17835" as current context in /home/user/.kube/config
Visa en lista över noderna i dina nodpooler.
kubectl get nodes
Här är ett exempel på kommandoutdata:
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
Observera att även om kommandot
az aks nodepool list
visar två nodpooler finns det bara två noder tillgängliga i klustret och båda är frånnodepool1
.
För att optimera kostnaderna för AKS när du hanterar arbetsbelastningskrav direkt är en bra strategi att:
- Skala nodantalet manuellt i nodpooler.
- Skala dyra, NV-baserade användarnodpooler till noll.
Nu ska vi titta på en strategi där du behöver skala noder, men inte styra efterfrågan direkt.