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 il numero di repliche dell'applicazione che vuoi eseguire. Ogni replica dell'applicazione rappresenta un pod Kubernetes che incapsula i container dell'applicazione.
Quando scalate un'applicazione, aumentate o diminuite il numero di repliche del workload oppure regolate le risorse disponibili per le repliche sul posto. Esistono due metodi per scalare un'applicazione:
- Scalabilità orizzontale, in cui aumenti o diminuisci il numero di repliche del workload.
- Scalabilità verticale, in cui regoli le risorse disponibili per le repliche sul posto.
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à,
installala e poi
inizializzala. Se hai già installato gcloud CLI, scarica l'ultima versione eseguendo
gcloud components update
.
Ispezione di un'applicazione
Prima di scalare l'applicazione, devi ispezionarla e assicurarti che sia integra.
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 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, è presente 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 scalando l'applicazione.
Ispezione di StatefulSet
Prima di scalare uno StatefulSet, ispezionalo eseguendo il seguente comando:
kubectl describe statefulset my-app
Nell'output di questo comando, controlla il campo Stato dei pod. Se il valore Failed
è maggiore di 0
, lo scaling potrebbe non riuscire.
Se uno StatefulSet non è integro, procedi nel seguente modo:
Recupera un elenco di pod e visualizza quelli non integri:
kubectl get pods
Rimuovi il pod non integro:
kubectl delete POD_NAME
Il tentativo di scalare uno StatefulSet non integro potrebbe renderlo 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 per scalare. Tuttavia, in alcune situazioni potresti preferire
un altro metodo, ad esempio quando aggiorni i file di configurazione o
quando esegui modifiche in loco.
kubectl scale
Il comando kubectl scale
ti consente di modificare istantaneamente il numero di repliche che vuoi
eseguire per la tua applicazione.
Per utilizzare kubectl scale
, specifica 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
Se l'operazione va a buon fine, l'output di questo comando dovrebbe essere simile a deployment
"my-app" scaled
.
Dopodiché, 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 patch
A partire dalla
versione 1.33 di Kubernetes,
puoi utilizzare il
comando kubectl patch
per scalare verticalmente il tuo workload aggiornando le
risorse assegnate a un container, senza ricreare il pod. Per ulteriori
informazioni, inclusi i limiti, consulta la
documentazione di Kubernetes sul ridimensionamento delle risorse CPU e memoria.
Per utilizzare il comando kubectl patch
, specifica la richiesta di risorse aggiornata nel flag --patch
. Ad esempio, per scalare my-app
a 800 mCPU, esegui il
seguente comando:
kubectl patch pod my-app --subresource resize --patch \
'{"spec":{"containers":[{"name":"pause", "resources":{"requests":{"cpu":"800m"}, "limits":{"cpu":"800m"}}}]}}'
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 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 questo comando:
kubectl apply -f config.yaml
Dopodiché, 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 Workload nella console Google Cloud .
Nell'elenco dei workload, fai clic sul nome del workload da scalare.
Fai clic su list Azioni > Scala > Modifica repliche.
Inserisci il nuovo numero di Repliche per il workload.
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 consoleGoogle 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. Ad esempio, per impostare il numero massimo di repliche a 6 e il numero minimo a
4, 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 target della CPU in tutti i pod. Questo comando non
scala immediatamente il deployment a sei repliche, a meno che non esista già una
domanda sistemica.
Dopo l'esecuzione di kubectl autoscale
, l'oggetto HorizontalPodAutoscaler
viene
creato e ha come target l'applicazione. Quando il carico cambia, 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 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
o kubectl patch
.
Per eliminare un oggetto HorizontalPodAutoscaler
:
kubectl delete hpa HPA_NAME
Console
Per scalare automaticamente un deployment, segui questi passaggi:
Vai alla pagina Workload nella console Google Cloud .
Nell'elenco dei workload, fai clic sul nome del deployment di cui vuoi eseguire lo scale automatico.
Fai clic su list Azioni > Scalabilità automatica.
Inserisci il numero massimo di repliche e, facoltativamente, il numero minimo di repliche per il deployment.
Nella sezione Metriche di scalabilità automatica, seleziona e configura le metriche come preferisci.
Fai clic su Scalabilità automatica.
Scalabilità automatica con metriche personalizzate
Puoi scalare i deployment in base alle metriche personalizzate esportate da Cloud Monitoring.
Per scoprire come utilizzare le metriche personalizzate per scalare automaticamente i deployment, consulta l'esercitazione Scalabilità automatica dei deployment con metriche personalizzate.