Oefening: spot-knooppuntgroepen configureren met de automatische schaalaanpassing van clusters in een AKS-cluster

Voltooid

Spot-gebruikersknooppuntgroepen bieden u toegang tot ongebruikte Azure-rekencapaciteit tegen lagere prijzen met ondersteuning voor high-performance computingscenario's.

In de vorige oefening hebt u een standaardgroep voor gebruikersknooppunten gemaakt, de automatische schaalaanpassing van clusters gebruikt om het maken van knooppunten te beheren en het aantal knooppunten handmatig te schalen.

De volgende stap is om een spotgebruiker-knooppuntenpool toe te voegen met automatische schaalvergroting om de operationele kosten van uw cluster te verminderen. Het clustergebruik varieert op basis van de benodigde resources en is niet voorspelbaar, dus u stelt regels in om de pieken en dips vast te leggen. De workload wordt uitgerold met knooppuntaffiniteit ingeschakeld, zodat de pod wordt gepland op knooppunten in de spot-knooppuntpool.

Een spot-nodepool maken

U moet een afzonderlijke knooppuntgroep maken die ondersteuning biedt voor de batchverwerkingsservice. Deze nodepool is een spot-nodepool die gebruikmaakt van het verwijderingsbeleid Delete en een spot-maximumprijs van -1.

  1. Voer dezelfde az aks nodepool add opdracht uit als in de vorige oefening om een nieuwe spot-knooppuntgroep toe te voegen aan uw cluster. U moet de naam van de knooppuntgroep wijzigen en nog enkele parameters toevoegen om deze knooppuntgroep te identificeren als spot-knooppuntgroep.

    Voer de volgende waarden in om de parameters van de knooppuntgroep in te stellen:

    • Naam: batchprocpl2
    • Prioriteit: Spot
    • Uitzettingsbeleid: Delete
    • Maximumprijs spot: -1

    Voer de volgende opdracht uit om de spot-knooppuntgroep te maken:

    az aks nodepool add \
        --resource-group $RESOURCE_GROUP \
        --cluster-name $AKS_CLUSTER_NAME \
        --name batchprocpl2 \
        --enable-cluster-autoscaler \
        --max-count 3 \
        --min-count 1 \
        --priority Spot \
        --eviction-policy Delete \
        --spot-max-price -1 \
        --node-vm-size Standard_DS2_v2 \
        --no-wait
    

    Houd er rekening mee dat deze aanvraag mogelijk mislukt vanwege capaciteitsbeperkingen op de locatie die u hebt geselecteerd.

  2. Voer de opdracht az aks nodepool show uit om de details van de nieuwe spot-knooppuntgroep voor de batchverwerkingsservice weer te geven:

    az aks nodepool show \
        --resource-group $RESOURCE_GROUP \
        --cluster-name $AKS_CLUSTER_NAME \
        --name batchprocpl2
    

    Hier volgt een voorbeeld van de uitvoer van de opdracht.

    {
    "agentPoolType": "VirtualMachineScaleSets",
    "availabilityZones": null,
    "count": 3,
    "enableAutoScaling": true,
    "enableNodePublicIp": false,
    "id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourcegroups/rg-akscostsaving/providers/Microsoft.ContainerService/managedClusters/akscostsaving-17835/agentPools/batchprocpl2",
    "maxCount": 3,
    "maxPods": 110,
    "minCount": 1,
    "mode": "User",
    "name": "batchprocpl2",
    "nodeImageVersion": "AKSUbuntu-1604-2020.06.10",
    "nodeLabels": {
        "kubernetes.azure.com/scalesetpriority": "spot"
    },
    "nodeTaints": [
        "kubernetes.azure.com/scalesetpriority=spot:NoSchedule"
    ],
    "orchestratorVersion": "1.17.9",
    "osDiskSizeGb": 128,
    "osType": "Linux",
    "provisioningState": "Creating",
    "proximityPlacementGroupId": null,
    "resourceGroup": "akscostsavinggrp",
    "scaleSetEvictionPolicy": "Delete",
    "scaleSetPriority": "Spot",
    "spotMaxPrice": -1.0,
    "tags": null,
    "type": "Microsoft.ContainerService/managedClusters/agentPools",
    "upgradeSettings": {
        "maxSurge": null
    },
    "vmSize": "Standard_DS2_v2",
    "vnetSubnetId": null
    }
    

    Enkele waarden in dit resultaat verschillen duidelijk van wat u in de vorige knooppuntgroepen hebt gezien. Laten we deze items bekijken:

    • De eigenschapswaarde enableAutoScaling is ingesteld op true.

    • Zowel de waarden maxCount als minCount zijn ingesteld.

    • De eigenschap scaleSetEvictionPolicy is ingesteld op Delete.

    • De eigenschap scaleSetPriority is ingesteld op Spot.

    • De eigenschap spotMaxPrice is ingesteld op -1.

    • De nodeLabels en nodeTaints worden toegepast op deze knooppuntgroep. U gebruikt deze waarden om workloads te plannen op de knooppunten in de knooppuntgroep.

