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 repliche dell'applicazione vuoi eseguire. Quando espandi 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à:
- Assicurati di aver abilitato l'API Google Kubernetes Engine. Abilita l'API Google Kubernetes Engine
- Assicurati di aver installato l'interfaccia a riga di comando di Google Cloud.
- Configura le impostazioni dell'interfaccia a riga di comando di Google Cloud predefinite per il tuo progetto utilizzando uno dei seguenti metodi:
- Utilizza
gcloud init
se vuoi avere istruzioni dettagliate sull'impostazione delle impostazioni predefinite del progetto. - Utilizza
gcloud config
per impostare singolarmente l'ID, la zona e l'area geografica del progetto. -
Esegui
gcloud init
e segui le istruzioni:gcloud init
Se utilizzi SSH su un server remoto, usa il flag
--console-only
per impedire l'avvio del comando da parte di un browser:gcloud init --console-only
- Segui le istruzioni per autorizzare l'interfaccia a riga di comando gcloud a utilizzare il tuo account Google Cloud.
- Crea una nuova configurazione o selezionane una esistente.
- Scegli un progetto Google Cloud.
- Scegli una zona Compute Engine predefinita.
- Scegli un'area geografica di Compute Engine predefinita.
- Imposta l'ID progetto predefinito:
gcloud config set project PROJECT_ID
- Imposta l'area geografica di Compute Engine predefinita (ad esempio
us-central1
):gcloud config set compute/region COMPUTE_REGION
- Imposta la zona Compute Engine predefinita (ad esempio
us-central1-c
):gcloud config set compute/zone COMPUTE_ZONE
- Aggiorna
gcloud
alla versione più recente:gcloud components update
gcloud init
gcloud config
Impostando le posizioni predefinite puoi evitare errori nell'interfaccia a riga di comando gcloud come
One of [--zone, --region] must be supplied: Please specify location
:
Ispezione di un'applicazione
Prima di scalare l'applicazione, devi controllarla e assicurarti che sia integri.
Per visualizzare tutte le applicazioni di cui è stato eseguito il deployment nel cluster, esegui il comando seguente:
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 sembrare 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 al momento della creazione del 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 il numero di repliche dell'applicazione disponibili per gli utenti.AGE
mostra per quanto tempo l'applicazione è stata in esecuzione nel cluster.
In questo esempio è presente un solo deployment, my-app
, che ha una sola 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 StatefulSet
Prima di scalare uno StatefulSet, devi ispezionarlo 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 in stato non integro, procedi nel seguente modo:
Ottieni un elenco dei pod e scopri quali sono in stato non integro:
kubectl get pods
Rimuovi il pod in stato non integro:
kubectl delete POD_NAME
Il tentativo di scalare uno StatefulSet mentre è in stato non integro potrebbe rendere non disponibile lo stato.
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 puoi preferire un altro metodo, ad esempio per l'aggiornamento dei file di configurazione o quando esegui modifiche in loco.
kubectl scala
Il comando kubectl scale
consente di modificare immediatamente 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
da quattro 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
Se l'operazione ha esito positivo, l'output di questo comando dovrebbe essere simile a deployment
"my-app" scaled
.
Dopodiché 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 gestirle 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, come uno StatefulSet, modifica kind
di conseguenza. Questo esempio funziona al 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
Dopodiché 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:
Vai alla pagina Carichi di lavoro in Cloud Console.
Nell'elenco dei carichi di lavoro, fai clic sul nome del carico di lavoro che vuoi scalare.
Fai clic su list Azioni > Scala > Modifica repliche.
Inserisci il nuovo numero di Repliche per il carico di lavoro.
Fai clic su Scala.
Deployment a scalabilità automatica
Puoi scalare automaticamente i deployment in base all'utilizzo dei pod da parte della CPU utilizzando kubectl
autoscale
o dal menu Carichi di lavoro GKE di Cloud Console.
Scalabilità automatica kubectl
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, nonché un target di utilizzo della CPU. Ad esempio, per impostare il numero massimo di repliche su 6 e il numero minimo di 4, con un target di utilizzo della CPU del 50%, esegui il comando seguente:
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 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 scelto come target dell'applicazione. Quando si verifica un cambiamento nel carico, l'oggetto aumenta o diminuisce le repliche dell'applicazione.
Per recuperare un elenco degli oggetti HorizontalPodAutoscaler
nel cluster, esegui questo comando:
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 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
trasmesso 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 utilizzando kubectl patch
.
Per eliminare un oggetto HorizontalPodAutoscaler
:
kubectl delete hpa HPA_NAME
Console
Per scalare automaticamente un deployment, segui questi passaggi:
Vai alla pagina Carichi di lavoro in Cloud Console.
Nell'elenco dei carichi di lavoro, fai clic sul nome del deployment che vuoi scalare automaticamente.
Fai clic su list Azioni > Scala automaticamente.
Inserisci il Numero massimo di repliche e, facoltativamente, il Numero minimo di repliche per il deployment.
In Scalabilità automatica delle metriche, seleziona le metriche e configurale come preferisci.
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, guarda il tutorial Scalabilità automatica dei deployment con metriche personalizzate.