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

Voltooid

Met Azure Kubernetes Service kunt u verschillende knooppuntgroepen maken om specifieke workloads te koppelen aan de knooppunten die in elke knooppuntgroep worden uitgevoerd.

Terugkomend op het drone-volgvoorbeeld, heeft uw team een nieuwe voorspellende modelleringsservice ontwikkeld die vluchtpadinformatie in extreme weersomstandigheden verwerkt en optimale vluchtroutes creëert. Deze service vereist ondersteuning voor virtuele machines (VM's) op basis van GPU en wordt alleen uitgevoerd op specifieke dagen in de week. Het team wil ervoor zorgen dat er geen VMS wordt gebruikt wanneer de service niet wordt uitgevoerd.

Hier maakt u een door Azure Kubernetes Service (AKS) beheerd Kubernetes-cluster. Vervolgens configureert u het cluster om meerdere knooppuntgroepen te ondersteunen en stelt u clusters in staat de knooppunten binnen de knooppuntgroepen te schalen. 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 aan bij Azure Cloud Shell met uw Azure-account. 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 om eastus als uw 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 naar het klembord te kopiëren. Als u wilt plakken, klikt u met de rechtermuisknop op een nieuwe regel in de Cloud Shell-terminal en selecteert u Plakkenof gebruikt u de sneltoets Shift+Insert (⌘+V in macOS).

    U kunt elke waarde controleren door de opdracht echo uit te voeren; bijvoorbeeld echo $REGION_NAME.

  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 rg-akscostsaving. U implementeert alle resources die u in deze oefeningen in deze resourcegroep maakt. Met één resourcegroep kunt u de resources gemakkelijker opschonen nadat u de module hebt voltooid.

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

Het AKS-cluster maken

Zodra de resourcegroep is aangemaakt, kunt u AKS-clusters binnen 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 az aks get-versions uit om de Kubernetes-versie op te halen. De volgende query retourneert een niet-preview Kubernetes-versie. Sla die waarde op in een Bash-variabele met de naam VERSION. Voer de volgende 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 opdracht az aks create uit om het AKS-cluster te maken. Het cluster wordt uitgevoerd met twee knooppunten in de systeemknooppuntgroep. Het kan enkele minuten duren voordat deze opdracht is voltooid.

    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 een nauwkeurige configuratie van uw Kubernetes-cluster mogelijk is. Er zijn twee belangrijke parameters voor het configureren van de juiste ondersteuning in uw cluster voor schalen en meerdere knooppuntgroepen:

    Parameter en waarde Beschrijving
    --load-balancer-sku standard De standaardondersteuning voor load balancer in AKS is basic. De basic load balancer wordt niet ondersteund wanneer u meerdere knooppuntgroepen gebruikt. Stel de waarde in op standard.
    --vm-set-type VirtualMachineScaleSets Als u de schaalfuncties in AKS wilt gebruiken, zijn schaalsets voor virtuele machines vereist. Met deze parameter wordt ondersteuning voor schaalsets ingeschakeld.

    U ziet dat twee knooppunten zijn geconfigureerd in de standaardknooppuntgroep 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 in clusterbewerkingen. We gebruiken hier slechts twee knooppunten voor kostenoverwegingen 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 mode van de knooppuntgroep is ingesteld op System en dat de name automatisch wordt toegewezen.

Een knooppuntgroep toevoegen

  1. Uw cluster heeft één knooppuntgroep. Voeg een tweede knooppuntgroep toe door de opdracht az aks nodepool add uit te voeren. Voer de opdracht in deze stap uit om een gebruikersknooppuntgroep met drie knooppunten en de naam batchprocplte maken. Houd er rekening mee dat namen van knooppuntgroepen moeten beginnen met een kleine letter en alleen alfanumerieke tekens moeten bevatten. Namen van knooppuntgroepen zijn beperkt tot 12 tekens voor Linux-knooppuntgroepen en zes tekens voor Windows-knooppuntgroepen.

    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 uw 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 nieuwe knooppuntgroep is ingesteld op User en dat de name is batchprocpl.

Het aantal knooppunten van de knooppuntgroep schalen naar nul

Voer de opdracht az aks nodepool scale 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 knooppuntgroep count parameterwaarde 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 de uitvoer van de vorige opdracht is het aantal knooppuntgroepen ingesteld op 0. U kunt de beschikbare knooppunten in het cluster bevestigen door de opdracht kubectl get nodes uit te voeren.

  1. Voer kubectl uit om te communiceren met de API-server van uw cluster. U moet een Kubernetes-clustercontext configureren om kubectl verbinding te laten maken. De context bevat het adres van het cluster, een gebruiker en een naamruimte. Voer de opdracht az aks get-credentials 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 in de opdracht az aks nodepool list twee knooppuntgroepen worden vermeld, zijn er slechts twee knooppunten beschikbaar in het cluster en beide zijn afkomstig van nodepool1.

Een goede strategie is het volgende om de kosten voor AKS te optimaliseren wanneer u de vraag naar workloads rechtstreeks beheert:

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

Laten we eens kijken naar een strategie waarin u knooppunten moet schalen, maar de vraag niet rechtstreeks kunt beheren.