Ćwiczenie — konfigurowanie wielu węzłów i włączanie skalowania do zera w klastrze AKS

Ukończone

Usługa Azure Kubernetes Service umożliwia tworzenie różnych pul węzłów w celu dopasowania określonych obciążeń do węzłów uruchomionych w poszczególnej puli węzłów.

Jak pamiętasz z przykładu śledzenia dronów, zespół opracował nową usługę modelowania predykcyjnego, która przetwarza informacje o ścieżce lotu w ekstremalnych warunkach pogodowych i tworzy optymalne trasy lotu. Ta usługa wymaga obsługi maszyny wirtualnej opartej na procesorze graficznym GPU i jest uruchamiana tylko w określonych dniach w tygodniu. Zespół chce upewnić się, że żadne maszyny wirtualne nie są używane, gdy usługa nie jest uruchomiona.

W tym miejscu utworzysz klaster Kubernetes zarządzany przez usługę Azure Kubernetes Service (AKS). Następnie skonfigurujesz klaster tak, aby obsługiwał wiele pul węzłów i umożliwić klastrom skalowanie węzłów w pulach węzłów. Następnie dodasz drugą pulę węzłów, aby obsługiwać obciążenia użytkowników z liczbą węzłów dynamicznych. Na koniec przeskalujesz liczbę węzłów do zera, aby zmniejszyć koszt węzłów używanych w klastrze usługi AKS.

Tworzenie nowej grupy zasobów

  1. Zaloguj się do usługi Azure Cloud Shell przy użyciu konta platformy Azure. Wybierz usługę Cloud Shell w wersji Bash.

  2. Ponownie użyjesz wartości utworzonych tutaj we wszystkich ćwiczeniach w tym module. Zapisz dane wyjściowe do użycia w przyszłości.

  3. Wybierz region do hostowania grupy zasobów. Funkcje z późniejszych ćwiczeń nie są dostępne we wszystkich regionach. Z tego powodu zalecamy użycie regionu eastus jako regionu. Jeśli zdecydujesz się użyć innej wartości, zmień wartość .REGION_NAME

    Uruchom następujące polecenia, aby zarejestrować zmienne:

    REGION_NAME=eastus
    RESOURCE_GROUP=rg-akscostsaving
    AKS_CLUSTER_NAME=akscostsaving-$RANDOM
    

    Napiwek

    Do kopiowania poleceń do schowka możesz używać przycisku Kopiuj. Aby wkleić, kliknij prawym przyciskiem myszy nowy wiersz w terminalu usługi Cloud Shell i wybierz polecenie Wklej lub użyj skrótu klawiaturowego Shift+Insert (⌘+V w systemie macOS).

    Każdą wartość można sprawdzić, uruchamiając echo polecenie, echo $REGION_NAMEna przykład .

  4. Zanotuj element AKS_CLUSTER_NAME. W kolejnych ćwiczeniach użyjesz tej wartości do czyszczenia i konfigurowania ustawień klastra.

    echo $AKS_CLUSTER_NAME
    
  5. Utwórz nową grupę zasobów o nazwie rg-akscostsaving. Wszystkie zasoby utworzone w tych ćwiczeniach zostaną wdrożone w tej grupie zasobów. Jedna grupa zasobów ułatwia czyszczenie zasobów po ukończeniu modułu.

    az group create \
        --name $RESOURCE_GROUP \
        --location $REGION_NAME
    

Tworzenie klastra AKS

Po utworzeniu grupy zasobów można utworzyć klastry usługi AKS w grupie. Pierwszym krokiem jest pobranie wersji rozwiązania Kubernetes w wybranym regionie. Ta wersja jest ustawiona w celu skonfigurowania klastra.

  1. Aby uzyskać wersję platformy Kubernetes, uruchom az aks get-versions polecenie . Poniższe zapytanie zwraca wersję platformy Kubernetes spoza wersji zapoznawczej. Zapisz wartość w zmiennej powłoki Bash o nazwie VERSION. Uruchom poniższe polecenie, aby pobrać i zapisać numer wersji:

    VERSION=$(az aks get-versions \
        --location $REGION_NAME \
        --query "values[?isPreview==null].version | [-1]" \
        --output tsv)
    echo $VERSION
    
  2. Uruchom polecenie , az aks create aby utworzyć klaster usługi AKS. Klaster działa z dwoma węzłami w puli węzłów systemowych. Wykonanie tego polecenia może potrwać kilka minut.

    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
    

    Polecenie az aks create ma kilka parametrów, które umożliwiają precyzyjną konfigurację klastra Kubernetes. Są dwa ważne parametry konfigurowania poprawnej obsługi w klastrze na potrzeby skalowania i wielu puli węzłów:

    Parametr i wartość opis
    --load-balancer-sku standard Domyślna obsługa modułu równoważenia obciążenia w usłudze AKS jest w warstwie basic. Moduł równoważenia obciążenia w warstwie basic nie jest obsługiwany w przypadku używania wielu pul węzłów. Ustaw wartość na standard.
    --vm-set-type VirtualMachineScaleSets Do korzystania z funkcji skalowania w usłudze AKS są wymagane zestawy skalowania maszyn wirtualnych. Ten parametr umożliwia obsługę zestawów skalowania.

    Zwróć uwagę, że dwa węzły są konfigurowane w domyślnej puli węzłów przy użyciu parametru --node-count 2. Przypomnij sobie z poprzedniego opisu, że podstawowe usługi systemowe działają w tej puli węzłów systemowych. Ważne jest, aby klastry produkcyjne używały co najmniej --node-count 3 węzłów w celu zapewnienia niezawodności w operacji klastra. W tym ćwiczeniu na potrzeby rozważania kosztów stosowane są tylko dwa węzły.

  3. Uruchom polecenie az aks nodepool list, aby wyświetlić listę pul węzłów w nowym klastrze:

    az aks nodepool list --resource-group $RESOURCE_GROUP --cluster-name $AKS_CLUSTER_NAME
    

    Oto przykładowe dane wyjściowe tego polecenia:

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

    Zwróć uwagę, że pula węzłów mode jest ustawiona na System wartość i że name element jest automatycznie przypisywany.

