Esercitazione: Ridimensionare le applicazioni nel servizio Azure KubernetesTutorial: Scale applications in Azure Kubernetes Service (AKS)

Se si sono eseguite le esercitazioni, si dispone di un cluster Kubernetes funzionante nel servizio Azure Kubernetes ed è stata distribuita l'app Azure Voting di esempio.If you've followed the tutorials, you have a working Kubernetes cluster in AKS and you deployed the sample Azure Voting app. In questa esercitazione, la quinta di sette, si aumenterà il numero di istanze dei pod nell'app e si proverà la scalabilità automatica dei pod.In this tutorial, part five of seven, you scale out the pods in the app and try pod autoscaling. Si apprenderà anche come ridimensionare il numero di nodi delle macchine virtuali di Azure per modificare la capacità del cluster per l'hosting dei carichi di lavoro.You also learn how to scale the number of Azure VM nodes to change the cluster's capacity for hosting workloads. Si apprenderà come:You learn how to:

  • Ridimensionare i nodi KubernetesScale the Kubernetes nodes
  • Ridimensionare manualmente i pod Kubernetes che eseguono l'applicazioneManually scale Kubernetes pods that run your application
  • Configurare la scalabilità automatica dei pod che eseguono il front-end dell'appConfigure autoscaling pods that run the app front-end

Nelle altre esercitazioni l'applicazione Azure Vote viene aggiornata a una nuova versione.In additional tutorials, the Azure Vote application is updated to a new version.

Prima di iniziareBefore you begin

Nelle esercitazioni precedenti è stato creato un pacchetto di un'applicazione in un'immagine del contenitore.In previous tutorials, an application was packaged into a container image. L'immagine è stata poi caricata in Registro Azure Container ed è stato creato un cluster del servizio Azure Kubernetes.This image was uploaded to Azure Container Registry, and you created an AKS cluster. L'applicazione è stata quindi distribuita nel cluster del servizio Azure Kubernetes.The application was then deployed to the AKS cluster. Se questi passaggi non sono stati ancora eseguiti e si vuole procedere, iniziare con l'Esercitazione 1: Creare immagini del contenitore.If you haven't done these steps, and would like to follow along, start with Tutorial 1 – Create container images.

Per questa esercitazione è necessario eseguire l'interfaccia della riga di comando di Azure versione 2.0.53 o successiva.This tutorial requires that you're running the Azure CLI version 2.0.53 or later. Eseguire az --version per trovare la versione.Run az --version to find the version. Se è necessario eseguire l'installazione o l'aggiornamento, vedere Installare l'interfaccia della riga di comando di Azure.If you need to install or upgrade, see Install Azure CLI.

Scalare manualmente i podManually scale pods

Quando il front-end di Azure Vote e l'istanza di Redis sono stati distribuiti nelle esercitazioni precedenti, è stata creata una singola replica.When the Azure Vote front-end and Redis instance were deployed in previous tutorials, a single replica was created. Per visualizzare il numero e lo stato dei pod nel cluster, usare il comando kubectl get come di seguito:To see the number and state of pods in your cluster, use the kubectl get command as follows:

kubectl get pods

L'output di esempio seguente illustra un pod front-end e un pod back-end: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

Per modificare manualmente il numero di pod nella distribuzione azure-vote-front, usare il comando kubectl scale.To manually change the number of pods in the azure-vote-front deployment, use the kubectl scale command. L'esempio seguente aumenta il numero di pod front-end a 5:The following example increases the number of front-end pods to 5:

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

Eseguire di nuovo kubectl get pods per verificare che il servizio Azure Kubernetes crei i pod aggiuntivi.Run kubectl get pods again to verify that AKS creates the additional pods. Dopo circa un minuto i pod aggiuntivi sono disponibili nel cluster: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

Scalare automaticamente i podAutoscale pods

Kubernetes supporta la scalabilità automatica orizzontale dei pod per modificare il numero dei pod in una distribuzione a seconda dell'utilizzo della CPU o delle altre metriche selezionate.Kubernetes supports horizontal pod autoscaling to adjust the number of pods in a deployment depending on CPU utilization or other select metrics. Il server delle metriche viene usato per fornire l'utilizzo delle risorse a Kubernetes e viene automaticamente distribuito nei cluster servizio Azure Kubernetes 1.10 e versioni successive.The Metrics Server is used to provide resource utilization to Kubernetes, and is automatically deployed in AKS clusters versions 1.10 and higher. Per vedere la versione del proprio cluster servizio Azure Kubernetes, usare il comando az aks show, come illustrato nell'esempio seguente: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

