Esercitazione: Ridimensionare le applicazioni nel servizio Azure Kubernetes

Se sono state seguite le esercitazioni precedenti, si dispone di un cluster Kubernetes funzionante e di un'app front di Azure Store.

In questa esercitazione, parte sei di sette, si aumentano le istanze dei pod nell'app, si prova la scalabilità automatica dei pod e si ridimensiona il numero di nodi della macchina virtuale di Azure per modificare la capacità del cluster per l'hosting dei carichi di lavoro. Scopri 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.

Operazioni preliminari

Nelle esercitazioni precedenti è stata inserita un'applicazione in un'immagine del contenitore, è stata caricata l'immagine in Registro Azure Container, è stato creato un cluster del servizio Azure Kubernetes, è stata distribuita un'applicazione ed è stato usato il bus di servizio di Azure per ridistribuire un'applicazione aggiornata. Se questi passaggi non sono stati completati e si vuole seguire questa procedura, iniziare con Esercitazione 1 - Preparare l'applicazione per il servizio Azure Kubernetes.

Questa esercitazione richiede l'interfaccia della riga di comando di Azure 2.34.1 o versioni successive. 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

  1. Visualizzare i pod nel cluster usando il comando kubectl get.

    kubectl get pods
    

    L'output di esempio seguente mostra i pod che eseguono l'app Front di Azure Store:

    NAME                               READY     STATUS     RESTARTS   AGE
    order-service-848767080-tf34m      1/1       Running    0          31m
    product-service-4019737227-2q2qz   1/1       Running    0          31m
    store-front-2606967446-2q2qz       1/1       Running    0          31m
    
  2. Modificare manualmente il numero di pod nella distribuzione store-front usando il comando kubectl scale.

    kubectl scale --replicas=5 deployment.apps/store-front
    
  3. Verificare che i pod aggiuntivi siano stati creati usando il comando kubectl get pods.

    kubectl get pods
    

    L'output di esempio seguente mostra i pod aggiuntivi che eseguono l'app Front di Azure Store:

                                      READY     STATUS    RESTARTS   AGE
    store-front-2606967446-2q2qzc     1/1       Running   0          15m
    store-front-3309479140-2hfh0      1/1       Running   0          3m
    store-front-3309479140-bzt05      1/1       Running   0          3m
    store-front-3309479140-fvcvm      1/1       Running   0          3m
    store-front-3309479140-hrbf2      1/1       Running   0          15m
    store-front-3309479140-qphz8      1/1       Running   0          3m
    

Scalare automaticamente i pod

Per usare la scalabilità automatica orizzontale dei pod, tutti i contenitori devono avere richieste e limiti di CPU definiti e i pod devono avere richieste specificate. Nella distribuzione aks-store-quickstart, il contenitore front-end richiede 1 milione di CPU con un limite di 1000 m di CPU.

Queste richieste e limiti di risorse vengono definiti per ogni contenitore, come illustrato nell'esempio seguente YAML di esempio:

...
  containers:
  - name: store-front
    image: ghcr.io/azure-samples/aks-store-demo/store-front:latest
    ports:
    - containerPort: 8080
      name: store-front
...
    resources:
      requests:
        cpu: 1m
...
      limits:
        cpu: 1000m
...

Ridimensionare automaticamente i pod usando un file manifesto

  1. Creare un file manifesto per definire il comportamento del ridimensionamento automatico e i limiti delle risorse, come illustrato nel file manifesto aks-store-quickstart-hpa.yaml di esempio condensato seguente:

    apiVersion: autoscaling/v2
    kind: HorizontalPodAutoscaler
    metadata:
      name: store-front-hpa
    spec:
      maxReplicas: 10 # define max replica count
      minReplicas: 3  # define min replica count
      scaleTargetRef:
        apiVersion: apps/v1
        kind: Deployment
        name: store-front
      metrics:
      - type: Resource
        resource:
          name: cpu
          target:
            type: Utilization
            averageUtilization: 50
    
  2. Applicare il file manifesto di scalabilità automatica usando il comando kubectl apply.

    kubectl apply -f aks-store-quickstart-hpa.yaml
    
  3. Controllare lo stato del ridimensionamento automatico usando il comando kubectl get hpa.

    kubectl get hpa
    

    Dopo pochi minuti con un carico minimo sull'app Azure Store Front, il numero di repliche di pod si riduce a tre. È possibile usare nuovamente kubectl get pods per visualizzare la rimozione dei pod non necessari.

Nota

È possibile abilitare il componente aggiuntivo del servizio Azure Kubernetes basato su eventi (KEDA) del servizio Azure Kubernetes per favorire il ridimensionamento in base al numero di eventi che devono essere elaborati. Per altre informazioni, vedere Abilitare la scalabilità automatica semplificata delle applicazioni con il componente aggiuntivo KeDA (Event-Driven AutoScaling) di Kubernetes (anteprima).

Ridimensionare manualmente i nodi servizio Azure Kubernetes

Se il cluster Kubernetes è stato creato usando i comandi delle esercitazioni precedenti, il cluster ha due nodi. Se si vuole aumentare o ridurre questa quantità, è possibile regolare 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.

  • Ridimensionare i nodi del cluster usando il comando az aks scale.

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

    Una volta ridimensionato correttamente il cluster, l'output sarà simile all'output di esempio seguente:

    "aadProfile": null,
    "addonProfiles": null,
    "agentPoolProfiles": [
      {
        ...
        "count": 3,
        "mode": "System",
        "name": "nodepool1",
        "osDiskSizeGb": 128,
        "osDiskType": "Managed",
        "osType": "Linux",
        "ports": null,
        "vmSize": "Standard_DS2_v2",
        "vnetSubnetId": null
        ...
      }
      ...
    ]
    

È anche possibile ridimensionare automaticamente i nodi nel cluster. Per altre informazioni, vedere Usare il ridimensionamento automatico del cluster con pool di nodi.

Passaggi successivi

In questa esercitazione sono state usate diverse funzionalità di scalabilità nel cluster Kubernetes. Contenuto del modulo:

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

Nell'esercitazione successiva si apprenderà come aggiornare Kubernetes nel cluster del servizio Azure Kubernetes.