Dodawanie puli węzłów

  1. Klaster ma jedną pulę węzłów. Dodaj drugą pulę węzłów, uruchamiając az aks nodepool add polecenie . Uruchom polecenie w tym kroku, aby utworzyć pulę węzłów użytkownika z trzema węzłami i nazwą batchprocpl. Pamiętaj, że nazwy pul węzłów muszą zaczynać się małą literą i zawierać tylko znaki alfanumeryczne. Nazwy pul węzłów są ograniczone do 12 znaków dla pul węzłów systemu Linux i 6 znaków dla pul węzłów systemu Windows.

    Uruchom następujące polecenie:

    az aks nodepool add \
        --resource-group $RESOURCE_GROUP \
        --cluster-name $AKS_CLUSTER_NAME \
        --name batchprocpl \
        --node-count 2
    
  2. Uruchom polecenie az aks nodepool list, aby wyświetlić na liście nową pulę węzłów w nowym klastrze:

    az aks nodepool list --resource-group $RESOURCE_GROUP --cluster-name $AKS_CLUSTER_NAME
    

    Oto przykładowe dane wyjściowe tego polecenia:

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

    Zwróć uwagę, że mode nowej puli węzłów jest ustawiony na User, a jego nazwa name to batchprocpl.

Skalowanie liczby węzłów w puli węzłów do zera

Uruchom polecenie , az aks nodepool scale aby ręcznie skalować węzły w puli węzłów.

Uruchom polecenie az aks nodepool scale i użyj parametru --node-count, aby ustawić wartość liczby węzłów na 0.

Oto przykład polecenia:

az aks nodepool scale \
    --resource-group $RESOURCE_GROUP \
    --cluster-name $AKS_CLUSTER_NAME \
    --name batchprocpl \
    --node-count 0

Oto przykładowe dane wyjściowe tego polecenia:

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

Zwróć uwagę, że wartość parametru puli count węzłów jest ustawiona na 0, a wartość jest ustawiona enableAutoScaling na nullwartość . Aby zaplanować obciążenia, należy ręcznie zwiększyć liczbę węzłów dla tej puli węzłów, ponieważ tworzenie węzła nie jest wykonywane automatycznie.

Konfigurowanie kontekstu platformy Kubernetes

W wyniku poprzedniego polecenia liczba puli węzłów jest ustawiona na 0. Liczbę węzłów dostępnych w klastrze można potwierdzić, uruchamiając polecenie kubectl get nodes.

  1. Uruchom polecenie kubectl , aby wchodzić w interakcje z serwerem interfejsu API klastra. Aby umożliwić aplikacji kubectl nawiązanie połączenia, należy skonfigurować kontekst klastra Kubernetes. Kontekst zawiera adres klastra, użytkownika i przestrzeń nazw. az aks get-credentials Uruchom polecenie , aby skonfigurować kontekst Kubernetes w usłudze Cloud Shell.

    Pobierz poświadczenia klastra, uruchamiając następujące polecenie:

    az aks get-credentials \
        --resource-group $RESOURCE_GROUP \
        --name $AKS_CLUSTER_NAME
    

    Oto przykładowe dane wyjściowe tego polecenia.

    Merged "akscostsaving-17835" as current context in /home/user/.kube/config
    
  2. Wyświetl listę węzłów w pulach węzłów.

    kubectl get nodes
    

    Oto przykładowe dane wyjściowe polecenia:

    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
    

    Zwróć uwagę, że mimo tego, iż polecenie az aks nodepool list wyświetla listę dwóch pul węzłów, w klastrze są dostępne tylko dwa węzły i oba są z puli nodepool1.

Aby zoptymalizować koszty korzystania z usługi AKS w przypadku bezpośredniego zarządzania wymaganiami dotyczącymi obciążeń, dobrą strategią jest:

  • Ręczne skalowanie liczby węzłów w pulach węzłów.
  • Skalowanie drogich, opartych na serii NV pul węzłów użytkownika do zera.

Przyjrzyjmy się strategii, w której chcesz skalować węzły, ale nie kontrolujesz żądania bezpośrednio.