Ćwiczenie — konfigurowanie pul węzłów typu spot za pomocą 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 standardową pulę węzłów użytkownika, użyto automatycznego skalowania klastra do zarządzania tworzeniem węzłów i liczbę węzłów przeskalowano ręcznie.

Następnym krokiem jest dodanie puli węzłów użytkownika typu spot z automatycznym skalowaniem, aby zmniejszyć koszty operacyjne 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ą preferencją węzłów, aby pod był zaplanowany na węzłach w puli węzłów typu spot.

Utwórz pulę węzłów typu spot

Należy utworzyć oddzielną pulę węzłów obsługującą usługę przetwarzania wsadowego. Ta pula węzłów jest pulą węzłów typu spot, która korzysta z polityki usuwania i maksymalnej ceny typu spot wynoszącej -1.

  1. Uruchom to samo polecenie az aks nodepool add co w poprzednim ćwiczeniu, aby dodać nową pulę węzłów typu spot do klastra. 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 typu 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 z powodu ograniczeń pojemności w wybranej 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ład danych wyjściowych 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 tym wyniku różni się od tego, co widać w poprzednich pulach węzłów. Przejrzyjmy następujące elementy:

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

    • Ustawiono zarówno wartości maxCount, jak i minCount.

    • Właściwość scaleSetEvictionPolicy jest ustawiona na wartość Delete.

    • Właściwość scaleSetPriority jest ustawiona na wartość Spot.

    • Właściwość spotMaxPrice jest ustawiona na wartość -1.

    • Do tej puli węzłów są stosowane nodeLabels i nodeTaints. Te wartości służą do planowania obciążeń w 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. Użyjesz tej przestrzeni nazw, aby 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 tolerację i powiązanie do pliku manifestu wdrożenia zasobnika. Gdy tolerancja i przywiązanie węzła odpowiadają sprośności i etykiecie zastosowanej do węzłów typu spot, zasobnik jest umieszczany na tych węzłach.

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

  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
    

    Wskazówka

    Usługa Cloud Shell zawiera zintegrowany edytor plików. Edytor usługi Cloud Shell obsługuje funkcje, takie jak wyróżnianie języków, paleta poleceń i eksplorator plików. W celu prostego tworzenia i edytowania plików uruchom edytor, uruchamiając code . w terminalu usługi Cloud Shell. Ta akcja spowoduje otwarcie edytora z aktywnym katalogiem roboczym ustawionym w terminalu. Aby otworzyć plik manifestu bezpośrednio w celu szybkiego edytowania, uruchom polecenie code spot-node-deployment.yaml. To polecenie otwiera edytor bez Eksploratora plików.

  2. Wklej następujący tekst do pliku:

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

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

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

    Oto dane wyjściowe z poprzedniego polecenia:

    pod/nginx created
    
  5. Aby uzyskać więcej informacji o uruchomionym zasobniku, użyj flagi -o wide podczas uruchamiania polecenia kubectl get pods. W takim przypadku chcesz zobaczyć, w którym węźle zaplanowano zasobnik. Pamiętaj, aby wykonać zapytanie dotyczące zasobników 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 batchprocpl2 spot.