Oefening: meerdere knooppunten configureren en schalen naar nul inschakelen in een AKS-cluster

Voltooid

Met Azure Kubernetes Service kunt u verschillende knooppuntgroepen maken die overeenkomen met specifieke workloads voor de knooppunten die in elke knooppuntgroep worden uitgevoerd.

Zoals u weet, heeft uw team een nieuwe voorspellende modelleringsservice ontwikkeld die vluchtpadinformatie in extreme weersomstandigheden verwerkt en optimale vluchtroutes creëert. Voor deze service is ondersteuning vereist van op GPU gebaseerde virtuele machines (VM's). De service wordt alleen op bepaalde dagen van de week uitgevoerd. Het team wil er zeker van zijn dat er geen virtuele machines worden gebruikt wanneer de service niet wordt uitgevoerd.

Hier gaat u een door Azure Kubernetes Service (AKS) beheerd Kubernetes-cluster maken. Vervolgens configureert u het cluster ter ondersteuning van meerdere knooppuntgroepen en kunt u clusters schalen van de knooppunten in de knooppuntgroepen. Vervolgens voegt u een tweede knooppuntgroep toe ter ondersteuning van gebruikersworkloads met een dynamisch aantal knooppunten. Ten slotte schaalt u het aantal knooppunten naar nul om de kosten te verlagen van de knooppunten die in uw AKS-cluster worden gebruikt.

Een nieuwe resourcegroep maken

  1. Meld u met behulp van uw Azure-account aan bij Azure Cloud Shell. Selecteer de Bash-versie van Cloud Shell.

  2. U gebruikt de waarden die u hier maakt, opnieuw in alle oefeningen in deze module. Sla de uitvoer op voor toekomstig gebruik.

  3. Kies een regio om uw resourcegroep te hosten. Functies van latere oefeningen zijn niet beschikbaar in alle regio's. Daarom raden we u aan eastus als regio te gebruiken. Als u ervoor kiest om een andere waarde te gebruiken, wijzigt u de waarde van REGION_NAME.

    Voer de volgende opdrachten uit om uw variabelen te registreren:

    REGION_NAME=eastus
    RESOURCE_GROUP=rg-akscostsaving
    AKS_CLUSTER_NAME=akscostsaving-$RANDOM
    

    Tip

    U kunt de knop Kopiëren gebruiken om opdrachten te kopiëren naar het klembord. Als u wilt plakken, klikt u met de rechtermuisknop op een nieuwe regel in de Cloud Shell-terminal en selecteert u Plakken of gebruikt u de sneltoets Shift+Insert (⌘+V in macOS).

    U kunt elke waarde controleren door de echo opdracht uit te voeren, echo $REGION_NAMEbijvoorbeeld.

  4. Noteer uw AKS_CLUSTER_NAME. Tijdens de oefeningen gebruikt u deze waarde later voor het opschonen en configureren van uw cluster.

    echo $AKS_CLUSTER_NAME
    
  5. Maak een nieuwe resourcegroep met de naam akscostsaving. U implementeert alle resources die u in deze oefeningen in deze resourcegroep maakt. Met één resourcegroep is het eenvoudiger om de resources op te schonen nadat u de module hebt voltooid.

    az group create \
        --name $RESOURCE_GROUP \
        --location $REGION_NAME
    

Het AKS-cluster maken

Wanneer de resourcegroep is gemaakt, kunt u AKS-clusters in de groep maken. De eerste stap is het ophalen van de Kubernetes-versie in uw geselecteerde regio. Deze versie is ingesteld om uw cluster te configureren.

  1. Voer de opdracht uit om de Kubernetes-versie op te az aks get-versions halen. De volgende query retourneert een niet-preview Kubernetes-versie. Sla die waarde op in een Bash-variabele met de naam VERSION. Voer de onderstaande opdracht uit om het versienummer op te halen en op te slaan:

    VERSION=$(az aks get-versions \
        --location $REGION_NAME \
        --query "values[?isPreview==null].version | [-1]" \
        --output tsv)
    echo $VERSION
    
  2. Voer de az aks create opdracht uit om het AKS-cluster te maken. Het cluster wordt uitgevoerd met twee knooppunten in de systeemknooppuntgroep. Het uitvoeren van deze opdracht kan enkele minuten duren.

    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
    

    De opdracht az aks create heeft verschillende parameters waarmee u het Kubernetes-cluster heel nauwkeurig kunt configureren. Voor de configuratie van de juiste ondersteuning in het cluster voor schalen en meerdere knooppuntgroepen zijn twee parameters heel belangrijk:

    Parameter en waarde Beschrijving
    --load-balancer-sku standard Standaard wordt de load balancer basic in AKS ondersteund. De load balancer basic wordt niet ondersteund als u meerdere knooppuntgroepen gebruikt. Stel de waarde in op standard.
    --vm-set-type VirtualMachineScaleSets Er zijn virtuele-machineschaalsets vereist om gebruik te kunnen maken van de schaalfuncties in AKS. Met deze parameter schakelt u ondersteuning voor schaalsets in.

    Zoals u ziet, zijn er in de standaardknooppuntgroep twee knooppunten geconfigureerd met behulp van de parameter --node-count 2. Zoals eerder beschreven, worden essentiële systeemservices uitgevoerd in deze systeemknooppuntgroep. Het is belangrijk dat productieclusters ten minste --node-count 3 gebruiken voor betrouwbaarheid van clusterbewerkingen. We gebruiken hier slechts twee knooppunten om de kosten te beperken in deze oefening.

  3. Voer de opdracht az aks nodepool list uit om de knooppuntgroepen in het nieuwe cluster weer te geven:

    az aks nodepool list --resource-group $RESOURCE_GROUP --cluster-name $AKS_CLUSTER_NAME
    

    Hier volgt een voorbeeld van de uitvoer van de opdracht:

    [
      {
        "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
      }
    ]
    

    U ziet dat de knooppuntgroep is ingesteld op System en dat de name knooppuntgroep mode automatisch wordt toegewezen.

Een knooppuntgroep toevoegen

  1. Het cluster heeft één knooppuntgroep. Voeg een tweede knooppuntgroep toe door de opdracht uit te az aks nodepool add voeren. Voer de opdracht in deze stap uit om een gebruikersknooppuntgroep met drie knooppunten en de naam batchprocplte maken. Onthoud dat namen van knooppuntgroepen moeten beginnen met een kleine letter en alleen alfanumerieke tekens mogen bevatten. Namen van Linux-knooppuntgroepen mogen maximaal 12 tekens lang zijn en die van Windows-knooppuntgroepen zes tekens.

    Voer de volgende opdracht uit:

    az aks nodepool add \
        --resource-group $RESOURCE_GROUP \
        --cluster-name $AKS_CLUSTER_NAME \
        --name batchprocpl \
        --node-count 2
    
  2. Voer de opdracht az aks nodepool list uit om de nieuwe knooppuntgroep in het nieuwe cluster weer te geven:

    az aks nodepool list --resource-group $RESOURCE_GROUP --cluster-name $AKS_CLUSTER_NAME
    

    Hier volgt een voorbeeld van de uitvoer van de opdracht:

    [
      {
        "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
      }
    ]
    

    U ziet dat de mode van de knooppuntgroep is ingesteld op User en dat de namebatchprocpl is.

Het aantal knooppunten van de knooppuntgroep schalen naar nul

Voer de az aks nodepool scale opdracht uit om knooppunten in een knooppuntgroep handmatig te schalen.

Voer de opdracht az aks nodepool scale uit en gebruik de parameter --node-count om de waarde voor het aantal knooppunten in te stellen op 0.

Hier volgt een voorbeeld van de opdracht:

az aks nodepool scale \
    --resource-group $RESOURCE_GROUP \
    --cluster-name $AKS_CLUSTER_NAME \
    --name batchprocpl \
    --node-count 0

Hier volgt een voorbeeld van de uitvoer van de opdracht:

{
  "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
}

U ziet dat de parameterwaarde van de knooppuntgroep count is ingesteld op 0 en dat de enableAutoScaling waarde is ingesteld op null. Als u workloads wilt plannen, moet u het aantal knooppunten voor deze knooppuntgroep handmatig verhogen, omdat het maken van knooppunten niet standaard wordt uitgevoerd.

De Kubernetes-context configureren

In het resultaat van de vorige opdracht ziet u dat het aantal knooppuntgroepen is ingesteld op 0. U kunt de beschikbare knooppunten in het cluster controleren door de opdracht kubectl get nodes uit te voeren.

  1. Voer uit kubectl om te communiceren met de API-server van uw cluster. U moet een Kubernetes-clustercontext configureren zodat kubectl verbinding kan maken. De context bevat het adres van het cluster, een gebruiker en een naamruimte. Voer de az aks get-credentials opdracht uit om de Kubernetes-context in Cloud Shell te configureren.

    Haal de clusterreferenties op door deze opdracht uit te voeren:

    az aks get-credentials \
        --resource-group $RESOURCE_GROUP \
        --name $AKS_CLUSTER_NAME
    

    Hier volgt een voorbeeld van de uitvoer van de opdracht.

    Merged "akscostsaving-17835" as current context in /home/user/.kube/config
    
  2. Vermeld de knooppunten in uw knooppuntgroepen.

    kubectl get nodes
    

    Hier volgt een voorbeeld van de uitvoer van de opdracht:

    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
    

    Hoewel met de opdracht az aks nodepool list twee knooppuntgroepen worden weergegeven, zijn er maar twee knooppunten in het cluster beschikbaar en beide zijn van nodepool1.

Hier volgt een goede strategie om de kosten in AKS te optimaliseren als u de werkbelastingvereisten rechtstreeks beheert:

  • Schaal het aantal knooppunten in knooppuntgroepen handmatig.
  • Schaal dure, op NV gebaseerde gebruikersknooppuntgroepen naar nul.

Laten we eens kijken naar een strategie waarbij u knooppunten kunt schalen, maar de vraag niet rechtstreeks kunt besturen.