Scalabilità di un'applicazione

Mantieni tutto organizzato con le raccolte Salva e classifica i contenuti in base alle tue preferenze.

Questa pagina spiega come scalare 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 replica dell'applicazione vuoi eseguire. Quando scala un'applicazione, aumenti o diminuisci il numero di repliche.

Ogni replica della tua applicazione rappresenta un pod Kubernetes che incapsula i container della tua applicazione.

Prima di iniziare

Prima di iniziare, assicurati di aver eseguito le seguenti attività:

  • Abilita l'API Google Kubernetes Engine.
  • Abilita l'API Google Kubernetes Engine
  • Se vuoi utilizzare Google Cloud CLI per questa attività, installa e poi inizializza l'interfaccia a riga di comando gcloud.

Ispezione di un'applicazione

Prima di scalare la tua applicazione, devi controllare l'applicazione e assicurarti che sia integro.

Per visualizzare tutte le applicazioni di cui è stato eseguito il deployment nel cluster, esegui questo 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 apparire leggermente diverso. Per i deployment, l'output ha sei colonne:

  • NAME elenca i nomi dei deployment nel cluster.
  • DESIRED mostra il numero desiderato di repliche, o 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 ottenere lo stato desiderato.
  • AVAILABLE mostra quante repliche dell'applicazione sono disponibili agli utenti.
  • AGE mostra per quanto tempo l'applicazione è stata in esecuzione nel cluster.

In questo esempio, c'è solo un deployment, my-app, che ha solo una replica perché lo stato desiderato è una replica. Puoi definire lo stato desiderato al momento della creazione e modificarlo in qualsiasi momento scalando l'applicazione.

Ispezione degli oggetti StatefulSet

Prima di scalare uno StatefulSet, devi controllarlo eseguendo questo comando:

kubectl describe statefulset my-app

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

Se uno StatefulSet sembra non integro, esegui le operazioni seguenti:

  1. Ottieni un elenco di pod e scopri quali sono in stato non integro:

    kubectl get pods
    
  2. Rimuovi il pod non integro:

    kubectl delete POD_NAME
    

Il tentativo di scalare uno StatefulSet mentre è in stato non integro potrebbe comportare la mancata disponibilità.

Scalabilità di un'applicazione

Le sezioni seguenti descrivono ciascun metodo che puoi utilizzare per scalare un'applicazione. Il metodo kubectl scale è il modo più rapido per scalare. Tuttavia, in alcuni casi potresti preferire un altro metodo, ad esempio l'aggiornamento dei file di configurazione o l'esecuzione di modifiche in loco.

scala kubectl

Il comando kubectl scale consente di modificare istantaneamente il numero di repliche che vuoi eseguire l'applicazione.

Per utilizzare kubectl scale, devi specificare il nuovo numero di repliche impostando il flag --replicas. Ad esempio, per scalare my-app a quattro repliche, esegui il comando seguente, 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.

Quindi esegui:

kubectl get CONTROLLER my-app

L'output dovrebbe avere il seguente aspetto:

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 può essere utile per gli utenti che preferiscono gestire le proprie risorse nei file di configurazione.

Per scalare utilizzando kubectl apply, il file di configurazione che fornisci 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 uno 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 scala a tre repliche.

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

kubectl apply -f config.yaml

Quindi esegui:

kubectl get CONTROLLER my-app

L'output dovrebbe avere il seguente aspetto:

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

console

Per scalare un carico di lavoro in Google Cloud Console, esegui questi passaggi:

  1. Vai alla pagina Carichi di lavoro di Google Cloud Console.

    Vai a Carichi di lavoro

  2. Nell'elenco dei carichi di lavoro, fai clic sul nome del carico di lavoro che vuoi scalare.

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

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

  5. Fai clic su Scala.

Deployment di scalabilità automatica

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

Scalabilità automatica kubectl

kubectl autoscale crea un oggetto HorizontalPodAutoscaler (o HPA) che ha come target una risorsa specificata (chiamata il target di scalabilità) e la scala in base alle esigenze. 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, specifichi un numero massimo e minimo di repliche per la tua applicazione, oltre a un target di utilizzo della CPU. Ad esempio, per impostare il numero massimo di repliche a sei e il minimo a quattro, con un target di utilizzo della CPU del 50% di utilizzo, esegui il comando seguente:

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

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

Dopo aver eseguito kubectl autoscale, l'oggetto HorizontalPodAutoscaler viene creato e sceglie come target l'applicazione. In caso di modifica del carico, l'oggetto aumenta o diminuisce le repliche dell'applicazione.

Per recuperare 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 del tuo 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 output di esempio, 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 HorizontalPodAutoscaler applicando un nuovo file di configurazione con kubectl apply, utilizzando kubectl edit oppure utilizzando kubectl patch.

Per eliminare un oggetto HorizontalPodAutoscaler:

kubectl delete hpa HPA_NAME

console

Per scalare automaticamente un deployment, esegui questi passaggi:

  1. Vai alla pagina Carichi di lavoro di Google Cloud Console.

    Vai a Carichi di lavoro

  2. Nell'elenco dei carichi di lavoro, fai clic sul nome del deployment di cui vuoi scalare automaticamente.

  3. Fai clic su Azioni > Scalabilità automatica.

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

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

  6. Fai clic su Scalabilità automatica.

Scalabilità automatica con metriche personalizzate

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

Per informazioni su come utilizzare le metriche personalizzate per scalare automaticamente i deployment, consulta il tutorial Scalabilità automatica dei deployment con metriche personalizzate.

Passaggi successivi