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 het toevoegen van een spot-gebruikersknooppuntgroep met automatisch schalen 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 werkbelasting wordt geïmplementeerd met knooppuntaffiniteit ingeschakeld, zodat de pod wordt gepland op knooppunten in de spot-knooppuntgroep.

Een spot-knooppuntgroep maken

U moet een afzonderlijke knooppuntgroep maken die ondersteuning biedt voor de batchverwerkingsservice. Deze knooppuntgroep is een spot-knooppuntgroep die gebruikmaakt van het verwijderingsbeleid Verwijderen en een maximale spot-prijs van -1.

  1. Voer dezelfde opdracht az aks nodepool add uit als in de vorige oefening om een nieuwe spot-knooppuntgroep aan uw cluster toe te voegen. 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
    • Verwijderingsbeleid: Delete
    • Maximale spot-prijs: -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 kan mislukken 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 wijken opvallend af van de waarden die u in vorige knooppuntgroepen hebt gezien. Laten we deze items eens bekijken:

    • De waarde van de eigenschap enableAutoScaling is ingesteld op true.

    • De waarden maxCount en minCount zijn beide ingesteld.

    • De eigenschap scaleSetEvictionPolicy is ingesteld op Delete.

    • De eigenschap scaleSetPriority is ingesteld op Spot.

    • De eigenschap spotMaxPrice is ingesteld op -1.

    • nodeLabels en nodeTaints zijn toegepast op deze knooppuntgroep. U gebruikt deze waarden om werkbelastingen te plannen voor de knooppunten in de knooppuntgroep.

Een naamruimte configureren

  1. Voer de kubectl create namespace opdracht uit om een naamruimte te maken die voor de toepassing wordt aangeroepen costsavings . U gebruikt deze naamruimte om het selecteren van uw werkbelastingen te vergemakkelijken.

    kubectl create namespace costsavings
    

    Dit is de uitvoer van de voorgaande opdracht:

    namespace/costsavings created
    

Een pod plannen met spot-knooppuntaffiniteit

U kunt plannen dat een pod wordt uitgevoerd op een spot-knooppunt door een tolerantie en een affiniteit 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 kubernetes.azure.com/scalesetpriority=spot:NoSchedule aan en een label dat gelijk is aan kubernetes.azure.com/scalesetpriority=spot. Gebruik de informatie in dit sleutel-waardepaar in de tolerations en affinity sectie van het YAML-manifestbestand van uw workloads. Nu u de tweede batchverwerkingsgroep als een spot-knooppuntgroep hebt geconfigureerd, kunt u een implementatiebestand maken om werkbelastingen te plannen die in de groep moeten worden uitgevoerd.

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

    code spot-node-deployment.yaml
    

    Tip

    Cloud Shell bevat een geïntegreerde bestandseditor. De Cloud Shell-editor ondersteunt functies, zoals het markeren van talen, het opdrachtpalet en een bestandsverkenner. Als u eenvoudig bestanden wilt maken en bewerken, start u de editor door code . uit te voeren in de Cloud Shell-terminal. Met deze actie wordt de editor geopend met uw actieve werkmapset in de terminal. Voer code spot-node-deployment.yaml uit om het manifestbestand rechtstreeks te openen voor snelle bewerking. Met deze opdracht wordt de editor geopend zonder de bestandsverkenner.

  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 kubectl apply opdracht 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 met behulp van de vlag bij het -o wide uitvoeren kubectl get pods van de opdracht. In dit geval wilt u zien op welk knooppunt de pod is gepland. Zorg dat u de query voor pods uitvoert in de naamruimte costsavings.

    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>
    

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