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, devi definire quante repliche dell'applicazione che desiderano correre. Quando scala un'applicazione, aumenti o diminuisci il di repliche.
Ogni replica dell'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à:
- Attiva l'API Google Kubernetes Engine. Abilita l'API Google Kubernetes Engine .
- Se vuoi utilizzare Google Cloud CLI per questa attività,
install e poi
inizializzare
con gcloud CLI. Se hai già installato gcloud CLI, scarica la versione più recente
eseguendo
gcloud components update
.
Ispezione di un'applicazione
Prima di scalare l'applicazione, devi ispezionarla 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 ne hai creato solo uno
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 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 lo stato desiderato, dell'applicazione, che definisci quando crei il deployment.CURRENT
mostra quante repliche sono attualmente in esecuzione.UP-TO-DATE
mostra il numero di repliche che sono state aggiornate in modo da raggiungere lo stato desiderato.AVAILABLE
mostra quante repliche dell'applicazione sono disponibili i tuoi utenti.AGE
mostra per quanto tempo l'applicazione è stata in esecuzione nel cluster.
In questo esempio esiste un solo deployment, my-app
, che ha un solo
di replica perché lo stato desiderato è una replica. Sei tu a definire lo stato desiderato
al momento della creazione e puoi modificarlo in qualsiasi momento scalando
un'applicazione.
Ispezione degli oggetti StatefulSet
Prima di scalare uno StatefulSet, devi esaminarlo eseguendo questo comando:
kubectl describe statefulset my-app
Nell'output di questo comando, controlla il campo Stato pod. Se Failed
è maggiore di 0
, la scalabilità potrebbe non riuscire.
Se uno StatefulSet non è integro, esegui queste operazioni:
Recupera un elenco di pod e osserva quali pod 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 può causare un non disponibile.
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 di scalare. Tuttavia, potresti preferire
un altro metodo in alcune situazioni, ad esempio quando si aggiornano i file di configurazione o
quando si eseguono modifiche locali.
Scalabilità kubectl
La kubectl scale
consente di modificare istantaneamente il numero di repliche
per eseguire l'applicazione.
Per utilizzare kubectl scale
, specifica il nuovo numero di repliche impostando il parametro
Flag --replicas
. Ad esempio, per scalare my-app
su quattro repliche, esegui
seguente comando, 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
.
Quindi, 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 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 da te fornito deve
includi un nuovo numero di repliche nel campo replicas
dell'oggetto
e la specifica del prodotto.
Di seguito è riportata una versione aggiornata del file di configurazione per
di esempio my-app
. L'esempio mostra un deployment, quindi
Usa 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 questo
di configurazione del deployment, l'oggetto my-app
viene scalato a tre repliche.
Per applicare un file di configurazione aggiornato, esegui questo comando:
kubectl apply -f config.yaml
Quindi, 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 scalare un carico di lavoro nella console Google Cloud, segui questi passaggi:
Vai alla pagina Carichi di lavoro nella console Google Cloud.
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.
Scalabilità automatica dei deployment
Puoi scalare automaticamente i deployment in base all'utilizzo della CPU dei pod utilizzando kubectl
autoscale
o dal menu Carichi di lavoro GKE nella
nella console Google Cloud.
kubectl autoscale
kubectl autoscale
crea un oggetto HorizontalPodAutoscaler
(o HPA) che ha come target un specificato
(chiamato scala target) e la scala in base alle esigenze. HPA
regola periodicamente il numero di repliche del target della scala in modo che corrisponda
l'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. Per
ad esempio per impostare il numero massimo di repliche su sei e il minimo su
Quattro, con un target di utilizzo della CPU del 50%, esegui questo 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 target della CPU su tutti i pod. Questo comando non
scalare immediatamente il deployment a sei repliche, a meno che non ci sia già
della domanda sistemica.
Dopo aver eseguito kubectl autoscale
, l'oggetto HorizontalPodAutoscaler
viene
creato e destinato all'applicazione. In caso di variazione del carico, l'oggetto
aumenta o diminuisce le repliche dell'applicazione.
Per ottenere un elenco degli oggetti HorizontalPodAutoscaler
nel tuo cluster, esegui:
kubectl get hpa
Per visualizzare un oggetto HorizontalPodAutoscaler
specifico nel tuo 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 la
Valore percentuale di 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 HorizontalPodAutoscaler
applicando una nuova configurazione
file con kubectl apply
, utilizzando kubectl edit
o con 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 nella console Google Cloud.
Nell'elenco dei carichi di lavoro, fai clic sul nome del deployment che vuoi con la scalabilità automatica.
Fai clic su list Azioni > Scalabilità automatica.
Inserisci il Numero massimo di repliche e, facoltativamente, il Valore minimo di repliche per il deployment.
In Metriche di scalabilità automatica, seleziona e configura le metriche come preferisci.
Fai clic su Scalabilità automatica.
Scalabilità automatica con metriche personalizzate
Puoi scalare i tuoi deployment in base a metriche personalizzate. esportate da Cloud Monitoring.
Per scoprire come utilizzare le metriche personalizzate per la scalabilità automatica dei deployment, consulta le Scalabilità automatica dei deployment con metriche personalizzate tutorial di Google Cloud.