Scalabilità di un'applicazione


Questa pagina spiega come eseguire il ridimensionamento di un'applicazione di cui è stato eseguito il deployment in Google Kubernetes Engine (GKE).

Panoramica

Quando esegui il deployment di un'applicazione in GKE, definisci quante repliche dell'applicazione vuoi eseguire. Quando esegui il ridimensionamento di un'applicazione, aumenti o diminuisci il numero di repliche.

Ogni replica dell'applicazione rappresenta un pod Kubernetes che incapsula i container dell'applicazione.

Prima di iniziare

Prima di iniziare, assicurati di aver eseguito le seguenti operazioni:

  • Attiva l'API Google Kubernetes Engine.
  • Attiva l'API Google Kubernetes Engine
  • Se vuoi utilizzare Google Cloud CLI per questa attività, installa e poi inizializza gcloud CLI. Se hai già installato gcloud CLI, ottieni la versione più recente eseguendo gcloud components update.

Ispezione di un'applicazione

Prima di eseguire il ridimensionamento dell'applicazione, devi ispezzionarla e assicurarti che sia in esecuzione correttamente.

Per visualizzare tutte le applicazioni di cui è stato eseguito il deployment nel cluster, esegui il seguente comando:

kubectl get CONTROLLER

Sostituisci CONTROLLER con deployments, statefulsets o un altro tipo di oggetto controller.

Ad esempio, se esegui kubectl get deployments e hai creato un solo deployment, l'output del comando dovrebbe essere simile al seguente:

NAME                  DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
my-app                1         1         1            1           10m

L'output di questo comando è simile per tutti gli oggetti, ma potrebbe essere leggermente diverso. Per i deployment, l'output ha sei colonne:

  • NAME elenca i nomi dei deployment nel cluster.
  • DESIRED mostra il numero di repliche o lo stato desiderato dell'applicazione, che definisci quando crei il deployment.
  • CURRENT mostra il numero di repliche attualmente in esecuzione.
  • UP-TO-DATE mostra il numero di repliche che sono state aggiornate per raggiungere lo stato desiderato.
  • AVAILABLE mostra quante repliche dell'applicazione sono disponibili per i tuoi utenti.
  • AGE mostra il tempo di esecuzione dell'applicazione nel cluster.

In questo esempio, esiste un solo deployment, my-app, che ha una sola replica perché il suo stato desiderato è una replica. Definisci lo stato desiderato al momento della creazione e puoi modificarlo in qualsiasi momento ridimensionando l'applicazione.

Ispezione degli StatefulSet

Prima di eseguire il ridimensionamento di uno StatefulSet, devi ispezionarlo eseguendo il seguente comando:

kubectl describe statefulset my-app

Nell'output di questo comando, controlla il campo Stato dei pod. Se il valore Failed è superiore a 0, la scalabilità potrebbe non riuscire.

Se uno StatefulSet non sembra essere in stato di salute, svolgi i seguenti passaggi:

  1. Visualizza un elenco di pod e controlla quali non sono in stato normale:

    kubectl get pods
    
  2. Rimuovi il pod non funzionante:

    kubectl delete POD_NAME
    

Il tentativo di eseguire lo scale di un StatefulSet quando non è in stato di salute potrebbe causarne la mancata disponibilità.

Scalabilità di un'applicazione

Le sezioni seguenti descrivono ogni metodo che puoi utilizzare per scalare un'applicazione. Il metodo kubectl scale è il modo più rapido per scalare. Tuttavia, in alcune situazioni potresti preferire un altro metodo, ad esempio quando aggiorni i file di configurazione o quando esegui modifiche in situ.

kubectl scale

Il comando kubectl scale ti consente di modificare istantaneamente il numero di repliche in cui vuoi eseguire la tua applicazione.

Per utilizzare kubectl scale, specifica il nuovo numero di repliche impostando il --replicas flag. Ad esempio, per scalare my-app a quattro repliche, esegui il seguente comando sostituendo CONTROLLER con deployment,statefulset o un altro tipo di oggetto controller:

kubectl scale CONTROLLER my-app --replicas 4

In caso di esito positivo, l'output di questo comando dovrebbe essere simile a deployment "my-app" scaled.

Poi, esegui:

kubectl get CONTROLLER my-app

L'output dovrebbe essere simile al seguente:

NAME                  DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
my-app                4         4         4            4           15m

kubectl apply

Puoi utilizzare kubectl apply per applicare un nuovo file di configurazione a un oggetto controller esistente. kubectl apply è utile per apportare più modifiche a una risorsa e potrebbe essere utile per gli utenti che preferiscono gestire le risorse nei file di configurazione.

Per eseguire il ridimensionamento utilizzando kubectl apply, il file di configurazione fornito deve includere un nuovo numero di repliche nel campo replicas della specifica dell'oggetto.

Di seguito è riportata una versione aggiornata del file di configurazione per l'oggetto my-app di esempio. L'esempio mostra un deployment, quindi se utilizzi un altro tipo di controller, ad esempio un StatefulSet, modifica kind di conseguenza. Questo esempio funziona meglio su un cluster con almeno tre nodi.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app
spec:
  replicas: 3
  selector:
    matchLabels:
      app: app
  template:
    metadata:
      labels:
        app: app
    spec:
      containers:
      - name: my-container
        image: us-docker.pkg.dev/google-samples/containers/gke/hello-app:2.0

