Tutorial: Skalieren von Anwendungen in Azure Kubernetes Service (AKS)Tutorial: Scale applications in Azure Kubernetes Service (AKS)

Wenn Sie die Tutorials durchgearbeitet haben, verfügen Sie über einen funktionsfähigen Kubernetes-Cluster in AKS und haben die Azure Voting-Beispiel-App bereitgestellt.If you've followed the tutorials, you have a working Kubernetes cluster in AKS and you deployed the sample Azure Voting app. In diesem Tutorial – Teil 5 von 7 – skalieren Sie die Pods in der App auf und testen das Feature der automatischen Skalierung von Pods.In this tutorial, part five of seven, you scale out the pods in the app and try pod autoscaling. Sie erfahren auch, wie Sie die Anzahl von Azure-VM-Knoten skalieren, um die Clusterkapazität für das Hosten von Workloads zu ändern.You also learn how to scale the number of Azure VM nodes to change the cluster's capacity for hosting workloads. Folgendes wird vermittelt:You learn how to:

  • Skalieren der Kubernetes-KnotenScale the Kubernetes nodes
  • Manuelles Skalieren von Kubernetes-Pods, die Ihre Anwendung ausführenManually scale Kubernetes pods that run your application
  • Konfigurieren der automatischen Skalierung von Pods, die das App-Front-End ausführenConfigure autoscaling pods that run the app front-end

In den wieteren Tutorials wird die Anwendung Azure Vote auf eine neue Version aktualisiert.In additional tutorials, the Azure Vote application is updated to a new version.

VoraussetzungenBefore you begin

In den vorherigen Tutorials wurde eine Anwendung als Containerimage verpackt.In previous tutorials, an application was packaged into a container image. Dieses Image wurde in Azure Container Registry hochgeladen, und Sie haben einen AKS-Cluster erstellt.This image was uploaded to Azure Container Registry, and you created an AKS cluster. Die Anwendung wurde dann für den AKS-Cluster bereitgestellt.The application was then deployed to the AKS cluster. Wenn Sie diese Schritte nicht ausgeführt haben und dies jetzt nachholen möchten, beginnen Sie mit Tutorial 1: Erstellen von Containerimages.If you haven't done these steps, and would like to follow along, start with Tutorial 1 – Create container images.

Für dieses Tutorial müssen Sie mindestens Version 2.0.53 der Azure CLI ausführen.This tutorial requires that you're running the Azure CLI version 2.0.53 or later. Führen Sie az --version aus, um die Version zu finden.Run az --version to find the version. Informationen zum Durchführen einer Installation oder eines Upgrades finden Sei bei Bedarf unter Installieren der Azure CLI.If you need to install or upgrade, see Install Azure CLI.

Manuelles Skalieren von PodsManually scale pods

Wenn in vorhergehenden Tutorials das Azure Vote-Front-End und eine Redis-Instanz bereitgestellt wurden, wurde ein einzelnes Replikat erstellt.When the Azure Vote front-end and Redis instance were deployed in previous tutorials, a single replica was created. Verwenden Sie den Befehl kubectl get wie folgt, um Anzahl und Status der Pods in Ihrem Cluster anzuzeigen:To see the number and state of pods in your cluster, use the kubectl get command as follows:

kubectl get pods

Die folgende Beispielausgabe zeigt einen Front-End-Pod und einen Back-End-Pod:The following example output shows one front-end pod and one back-end pod:

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

Ändern Sie die Anzahl von Pods in der Bereitstellung azure-vote-front manuell mithilfe des Befehls kubectl scale.To manually change the number of pods in the azure-vote-front deployment, use the kubectl scale command. Im folgenden Beispiel wird die Anzahl von Front-End-Pods auf 5 erhöht:The following example increases the number of front-end pods to 5:

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

Führen Sie kubectl get pods erneut aus, um sicherzustellen, dass AKS die zusätzlichen Pods erstellt.Run kubectl get pods again to verify that AKS creates the additional pods. Nach ca. einer Minute sind die zusätzlichen Pods in Ihrem Cluster verfügbar:After a minute or so, the additional pods are available in your cluster:

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

Automatisches Skalieren von PodsAutoscale pods

Kubernetes unterstützt die automatische horizontale Skalierung von Pods, um die Anzahl von Pods in einer Bereitstellung je nach CPU-Nutzung und anderen ausgewählten Metriken anzupassen.Kubernetes supports horizontal pod autoscaling to adjust the number of pods in a deployment depending on CPU utilization or other select metrics. Der Metrikserver wird verwendet, um die Ressourcenverwendung für Kubernetes bereitzustellen, und in AKS-Clustern der Version 1.10 und höher wird er automatisch bereitgestellt.The Metrics Server is used to provide resource utilization to Kubernetes, and is automatically deployed in AKS clusters versions 1.10 and higher. Verwenden Sie zum Anzeigen der Version Ihres AKS-Clusters den Befehl az aks show. Dies ist im folgenden Beispiel dargestellt:To see the version of your AKS cluster, use the az aks show command, as shown in the following example:

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

Hinweis

