Ö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 mot 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-baserade virtuella datorer (VM) och körs bara under specifika veckodagar. Teamet vill se till att inga virtuella datorer används när tjänsten inte körs.
Här skapar du ett AKS-hanterat (Azure Kubernetes Service) Kubernetes-kluster. 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 i 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
REGION_NAME
för .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 till att kopiera kommandon till Urklipp. Om du vill klistra in högerklickar du på en ny rad i Cloud Shell-terminalen och väljer Klistra in eller använder kortkommandot Skift+Insert (⌘+V på macOS).
Du kan kontrollera varje värde genom att
echo
köra kommandot,echo $REGION_NAME
till exempel .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. Med en enda resursgrupp blir 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 för att hämta Kubernetes-versionen
az aks get-versions
. Följande fråga returnerar en Kubernetes-version som inte är förhandsversion. Lagra värdet i en Bash-variabel med namnetVERSION
. Hämta och lagra versionsnumret genom att köra följande kommando:VERSION=$(az aks get-versions \ --location $REGION_NAME \ --query "values[?isPreview==null].version | [-1]" \ --output tsv) echo $VERSION
az aks create
Kör kommandot för att skapa AKS-klustret. Klustret körs med två noder i systemnodpoolen. Det kan ta några minuter att slutföra 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 när du konfigurerar rätt stöd i klustret för skalning och flera nodpooler:Parameter och värde beskrivning --load-balancer-sku standard
Standardmässigt lastbalanserarstöd i AKS är basic
. Lastbalanserarenbasic
stöds inte när du använder flera nodpooler. Ange värdet tillstandard
.--vm-set-type VirtualMachineScaleSets
VM-skalningsuppsättningar krävs för användning av skalningsfunktionerna i AKS. Den här parametern aktiverar stöd för skalningsuppsättningar. Lägg märke till 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 produktionsklustret använder minst--node-count 3
så att du får tillförlitlighet i klusterdriften. Vi använder bara två noder 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 att denname
tilldelas automatiskt.
Lägga till en nodpool
Klustret har en enskild nodpool. Lägg till en andra nodpool genom att
az aks nodepool add
köra kommandot . Kör kommandot i det här steget för att skapa en användarnodpool med tre noder och namnetbatchprocpl
. Tänk på att nodpoolernas namn måste börja med en liten bokstav och bara får innehålla alfanumeriska tecken. Namn på nodpooler är begränsade till tolv 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 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
mode
för den nya nodpoolen är angett tillUser
och attname
ärbatchprocpl
.
Skala antalet noder för nodpoolen till noll
az aks nodepool scale
Kör kommandot 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 parametervärdet för nodpoolen count
är inställt på 0 och att enableAutoScaling
värdet ä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 för det föregående kommandot är antalet nodpooler angett 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 för att tillåtakubectl
att ansluta. Kontexten innehåller klustrets adress, en användare och ett namnområde.az aks get-credentials
Kör kommandot för att konfigurera Kubernetes-kontexten i Cloud Shell.Hämta klustrets autentiseringsuppgifter 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 så finns det bara två noder tillgängliga i klustret, och båda kommer frånnodepool1
.
En bra strategi för att optimera kostnader i AKS när du hanterar arbetsbelastningskrav direkt är att göra följande:
- Skala antalet noder i nodpooler manuellt.
- Skala dyra NV-baserade nodpooler till noll.
Nu ska vi titta på en strategi där du behöver skala noder men inte kontrollerar efterfrågan direkt.