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.

Denk eens terug aan het voorbeeld over het traceren van drones. Uw team heeft een nieuwe voorspellende modelleringsservice ontwikkeld waarmee vliegroutegegevens in extreme weersomstandigheden worden verwerkt en optimale vliegroutes worden gemaakt. 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. U configureert het cluster voor de ondersteuning van meerdere knooppuntgroepen en zorgt ervoor dat het cluster u de mogelijkheid geeft om de knooppunten in de knooppuntgroepen te schalen. Vervolgens voegt u een tweede knooppuntgroep toe ter ondersteuning van gebruikerswerkbelastingen. Ten slotte schaalt u het aantal knooppunten in de tweede knooppuntgroep naar nul om de kosten te verlagen van de knooppunten die in uw AKS-cluster worden gebruikt, te verlagen.

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 gaat een aantal waarden in de oefeningen in deze module opnieuw gebruiken. U moet bijvoorbeeld een regio kiezen waarin u de resourcegroep wilt maken. Sommige functies die u in latere oefeningen gaat toevoegen, zijn mogelijk niet beschikbaar in de regio die u selecteert. Daarom raden we u aan US - oostte selecteren. Als u een andere waarde kiest, noteer dan die waarde om te gebruiken bij oefeningen elders in de module.

    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 bijvoorbeeld de echo opdracht echo $REGION_NAMEuit te voeren.

  3. Noteer de naam van het nieuwe cluster. U gebruikt deze waarde later bij het opruimen van resources en bij configuratie-instellingen voor het cluster.

    echo $AKS_CLUSTER_NAME
    
  4. Maak een nieuwe resourcegroep met de naam akscostsaving. Implementeer alle resources die u in deze oefeningen in deze resourcegroep hebt gemaakt. 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 gereed is, kunt u het AKS-cluster maken. De eerste stap bestaat uit het verkrijgen van de nieuwste Kubernetes-versie (geen preview-versie) in de geselecteerde regio. U gaat deze versie gebruiken om het cluster te configureren.

  1. Voer de opdracht uit om de nieuwste, niet-preview Kubernetes-versie op te az aks get-versions halen. Sla de waarde die uit de opdracht wordt geretourneerd 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 'orchestrators[?!isPreview] | [-1].orchestratorVersion' \
        --output tsv)
    
  2. Voer de opdracht az aks create die verderop in deze stap wordt weergegeven uit om het AKS-cluster te maken. In het cluster wordt de nieuwste Kubernetes-versie uitgevoerd met twee knooppunten in de systeemknooppuntgroep. Het uitvoeren van deze opdracht kan enkele minuten duren.

    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.
    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
    

    Zoals u ziet, zijn er in de standaardknooppuntgroep twee knooppunten geconfigureerd met behulp van de parameter --node-count 2. U herinnert zich nog eens aan de vorige beschrijving dat essentiële systeemservices worden 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 mode van de knooppuntgroep is ingesteld op System en dat de name automatisch is 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 te maken met drie knooppunten en de naam batchprocpl. 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

U voert 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 in het resultaat dat de parameterwaarde voor de knooppuntgroep count 0 is en dat de waarde van enableAutoScaling is ingesteld op null. U moet het aantal knooppunten voor deze knooppuntgroep handmatig verhogen wanneer u hier werkbelastingen wilt plannen. Het maken van knooppunten gebeurt namelijk niet automatisch.

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. U voert 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. Voer kubectl get nodes uit om de knooppunten in de knooppuntgroepen weer te geven.

    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.