Øvelse – Konfigurere flere noder og aktivere skalering til null på en AKS-klynge

Fullført

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

  1. Logg på Azure Cloud Shell ved hjelp av Azure-kontoen din. Velg Bash-versjonen av Cloud Shell.

  2. Du bruker verdiene du oppretter her gjennom alle øvelsene i denne modulen. Lagre utdataene for fremtidig bruk.

  3. Velg Innstillinger>Gå til klassisk versjon øverst i Cloud Shell-vinduet.

  4. 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 eksempel echo $REGION_NAME.

  5. Noter AKS_CLUSTER_NAME. Gjennom øvelsene bruker du denne verdien senere for oppryddings- og konfigurasjonsinnstillinger for klyngen.

    echo $AKS_CLUSTER_NAME
    
  6. 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.

  1. 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 navnet VERSION. 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
    
  2. 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 til standard.
    --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.

  3. 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 til System, og at name tilordnes automatisk.

Legge til et nodeutvalg

  1. 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 navnet batchprocpl. 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
    
  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 til User, og at name er batchprocpl.

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.

  1. Kjør kubectl for å samhandle med klyngens API-server. Du må konfigurere en Kubernetes-klyngekontekst slik at kubectl kan koble til. Konteksten inneholder klyngens adresse, en bruker og et navneområde. Kjør kommandoen az 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
    
  2. 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 fra nodepool1.

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.