Een naamruimte configureren

  1. Voer de opdracht kubectl create namespace uit om een naamruimte te maken met de naam costsavings voor de toepassing. U gebruikt deze naamruimte om uw workloads gemakkelijker te selecteren.

    kubectl create namespace costsavings
    

    Dit is de uitvoer van de voorgaande opdracht:

    namespace/costsavings created
    

Een pod inplannen met spot-knooppuntaffiniteit

U kunt een pod zo plannen dat deze wordt uitgevoerd op een spot-knooppunt door toleranties en affiniteiten toe te voegen aan het manifestbestand van de pod. Wanneer de tolerantie en knooppuntaffiniteit overeenkomen met de taint en het label dat is toegepast op uw spot-knooppunten, wordt de pod gepland op deze knooppunten.

Aan de knooppunten in een spot-knooppuntgroep wordt een taint toegewezen die gelijk is aan kubernetes.azure.com/scalesetpriority=spot:NoSchedule en een label dat gelijk is aan kubernetes.azure.com/scalesetpriority=spot. Gebruik de informatie in dit sleutel-waardepaar in de sectie tolerations en affinity van het YAML-manifestbestand van uw workloads. Nu de tweede batchverwerkingsgroep is geconfigureerd als een spot-knooppuntgroep, kunt u nu een implementatiebestand maken om workloads te plannen die erop moeten worden uitgevoerd.

  1. Maak een manifestbestand voor de Kubernetes-implementatie met de naam spot-node-deployment.yaml met behulp van de geïntegreerde editor:

    code spot-node-deployment.yaml
    

    Advies

    Cloud Shell bevat een geïntegreerde bestandseditor. De Cloud Shell-editor ondersteunt functies zoals taalmarkeringen, het opdrachtenpalet en een verkenner. Voor het eenvoudig maken en bewerken van bestanden start u de editor door code . uit te voeren in de Cloud Shell-terminal. Met deze actie opent u de editor met uw actieve werkmap ingesteld in de terminal. Als u het manifestbestand rechtstreeks wilt openen om snel te bewerken, voert u code spot-node-deployment.yamluit. Met deze opdracht opent u de editor zonder de verkenner.

  2. Plak de volgende tekst in het bestand:

    apiVersion: v1
    kind: Pod
    metadata:
      name: nginx
      labels:
        env: test
    spec:
      containers:
      - name: nginx
        image: nginx
        imagePullPolicy: IfNotPresent
      tolerations:
      - key: "kubernetes.azure.com/scalesetpriority"
        operator: "Equal"
        value: "spot"
        effect: "NoSchedule"
      affinity:
        nodeAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
            nodeSelectorTerms:
            - matchExpressions:
              - key: "kubernetes.azure.com/scalesetpriority"
                operator: In
                values:
                - "spot"
    
  3. Druk op Ctrl+S- om het bestand op te slaan en druk vervolgens op Ctrl+Q- om de editor te sluiten.

  4. Voer de opdracht kubectl apply uit om de configuratie toe te passen en de toepassing in de costsavings naamruimte te implementeren:

    kubectl apply \
    --namespace costsavings \
    -f spot-node-deployment.yaml
    

    Dit is de uitvoer van de voorgaande opdracht:

    pod/nginx created
    
  5. U kunt meer informatie over de actieve pod ophalen door de vlag -o wide te gebruiken bij het uitvoeren van de opdracht kubectl get pods. In dit geval wilt u zien op welk knooppunt de pod is gepland. Zorg ervoor dat u een query uitvoert op pods in de costsavings naamruimte.

    kubectl get pods --namespace costsavings -o wide
    

    De uitvoer moet er ongeveer als volgt uitzien:

    NAME    READY   STATUS    RESTARTS   AGE   IP           NODE                                   NOMINATED NODE   READINESS GATES
    nginx   1/1     Running   0          43s   10.244.3.3   aks-batchprocpl2-25254417-vmss000000   <none>           <none>
    

    Let op de naam van het knooppunt, aks-batchprocpl2-25254417-vmss000000. Dit knooppunt maakt deel uit van de batchprocpl2 spot-knooppuntgroep die u eerder hebt gemaakt.