Samouczek: Skalowanie aplikacji w usłudze Azure Kubernetes Service (AKS)

Jeśli wykonujesz kolejno zadania z samouczków, masz już działający klaster Kubernetes w usłudze AKS z wdrożoną przykładową aplikacją do głosowania platformy Azure. Ta część samouczka, piąta z siedmiu, obejmuje skalowanie w poziomie zasobników w tej aplikacji oraz skalowanie automatyczne. Dowiesz się również, jak przez skalowanie liczby węzłów maszyny wirtualnej platformy Azure zmieniać możliwości hostowania obciążeń w klastrze. Omawiane kwestie:

  • Skalowanie węzłów rozwiązania Kubernetes
  • Ręczne skalowanie zasobników rozwiązania Kubernetes, w ramach których działa Twoja aplikacja
  • Konfigurowanie automatycznie skalowanych zasobników, w ramach których działa fronton aplikacji

W kolejnych samouczkach aplikacja Azure Vote zostanie zaktualizowana do nowej wersji.

Zanim rozpoczniesz

W poprzednich samouczkach aplikacja była spakowana do obrazu kontenera. Ten obraz został przekazany do usługi Azure Container Registry i utworzono klaster usługi AKS. Aplikacja została następnie wdrożona w klastrze usługi AKS. Jeśli nie wykonano tych kroków, a chcesz kontynuować pracę, zacznij od części Samouczek 1 — tworzenie obrazów kontenera.

Ten samouczek wymaga interfejsu wiersza polecenia platformy Azure w wersji 2.0.53 lub nowszej. Uruchom polecenie az --version, aby dowiedzieć się, jaka wersja jest używana. Jeśli konieczna będzie instalacja lub uaktualnienie, zobacz Instalowanie interfejsu wiersza polecenia platformy Azure.

Ręczne skalowanie zasobników

W momencie wdrożenia frontonu aplikacji Azure Vote i wystąpienia pamięci podręcznej Redis w poprzednich samouczkach została utworzona pojedyncza replika. Aby wyświetlić liczbę i stan zasobników w klastrze, użyj polecenia kubectl get w następujący sposób:

kubectl get pods

Poniższe przykładowe dane wyjściowe zawierają jeden zasobnik frontonu i jeden zasobnik zaplecza:

NAME                               READY     STATUS    RESTARTS   AGE
azure-vote-back-2549686872-4d2r5   1/1       Running   0          31m
azure-vote-front-848767080-tf34m   1/1       Running   0          31m

Aby ręcznie zmienić liczbę zasobników w ramach wdrożenia aplikacji azure-vote-front, użyj polecenia kubectl scale. W poniższym przykładzie liczba zasobników frontonu jest zwiększana do 5:

kubectl scale --replicas=5 deployment/azure-vote-front

Uruchom ponownie program kubectl get pods, aby sprawdzić, czy usługę AKS pomyślnie utworzy dodatkowe zasobniki. Po około minucie zasobniki będą dostępne w klastrze:

kubectl get pods

                                    READY     STATUS    RESTARTS   AGE
azure-vote-back-2606967446-nmpcf    1/1       Running   0          15m
azure-vote-front-3309479140-2hfh0   1/1       Running   0          3m
azure-vote-front-3309479140-bzt05   1/1       Running   0          3m
azure-vote-front-3309479140-fvcvm   1/1       Running   0          3m
azure-vote-front-3309479140-hrbf2   1/1       Running   0          15m
azure-vote-front-3309479140-qphz8   1/1       Running   0          3m

Automatyczne skalowanie zasobników

Rozwiązanie Kubernetes obsługuje automatyczne skalowanie zasobników w poziomie, umożliwiające dostosowywanie liczby zasobników we wdrożeniu do użycia procesora lub innych wybranych metryk. Serwer metryk służy do zapewnienia wykorzystania zasobów w usłudze Kubernetes i jest automatycznie wdrożony w klastrach AKS w wersji 1.10 lub nowszej. Aby wyświetlić wersję klastra AKS, użyj polecenia az aks show, jak pokazano w poniższym przykładzie:

az aks show --resource-group myResourceGroup --name myAKSCluster --query kubernetesVersion --output table

Uwaga

Jeśli klaster usługi AKS jest mniejszy niż 1.10, serwer metryk nie jest instalowany automatycznie. Manifesty instalacji serwera metryk są dostępne jako zasób w wydaniach serwera metryk, co oznacza, że można je zainstalować components.yaml za pomocą adresu URL. Aby dowiedzieć się więcej na temat tych definicji YAML, zobacz sekcję Wdrażanie pliku readme.

