Esercitazione: Ridimensionare le applicazioni nel servizio Azure Kubernetes

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. 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. 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. Si apprenderà come:

  • Ridimensionare i nodi Kubernetes
  • Ridimensionare manualmente i pod Kubernetes che eseguono l'applicazione
  • Configurare la scalabilità automatica dei pod che eseguono il front-end dell'app

Nelle esercitazioni successive l'applicazione Azure Vote viene aggiornata a una nuova versione.

Prima di iniziare

Nelle esercitazioni precedenti è stato creato un pacchetto di un'applicazione in un'immagine del contenitore. L'immagine è stata poi caricata in Registro Azure Container ed è stato creato un cluster del servizio Azure Kubernetes. L'applicazione è stata quindi distribuita nel cluster del servizio Azure Kubernetes. Se questi passaggi non sono stati ancora eseguiti e si vuole procedere, iniziare con l'Esercitazione 1: Creare immagini del contenitore.

Per questa esercitazione è necessario eseguire l'interfaccia della riga di comando di Azure versione 2.0.53 o successiva. Eseguire az --version per trovare la versione. Se è necessario eseguire l'installazione o l'aggiornamento, vedere Installare l'interfaccia della riga di comando di Azure.

Scalare manualmente i pod

Quando il front-end di Azure Vote e l'istanza di Redis sono stati distribuiti nelle esercitazioni precedenti, è stata creata una singola replica. Per visualizzare il numero e lo stato dei pod nel cluster, usare il comando kubectl get come di seguito:

kubectl get pods

L'output di esempio seguente illustra un pod front-end e un pod back-end:

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. L'esempio seguente aumenta il numero di pod front-end a 5:

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

Eseguire di nuovo kubectl get pods per verificare che il kubectl kubectl crei correttamente i pod aggiuntivi. Dopo circa un minuto, i pod sono disponibili nel 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 pod

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. 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. Per vedere la versione del proprio cluster servizio Azure Kubernetes, usare il comando az aks show, come illustrato nell'esempio seguente:

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. I manifesti di installazione del server di metriche sono disponibili come asset nelle versioni del server di metriche, il che significa che components.yaml è possibile installarli tramite un URL. Per altre informazioni su queste definizioni YAML, vedere la sezione Distribuzione del file Leggimi.

Installazione di esempio:

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. 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.

Queste richieste di risorse e limiti sono definiti per ogni contenitore, come illustrato nel frammento di esempio seguente:

  containers:
  - name: azure-vote-front
    image: mcr.microsoft.com/azuredocs/azure-vote-front:v1
    ports:
    - containerPort: 80
    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. 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. Viene quindi definito un minimo di 3 istanze per la distribuzione:

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. Di seguito è riportato un esempio di un file manifesto denominato 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.

kubectl apply -f azure-vote-hpa.yaml

Per visualizzare lo stato della scalabilità automatica, usare il comando kubectl get hpa come di seguito:

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. È possibile usare nuovamente kubectl get pods per visualizzare la rimozione dei pod non necessari.

Ridimensionare manualmente i nodi servizio Azure Kubernetes

Se è stato creato usando i comandi dell'esercitazione precedente, il cluster Kubernetes include due nodi. Se si prevede un numero maggiore o minore di carichi di lavoro dei contenitori nel cluster, è possibile modificare manualmente il numero di nodi.

Nell'esempio seguente il numero di nodi viene aumentato a tre nel cluster Kubernetes denominato myAKSCluster. Il completamento del comando richiede alcuni minuti.

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

Al termine del ridimensionamento del cluster, l'output è simile all'esempio seguente:

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

Passaggi successivi

In questa esercitazione sono state usate diverse funzionalità di scalabilità nel cluster Kubernetes. Si è appreso come:

  • Ridimensionare manualmente i pod Kubernetes che eseguono l'applicazione
  • Configurare la scalabilità automatica dei pod che eseguono il front-end dell'app
  • Ridimensionare manualmente i nodi Kubernetes

Passare all'esercitazione successiva per apprendere come aggiornare l'applicazione in Kubernetes.