Øvelse – Konfigurere flere noder og aktivere skalering til null på en AKS-klynge
Azure Kubernetes-tjenesten lar deg opprette forskjellige nodeutvalg som samsvarer med bestemte arbeidsbelastninger med nodene som kjører i hvert nodeutvalg.
Husk fra dronesporingseksempelet at teamet ditt utviklet en ny prediktiv modelleringstjeneste som behandler flybaneinformasjon under ekstreme værforhold og skaper optimale flyruter. Denne tjenesten krever GPU-basert virtuell maskin (VM)-støtte og kjører bare på bestemte dager i løpet av uken. Teamet vil forsikre seg om at ingen VMS brukes når tjenesten ikke kjører.
Her oppretter du en Azure Kubernetes-tjeneste (AKS)-administrert Kubernetes-klynge. Deretter konfigurerer du klyngen slik at den støtter flere nodeutvalg og lar klynger skalere nodene i nodeutvalgene. Deretter legger du til et ekstra nodeutvalg for å støtte brukerarbeidsbelastninger med et dynamisk nodeantall. Til slutt skalerer du nodeantallet til null for å redusere kostnadene for nodene som brukes i AKS-klyngen.
Opprett en ny ressursgruppe
Logg på Azure Cloud Shell ved hjelp av Azure-kontoen din. Velg Bash-versjonen av Cloud Shell.
Du bruker verdiene du oppretter her gjennom alle øvelsene i denne modulen. Lagre utdataene for fremtidig bruk.
Velg Innstillinger>Gå til klassisk versjon øverst i Cloud Shell-vinduet.
Velg et område som skal være vert for ressursgruppen. Funksjoner fra senere øvelser er ikke tilgjengelige i alle områder. Derfor anbefaler vi at du bruker eastus som område. Hvis du velger å bruke en annen verdi, endrer du verdien for
REGION_NAME
.Kjør følgende kommandoer for å registrere variablene:
REGION_NAME=eastus RESOURCE_GROUP=rg-akscostsaving AKS_CLUSTER_NAME=akscostsaving-$RANDOM
Tips
Du kan bruke Kopier-knappen til å kopiere kommandoer til utklippstavlen. Hvis du vil lime inn, høyreklikker du på en ny linje i Cloud Shell-terminalen og velger Lim inneller bruker hurtigtasten SKIFT+Sett inn (⌘+V på macOS).
Du kan kontrollere hver verdi ved å kjøre kommandoen
echo
; for eksempelecho $REGION_NAME
.Noter
AKS_CLUSTER_NAME
. Gjennom øvelsene bruker du denne verdien senere for oppryddings- og konfigurasjonsinnstillinger for klyngen.echo $AKS_CLUSTER_NAME
Opprett en ny ressursgruppe med navnet rg-akscostsaving. Du distribuerer alle ressursene du oppretter i disse øvelsene i denne ressursgruppen. En enkelt ressursgruppe gjør det enklere å rydde opp i ressursene når du er ferdig med modulen.
az group create \ --name $RESOURCE_GROUP \ --location $REGION_NAME
Opprett AKS-klyngen
Når ressursgruppen er opprettet, kan du opprette AKS-klynger i gruppen. Det første trinnet er å få Kubernetes-versjonen i det valgte området. Denne versjonen er satt til å konfigurere klyngen.
Hvis du vil ha Kubernetes-versjonen, kjører du kommandoen
az aks get-versions
. Følgende spørring returnerer en kubernetes-versjon som ikke er forhåndsvist. Lagre denne verdien i en Bash-variabel med navnetVERSION
. Hvis du vil hente og lagre versjonsnummeret, kjører du følgende kommando:VERSION=$(az aks get-versions \ --location $REGION_NAME \ --query "values[?isPreview==null].version | [1]" \ --output tsv) echo $VERSION
Kjør kommandoen
az aks create
for å opprette AKS-klyngen. Klyngen kjører med to noder i systemnodeutvalget. Denne kommandoen kan ta noen minutter å fullføre.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
Kommandoen
az aks create
har flere parametere som aktiverer nøyaktig konfigurasjon av Kubernetes-klyngen. Det finnes to viktige parametere for å konfigurere riktig støtte i klyngen for skalering og flere nodeutvalg:Parameter og verdi Beskrivelse --load-balancer-sku standard
Standard støtte for belastningsfordeling i AKS er basic
.basic
belastningsfordeling støttes ikke når du bruker flere nodeutvalg. Angi verdien tilstandard
.--vm-set-type VirtualMachineScaleSets
Hvis du vil bruke skaleringsfunksjonene i AKS, kreves skaleringssett for virtuell maskin. Denne parameteren aktiverer støtte for skaleringssett. Legg merke til at to noder er konfigurert i standardnodeutvalget ved hjelp av
--node-count 2
-parameteren. Tilbakekall fra forrige beskrivelse om at viktige systemtjenester kjører på tvers av dette systemnodeutvalget. Det er viktig at produksjonsklynger bruker minst--node-count 3
for pålitelighet i klyngeoperasjoner. Vi bruker bare to noder her for kostnadshensyn i denne øvelsen.Kjør kommandoen
az aks nodepool list
for å vise nodeutvalgene i den nye klyngen:az aks nodepool list --resource-group $RESOURCE_GROUP --cluster-name $AKS_CLUSTER_NAME
Her er et eksempel på utdataene fra kommandoen:
[ { "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 } ]
Legg merke til at nodeutvalgets
mode
er satt tilSystem
, og atname
tilordnes automatisk.
Legge til et nodeutvalg
Klyngen har ett enkelt nodeutvalg. Legg til et ekstra nodeutvalg ved å kjøre kommandoen
az aks nodepool add
. Kjør kommandoen i dette trinnet for å opprette et brukernodeutvalg med tre noder og navnetbatchprocpl
. Husk at navn på nodeutvalg må starte med en liten bokstav og bare inneholde alfanumeriske tegn. Navn på nodeutvalg er begrenset til 12 tegn for Linux-nodeutvalg og seks tegn for Windows-nodeutvalg.Kjør følgende kommando:
az aks nodepool add \ --resource-group $RESOURCE_GROUP \ --cluster-name $AKS_CLUSTER_NAME \ --name batchprocpl \ --node-count 2
Kjør kommandoen
az aks nodepool list
for å vise den nye nodeutvalget i den nye klyngen:az aks nodepool list --resource-group $RESOURCE_GROUP --cluster-name $AKS_CLUSTER_NAME
Her er et eksempel på utdataene fra kommandoen:
[ { "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 } ]
Legg merke til at
mode
for det nye nodeutvalget er satt tilUser
, og atname
erbatchprocpl
.
Skaler nodeutvalgsnoden til null
Kjør kommandoen az aks nodepool scale
for å skalere noder i et nodeutvalg manuelt.
Kjør kommandoen az aks nodepool scale
, og bruk --node-count
-parameteren til å angi nodeantallverdien til 0.
Her er et eksempel på kommandoen:
az aks nodepool scale \
--resource-group $RESOURCE_GROUP \
--cluster-name $AKS_CLUSTER_NAME \
--name batchprocpl \
--node-count 0
Her er et eksempel på utdataene fra kommandoen:
{
"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
}
Legg merke til at nodeutvalget count
parameterverdien er satt til 0, og at enableAutoScaling
-verdien er satt til null
. Hvis du vil planlegge arbeidsbelastninger, må du øke nodeantallet for dette nodeutvalget manuelt, fordi nodeoppretting ikke skjer automatisk som standard.
Konfigurer Kubernetes-konteksten
I utdataene fra forrige kommando er nodeutvalgsantallet satt til 0. Du kan bekrefte de tilgjengelige nodene i klyngen ved å kjøre kommandoen kubectl get nodes
.
Kjør
kubectl
for å samhandle med klyngens API-server. Du må konfigurere en Kubernetes-klyngekontekst slik atkubectl
kan koble til. Konteksten inneholder klyngens adresse, en bruker og et navneområde. Kjør kommandoenaz aks get-credentials
for å konfigurere Kubernetes-konteksten i Cloud Shell.Hent klyngelegitimasjonen ved å kjøre denne kommandoen:
az aks get-credentials \ --resource-group $RESOURCE_GROUP \ --name $AKS_CLUSTER_NAME
Her er et eksempel på utdataene fra kommandoen.
Merged "akscostsaving-17835" as current context in /home/user/.kube/config
Vis nodene i nodeutvalgene.
kubectl get nodes
Her er et eksempel på kommandoutdataene:
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
Legg merke til at selv om
az aks nodepool list
-kommandoen viser to nodeutvalg, er det bare to noder tilgjengelig i klyngen, og begge er franodepool1
.
For å optimalisere kostnadene på AKS når du administrerer arbeidsbelastningskrav direkte, er en god strategi å:
- Skaler nodeantallet manuelt i nodeutvalg.
- Skaler dyre, NV-baserte brukernodeutvalg til null.
La oss se på en strategi der du må skalere noder, men ikke kontrollere etterspørselen direkte.