In questo file, il valore del campo replicas è 3. Quando viene applicato questo file di configurazione, l'oggetto my-app viene scalato a tre repliche.

Per applicare un file di configurazione aggiornato, esegui il seguente comando:

kubectl apply -f config.yaml

Poi, esegui:

kubectl get CONTROLLER my-app

L'output dovrebbe essere simile al seguente:

NAME                  DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
my-app                3         3         3            3           15m

Console

Per eseguire lo scale di un carico di lavoro nella console Google Cloud, svolgi i seguenti passaggi:

  1. Vai alla pagina Carichi di lavoro nella console Google Cloud.

    Vai a Carichi di lavoro

  2. Nell'elenco dei workload, fai clic sul nome del workload da scalare.

  3. Fai clic su Azioni > Scala > Modifica repliche.

  4. Inserisci il nuovo numero di Repliche per il carico di lavoro.

  5. Fai clic su Scala.

Deployment con scalabilità automatica

Puoi scalare automaticamente i deployment in base all'utilizzo della CPU dei pod utilizzando kubectl autoscale o il menu Carichi di lavoro GKE nella console Google Cloud.

kubectl autoscale

kubectl autoscale crea un oggetto HorizontalPodAutoscaler (o HPA) che ha come target una risorsa specificata (chiamata target di scalabilità) e la scala in base alle esigenze. L'HPA regola periodicamente il numero di repliche del target di scalabilità in modo che corrisponda all'utilizzo medio della CPU specificato.

Quando utilizzi kubectl autoscale, devi specificare un numero massimo e minimo di repliche per la tua applicazione, oltre a un target di utilizzo della CPU. Per esempio, per impostare il numero massimo di repliche su 6 e il numero minimo su quattro, con un target di utilizzo della CPU del 50%, esegui il seguente comando:

kubectl autoscale deployment my-app --max 6 --min 4 --cpu-percent 50

In questo comando, il flag --max è obbligatorio. Il flag --cpu-percent è l'utilizzo della CPU target su tutti i pod. Questo comando non esegue immediatamente il ridimensionamento del deployment a sei repliche, a meno che non esista già una domanda sistemica.

Dopo aver eseguito kubectl autoscale, viene creato l'oggetto HorizontalPodAutoscaler, che ha come target l'applicazione. Quando si verifica una variazione del carico, l'oggetto aumenta o diminuisce le repliche dell'applicazione.

Per visualizzare un elenco degli oggetti HorizontalPodAutoscaler nel cluster, esegui:

kubectl get hpa

Per visualizzare un oggetto HorizontalPodAutoscaler specifico nel cluster, esegui:

kubectl get hpa HPA_NAME

Sostituisci HPA_NAME con il nome dell'oggetto HorizontalPodAutoscaler.

Per visualizzare la configurazione di HorizontalPodAutoscaler:

kubectl get hpa HPA_NAME -o yaml

L'output di questo comando è simile al seguente:

apiVersion: v1
items:
- apiVersion: autoscaling/v1
  kind: HorizontalPodAutoscaler
  metadata:
    creationTimestamp: ...
    name: HPA_NAME
    namespace: default
    resourceVersion: "664"
    selfLink: ...
    uid: ...
  spec:
    maxReplicas: 10
    minReplicas: 1
    scaleTargetRef:
      apiVersion: apps/v1
      kind: Deployment
      name: HPA_NAME
    targetCPUUtilizationPercentage: 50
  status:
    currentReplicas: 0
    desiredReplicas: 0
kind: List
metadata: {}
resourceVersion: ""
selfLink: ""

In questo esempio di output, il campo targetCPUUtilizationPercentage contiene il valore percentuale 50 passato dall'esempio kubectl autoscale.

Per visualizzare una descrizione dettagliata di un oggetto HorizontalPodAutoscaler specifico nel cluster:

kubectl describe hpa HPA_NAME

Puoi modificare il HorizontalPodAutoscaler applicando un nuovo file di configurazione con kubectl apply, utilizzando kubectl edit o kubectl patch.

Per eliminare un oggetto HorizontalPodAutoscaler:

kubectl delete hpa HPA_NAME

Console

Per eseguire la scalabilità automatica di un deployment, svolgi i seguenti passaggi:

  1. Vai alla pagina Carichi di lavoro nella console Google Cloud.

    Vai a Carichi di lavoro

  2. Nell'elenco dei workload, fai clic sul nome del deployment da eseguire con l'autoscaling.

  3. Fai clic su Azioni > Autoscale.

  4. Inserisci il Numero massimo di repliche e, facoltativamente, il Numero minimo di repliche per il deployment.

  5. In Metriche di scalabilità automatica, seleziona e configura le metriche come preferisci.

  6. Fai clic su Scalabilità automatica.

Scalabilità automatica con metriche personalizzate

Puoi scalare i deployment in base a metriche personalizzate esportate da Cloud Monitoring.

Per scoprire come utilizzare le metriche personalizzate per la scalabilità automatica dei deployment, consulta il tutorial sulla scalabilità automatica dei deployment con metriche personalizzate.

Passaggi successivi