Nota

Se la versione del cluster servizio Azure Kubernetes in uso è inferiore a 1.10, il server delle metriche non verrà installato automaticamente.If your AKS cluster is less than 1.10, the Metrics Server is not automatically installed. I manifesti di installazione del server delle metriche sono disponibili come asset components.yaml nelle versioni del server delle metriche, il che significa che è possibile installarli tramite un URL.Metrics Server installation manifests are available as a components.yaml asset on Metrics Server releases, which means you can install them via a url. Per altre informazioni su queste definizioni YAML, vedere la sezione Distribuzione del file Leggimi.To learn more about these YAML definitions, see the Deployment section of the readme.

Installazione di esempio:Example installation:

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

Per usare la scalabilità automatica, i pod e i contenitori al loro interno devono avere richieste e limiti di CPU definiti.To use the autoscaler, all containers in your pods and your pods must have CPU requests and limits defined. Nella distribuzione di azure-vote-front con il contenitore front-end è richiesto già un valore di 0,25 della CPU, con un limite pari a 0,5 della CPU.In the azure-vote-front deployment, the front-end container already requests 0.25 CPU, with a limit of 0.5 CPU. Le richieste e i limiti delle risorse vengono definiti come illustrato nel frammento di codice di esempio seguente:These resource requests and limits are defined as shown in the following example snippet:

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

L'esempio seguente usa il comando kubectl autoscale per ridimensionare automaticamente il numero di pod nella distribuzione azure-vote-front.The following example uses the kubectl autoscale command to autoscale the number of pods in the azure-vote-front deployment. Se l'utilizzo medio della CPU tra tutti i pod supera il 50% dell'utilizzo richiesto, la scalabilità automatica aumenta il numero di pod fino a un massimo di 10 istanze.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. Viene quindi definito un minimo di 3 istanze per la distribuzione:A minimum of 3 instances is then defined for the deployment:

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

In alternativa, è possibile creare un file manifesto per definire il comportamento della scalabilità automatica e i limiti delle risorse.Alternatively, you can create a manifest file to define the autoscaler behavior and resource limits. Di seguito è riportato un esempio di un file manifesto denominato 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

Usare kubectl apply per applicare la scalabilità automatica definita nel file manifesto azure-vote-hpa.yaml.Use kubectl apply to apply the autoscaler defined in the azure-vote-hpa.yaml manifest file.

kubectl apply -f azure-vote-hpa.yaml

Per visualizzare lo stato della scalabilità automatica, usare il comando kubectl get hpa come di seguito: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

Dopo pochi minuti con un carico minimo sull'app Azure Vote, il numero di repliche di pod si riduce automaticamente a tre.After a few minutes, with minimal load on the Azure Vote app, the number of pod replicas decreases automatically to three. È possibile usare nuovamente kubectl get pods per visualizzare la rimozione dei pod non necessari.You can use kubectl get pods again to see the unneeded pods being removed.

Ridimensionare manualmente i nodi servizio Azure KubernetesManually scale AKS nodes

Se è stato creato usando i comandi dell'esercitazione precedente, il cluster Kubernetes include due nodi.If you created your Kubernetes cluster using the commands in the previous tutorial, it has two nodes. Se si prevede un numero maggiore o minore di carichi di lavoro dei contenitori nel cluster, è possibile modificare manualmente il numero di nodi.You can adjust the number of nodes manually if you plan more or fewer container workloads on your cluster.

Nell'esempio seguente il numero di nodi viene aumentato a tre nel cluster Kubernetes denominato myAKSCluster.The following example increases the number of nodes to three in the Kubernetes cluster named myAKSCluster. Il completamento del comando richiede alcuni minuti.The command takes a couple of minutes to complete.

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

Al termine del ridimensionamento del cluster, l'output è simile all'esempio seguente: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
  }

Passaggi successiviNext steps

In questa esercitazione sono state usate diverse funzionalità di scalabilità nel cluster Kubernetes.In this tutorial, you used different scaling features in your Kubernetes cluster. Si è appreso come:You learned how to:

  • Ridimensionare manualmente i pod Kubernetes che eseguono l'applicazioneManually scale Kubernetes pods that run your application
  • Configurare la scalabilità automatica dei pod che eseguono il front-end dell'appConfigure autoscaling pods that run the app front-end
  • Ridimensionare manualmente i nodi KubernetesManually scale the Kubernetes nodes

Passare all'esercitazione successiva per apprendere come aggiornare l'applicazione in Kubernetes.Advance to the next tutorial to learn how to update application in Kubernetes.