Przykładowa instalacja:

kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/download/v0.3.6/components.yaml

Aby można było korzystać z autoskalowania, wszystkie kontenery w zasobnikach i zasobnikach muszą mieć zdefiniowane żądania i limity procesora CPU. We wdrożeniu aplikacji azure-vote-front kontener frontonu wymaga już 0,25 CPU, a limit wynosi 0,5 CPU.

Te żądania zasobów i limity są definiowane dla każdego kontenera, jak pokazano w poniższym przykładowym fragmencie kodu:

  containers:
  - name: azure-vote-front
    image: mcr.microsoft.com/azuredocs/azure-vote-front:v1
    ports:
    - containerPort: 80
    resources:
      requests:
        cpu: 250m
      limits:
        cpu: 500m

W poniższym przykładzie użyto polecenia kubectl autoscale w celu przeprowadzenia automatycznego skalowania liczby zasobników we wdrożeniu aplikacji azure-vote-front. Jeśli średnie wykorzystanie procesora CPU we wszystkich zasobnikach przekracza 50% żądanego użycia, skalowanie automatyczne zwiększa zasobniki do maksymalnie 10 wystąpień. Dla wdrożenia zostaną następnie zdefiniowane przynajmniej 3 wystąpienia:

kubectl autoscale deployment azure-vote-front --cpu-percent=50 --min=3 --max=10

Alternatywnie można utworzyć plik manifestu w celu zdefiniowania zachowania automatycznego skalowania i limitów zasobów. Poniżej przedstawiono przykład pliku manifestu o nazwie azure-vote-hpa.yaml .

apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
  name: azure-vote-back-hpa
spec:
  maxReplicas: 10 # define max replica count
  minReplicas: 3  # define min replica count
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: azure-vote-back
  targetCPUUtilizationPercentage: 50 # target CPU utilization

---

apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
  name: azure-vote-front-hpa
spec:
  maxReplicas: 10 # define max replica count
  minReplicas: 3  # define min replica count
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: azure-vote-front
  targetCPUUtilizationPercentage: 50 # target CPU utilization

Użyj kubectl apply , aby zastosować autoskalowanie zdefiniowane w pliku azure-vote-hpa.yaml manifestu.

kubectl apply -f azure-vote-hpa.yaml

Aby wyświetlić stan skalowania automatycznego, użyj polecenia kubectl get hpa w następujący sposób:

kubectl get hpa

NAME               REFERENCE                     TARGETS    MINPODS   MAXPODS   REPLICAS   AGE
azure-vote-front   Deployment/azure-vote-front   0% / 50%   3         10        3          2m

Po upływie kilku minut przy minimalnym obciążeniu aplikacji Azure Vote liczba replik zasobników zostanie automatycznie zmniejszona do 3. Możesz ponownie użyć polecenia kubectl get pods, aby sprawdzić stan usuwania niepotrzebnych zasobników.

Ręczne skalowanie węzłów usługi AKS

Jeśli klaster Kubernetes został utworzony przy użyciu poleceń z poprzedniego samouczka, ma dwa węzły. Jeśli planujesz zwiększenie lub zmniejszenie liczby obciążeń kontenerów w klastrze, możesz ręcznie dostosować liczbę węzłów.

W poniższym przykładzie liczba węzłów w klastrze Kubernetes o nazwie myAKSCluster zostanie zwiększona do trzech. Wykonanie tego polecenia może zająć kilka minut.

az aks scale --resource-group myResourceGroup --name myAKSCluster --node-count 3

Po pomyślnym skalowaniu klastra dane wyjściowe będą podobne do poniższego przykładu:

"agentPoolProfiles": [
  {
    "count": 3,
    "dnsPrefix": null,
    "fqdn": null,
    "name": "myAKSCluster",
    "osDiskSizeGb": null,
    "osType": "Linux",
    "ports": null,
    "storageProfile": "ManagedDisks",
    "vmSize": "Standard_D2_v2",
    "vnetSubnetId": null
  }

Następne kroki

W tym samouczku użyto różnych funkcji skalowania w klastrze Kubernetes. W tym samouczku omówiono:

  • Ręczne skalowanie zasobników rozwiązania Kubernetes, w ramach których działa Twoja aplikacja
  • Konfigurowanie automatycznie skalowanych zasobników, w ramach których działa fronton aplikacji
  • Ręczne skalowanie węzłów rozwiązania Kubernetes

Przejdź do następnego samouczka, aby dowiedzieć się, jak zaktualizować aplikację w rozwiązaniu Kubernetes.