Hat Ihr AKS-Cluster eine ältere Version als 1.10, wird der Metrikserver nicht automatisch installiert.If your AKS cluster is less than 1.10, the Metrics Server is not automatically installed. Um die Installation auszuführen, klonen Sie das GitHub-Repository metrics-server, und installieren Sie die Beispiele für Ressourcendefinitionen.To install, clone the metrics-server GitHub repo and install the example resource definitions. Informationen zum Anzeigen des Inhalts dieser YAML-Definitionen finden Sie unter Metrics Server for Kubernetes 1.8+ (Metrics Server für Kubernetes 1.8+).To view the contents of these YAML definitions, see Metrics Server for Kuberenetes 1.8+.

git clone https://github.com/kubernetes-incubator/metrics-server.git
kubectl create -f metrics-server/deploy/1.8+/

Um die automatische Skalierungsfunktion zu verwenden, müssen für alle Container in Ihren Pods sowie für Ihre Pods CPU-Anforderungen und -Grenzwerte definiert sein.To use the autoscaler, all containers in your pods and your pods must have CPU requests and limits defined. In der azure-vote-front-Bereitstellung fordert der Front-End-Container bereits 0,25 CPU an, und es gilt ein Grenzwert von 0,5 CPU.In the azure-vote-front deployment, the front-end container already requests 0.25 CPU, with a limit of 0.5 CPU. Diese Ressourcenanforderungen und -grenzwerte sind so definiert, wie im folgenden Beispielcodeausschnitt gezeigt:These resource requests and limits are defined as shown in the following example snippet:

resources:
  requests:
     cpu: 250m
  limits:
     cpu: 500m

Das folgende Beispiel verwendet den Befehl kubectl autoscale, um die Anzahl von Pods in der Bereitstellung azure-vote-front automatisch zu skalieren.The following example uses the kubectl autoscale command to autoscale the number of pods in the azure-vote-front deployment. Wenn die durchschnittliche CPU-Auslastung aller Pods 50 % der angeforderten Nutzung überschreitet, erhöht die Autoskalierung die Pods auf maximal 10 Instanzen.If average CPU utilization across all pods exceeds 50% of their requested usage, the autoscaler increases the pods up to a maximum of 10 instances. Mindestens 3 Instanzen werden dann für die Bereitstellung festgelegt:A minimum of 3 instances is then defined for the deployment:

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

Alternativ können Sie eine Manifestdatei erstellen, um das Verhalten der Autoskalierung und Ressourcengrenzwerte zu definieren.Alternatively, you can create a manifest file to define the autoscaler behavior and resource limits. Es folgt ein Beispiel für eine Manifestdatei namens azure-vote-hpa.yaml.The following is an example of a manifest file named 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

Verwenden Sie kubectl apply, um die in der Manifestdatei azure-vote-hpa.yaml definierte Autoskalierung anzuwenden.Use kubectl apply to apply the autoscaler defined in the azure-vote-hpa.yaml manifest file.

kubectl apply -f azure-vote-hpa.yaml

Führen Sie den kubectl get hpa-Befehl wie folgt aus, um den Status der automatischen Skalierungsfunktion anzuzeigen:To see the status of the autoscaler, use the kubectl get hpa command as follows:

kubectl get hpa

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

Nach einigen Minuten mit minimaler Last in der Azure Vote-App sinkt die Anzahl von Podreplikaten automatisch auf drei.After a few minutes, with minimal load on the Azure Vote app, the number of pod replicas decreases automatically to three. Sie können kubectl get pods erneut ausführen, um zu sehen, wie die nicht benötigten Pods entfernt werden.You can use kubectl get pods again to see the unneeded pods being removed.

Manuelles Skalieren von AKS-KnotenManually scale AKS nodes

Wenn Sie Ihren Kubernetes-Cluster mithilfe der Befehle im vorherigen Tutorial erstellt haben, verfügt er über zwei Knoten.If you created your Kubernetes cluster using the commands in the previous tutorial, it has two nodes. Sie können die Anzahl der Knoten manuell anpassen, wenn Sie größere oder kleinere Containerworkloads in Ihrem Cluster planen.You can adjust the number of nodes manually if you plan more or fewer container workloads on your cluster.

Im folgenden Beispiel wird die Anzahl von Knoten im Kubernetes-Cluster myAKSCluster auf drei erhöht.The following example increases the number of nodes to three in the Kubernetes cluster named myAKSCluster. Diese Ausführung dieses Befehls dauert einige Minuten.The command takes a couple of minutes to complete.

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

Wenn der Cluster erfolgreich skaliert wurde, sieht die Ausgabe so wie im folgenden Beispiel aus:When the cluster has successfully scaled, the output is similar to following example:

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

Nächste SchritteNext steps

In diesem Tutorial haben Sie verschiedene Skalierungsfunktionen in Ihrem Kubernetes-Cluster verwendet.In this tutorial, you used different scaling features in your Kubernetes cluster. Sie haben Folgendes gelernt:You learned how to:

  • Manuelles Skalieren von Kubernetes-Pods, die Ihre Anwendung ausführenManually scale Kubernetes pods that run your application
  • Konfigurieren der automatischen Skalierung von Pods, die das App-Front-End ausführenConfigure autoscaling pods that run the app front-end
  • Manuelles Skalieren der Kubernetes-KnotenManually scale the Kubernetes nodes

Fahren Sie mit dem nächsten Tutorial fort, um zu erfahren, wie Anwendungen in Kubernetes aktualisiert werden.Advance to the next tutorial to learn how to update application in Kubernetes.