Ćwiczenie — konfigurowanie pul węzłów typu spot przy użyciu narzędzia do automatycznego skalowania klastra w klastrze usługi AKS

Ukończone

Pule węzłów użytkownika typu spot umożliwiają dostęp do nieużywanej pojemności obliczeniowej platformy Azure przy niższych cenach dzięki obsłudze scenariuszy obliczeń o wysokiej wydajności.

W poprzednim ćwiczeniu utworzono pulę węzłów użytkownika standardowego, użyto automatycznego skalowania klastra do zarządzania tworzeniem węzłów i ręcznie przeskalowane liczby węzłów.

Następnym krokiem jest dodanie puli węzłów użytkownika typu spot z automatycznym skalowaniem w celu zmniejszenia kosztów operacyjnych klastra. Użycie klastra różni się w zależności od potrzebnych zasobów i nie jest przewidywalne, dlatego skonfigurujesz reguły przechwytywania skoków i spadków. Obciążenie jest wdrażane z włączoną koligacją węzłów, aby zasobnik był zaplanowany na węzłach w puli węzłów typu spot.

Tworzenie puli węzłów typu spot

Należy utworzyć oddzielną pulę węzłów, która obsługuje usługę przetwarzania wsadowego. Jest to pula węzłów typu spot, która korzysta z zasad eksmisji Usuwanie i ma maksymalną cenę usługi Spot równą -1.

  1. Uruchom polecenie az aks nodepool add w taki sam sposób, jak w poprzednim ćwiczeniu, aby dodać do klastra nową pulę węzłów typu spot. Musisz zmienić nazwę puli węzłów i dodać kilka dodatkowych parametrów, aby zidentyfikować tę pulę węzłów jako pulę węzłów typu spot.

    Wprowadź następujące wartości, aby ustawić parametry puli węzłów:

    • Nazwa: batchprocpl2
    • Priorytet: Spot
    • Zasady eksmisji: Delete
    • Maksymalna cena usługi Spot: -1

    Uruchom następujące polecenie, aby utworzyć pulę węzłów typu spot:

    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
    

    Należy pamiętać, że to żądanie może zakończyć się niepowodzeniem ze względu na ograniczenia pojemności w wybranej przez Ciebie lokalizacji.

  2. Uruchom polecenie az aks nodepool show, aby wyświetlić szczegóły nowej puli węzłów typu spot dla usługi przetwarzania wsadowego:

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

    Oto przykładowe dane wyjściowe tego polecenia.

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

    Kilka wartości w tych wynikach znacząco różni się od tego, co widzieliśmy w poprzednich pulach węzłów. Przejrzyjmy te elementy:

    • Dla właściwości enableAutoScaling jest ustawiona wartość true.

    • Ustawiono wartości maxCount i minCount.

    • Właściwość scaleSetEvictionPolicy ma ustawioną wartość Delete.

    • Właściwość scaleSetPriority ma ustawioną wartość Spot.

    • Właściwość spotMaxPrice ma ustawioną wartość -1.

    • Do tej puli węzłów mają zastosowanie wartości nodeLabels i nodeTaints. Te wartości służą do planowania obciążeń na węzłach w puli węzłów.

Konfigurowanie przestrzeni nazw

  1. Uruchom polecenie , kubectl create namespace aby utworzyć przestrzeń nazw o nazwie costsavings dla aplikacji. Ta przestrzeń nazw ułatwi wybieranie obciążeń.

    kubectl create namespace costsavings
    

    Oto dane wyjściowe z poprzedniego polecenia:

    namespace/costsavings created
    

Planowanie zasobnika z koligacją węzła typu spot

Zasobnik można zaplanować do uruchomienia w węźle typu spot, dodając tolerancję i koligację do pliku manifestu wdrożenia zasobnika. Gdy tolerancja i koligacja węzła odpowiadają defektowi i etykiecie zastosowanej do węzłów typu spot, zasobnik jest zaplanowany na tych węzłach.

Węzły w puli węzłów typu spot mają przypisaną etykietę równą kubernetes.azure.com/scalesetpriority=spot:NoSchedule i etykietę równą kubernetes.azure.com/scalesetpriority=spot. Użyj informacji w tej parze klucz-wartość w tolerations sekcji i affinity pliku manifestu YAML obciążeń. Po skonfigurowaniu drugiej puli przetwarzania wsadowego jako puli węzłów typu spot możesz utworzyć plik wdrożenia, aby zaplanować uruchamianie obciążeń w tej puli.

  1. Utwórz plik manifestu dla wdrożenia platformy Kubernetes o nazwie spot-node-deployment.yaml przy użyciu zintegrowanego edytora:

    code spot-node-deployment.yaml
    

    Napiwek

    Usługa Cloud Shell udostępnia zintegrowany edytor plików. Edytor usługi Cloud Shell obsługuje różne funkcje, takie jak wyróżnianie elementów języka, paleta poleceń i eksplorator plików. Na potrzeby prostego tworzenia i edytowania plików otwórz edytor, uruchamiając polecenie code . w terminalu usługi Cloud Shell. Działanie to powoduje otwarcie edytora z aktywnym katalogiem roboczym ustawionym w terminalu. Aby bezpośrednio otworzyć plik manifestu w celu szybkiej edycji, uruchom code spot-node-deployment.yaml. To polecenie powoduje otwarcie edytora bez eksploratora plików.

  2. Wklej do tego pliku poniższy tekst:

    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. Naciśnij klawisze Ctrl+S , aby zapisać plik, a następnie naciśnij klawisze Ctrl+Q , aby zamknąć edytor.

  4. Uruchom polecenie , kubectl apply aby zastosować konfigurację i wdrożyć aplikację w costsavings przestrzeni nazw:

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

    Oto dane wyjściowe z poprzedniego polecenia:

    pod/nginx created
    
  5. Aby pobrać więcej informacji o uruchomionym zasobniku, możesz użyć flagi podczas uruchamiania -o wide kubectl get pods polecenia. W tym przypadku chcesz zobaczyć, w którym węźle jest zaplanowany zasobnik. Upewnij się, że wykonano zapytanie o zasobniki w przestrzeni nazw costsavings.

    kubectl get pods --namespace costsavings -o wide
    

    Dane wyjściowe powinny wyglądać podobnie do następujących:

    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>
    

    Zwróć uwagę na nazwę węzła, aks-batchprocpl2-25254417-vmss000000. Ten węzeł jest częścią utworzonej wcześniej puli węzłów typu spot batchprocpl2.