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 ridimensioni un'applicazione, aumenti o diminuisci il numero di repliche del carico di lavoro oppure modifichi le risorse disponibili per le repliche in loco. Esistono due metodi per ridimensionare un'applicazione:
- Scalabilità orizzontale, in cui aumenti o diminuisci il numero di repliche del carico di lavoro.
- Scalabilità verticale, in cui modifichi le risorse disponibili per le repliche in loco.
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à,
installala e poi
inizializza gcloud CLI. Se hai già installato gcloud CLI, scarica l'ultima
versione eseguendo il
gcloud components updatecomando. Le versioni precedenti di gcloud CLI potrebbero non supportare l'esecuzione dei comandi in questo documento.
Ispezionare 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 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 apparire leggermente diverso. Per i deployment, l'output ha sei colonne:
NAMEelenca i nomi dei deployment nel cluster.DESIREDmostra il numero di repliche desiderato o lo stato desiderato, dell'applicazione, che definisci quando crei il deployment.CURRENTmostra il numero di repliche attualmente in esecuzione.UP-TO-DATEmostra il numero di repliche aggiornate per raggiungere lo stato desiderato.AVAILABLEmostra il numero di repliche dell'applicazione disponibili per gli utenti.AGEmostra 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.
Ispezionare gli StatefulSet
Prima di scalare uno StatefulSet, devi ispezionarlo eseguendo il comando seguente:
kubectl describe statefulset my-app
Nell'output di questo comando, controlla il campo Pods Status. Se il valore Failed è maggiore di 0, la scalabilità potrebbe non riuscire.
Se uno StatefulSet sembra non essere integro:
Recupera un elenco di pod e individua quelli non integri:
kubectl get podsRimuovi il pod non integro:
kubectl delete POD_NAME
Se tenti di scalare uno StatefulSet non integro, potresti renderlo non disponibile.
Scalare un'applicazione
Nelle sezioni seguenti vengono descritti i metodi che puoi utilizzare per scalare un'applicazione.
Il metodo kubectl scale è il modo più rapido per scalare. Tuttavia, in alcune situazioni, ad esempio quando aggiorni i file di configurazione o esegui modifiche in loco, potresti preferire un altro metodo.
kubectl scale
Il kubectl scale
comando ti consente di modificare immediatamente il numero di repliche che vuoi
eseguire per 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
Se l'operazione va a buon fine, 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 patch
A partire dalla
versione 1.33 di Kubernetes,
puoi utilizzare il
kubectl patch comando
per scalare verticalmente il carico di lavoro aggiornando le
risorse assegnate a un container, senza ricreare il pod. Per ulteriori
informazioni, inclusi i limiti, consulta la
documentazione di Kubernetes relativa al ridimensionamento delle risorse di 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 comando seguente:
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 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 di esempio my-app. L'esempio mostra un deployment, quindi se utilizzi un altro tipo di controller, ad esempio uno StatefulSet, modifica di conseguenza il kind. 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 comando seguente:
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 scalare un carico di lavoro nella Google Cloud console, segui questi passaggi:
Vai alla pagina Carichi di lavoro nella Google 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.
Puoi visualizzare le metriche relative alla scalabilità facendo clic sulla scheda Scalabilità.
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
Google Cloud console.
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 su sei e il numero minimo su quattro, 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 esista già una domanda sistemica.
Dopo aver eseguito kubectl autoscale, viene creato l'oggetto HorizontalPodAutoscaler e 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: ""
Nell'output di questo 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 Carichi di lavoro nella Google Cloud console.
Nell'elenco dei carichi di lavoro, fai clic sul nome del deployment che vuoi scalare automaticamente.
Fai clic su list Azioni > Modifica scalabilità automatica.
Nella sezione Scalabilità automatica orizzontale dei pod, inserisci il numero massimo di repliche e, facoltativamente, il numero minimo di repliche per il deployment.
(Facoltativo) In Metriche di scalabilità automatica, seleziona e configura le metriche.
Fai clic su Invia.
Puoi visualizzare le metriche relative alla scalabilità facendo clic sulla scheda Scalabilità.
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 il tutorial Scalabilità automatica dei deployment con metriche personalizzate.