Questa pagina spiega come analizzare e modificare le richieste di CPU e richieste di memoria di un container in un cluster Google Kubernetes Engine (GKE) utilizzando la scalabilità automatica pod verticale.
Puoi scalare manualmente le risorse dei container tramite la console Google Cloud, analizzare le risorse utilizzando un oggetto VerticalPodAutoscaler
o configurare il scalabilità automatica utilizzando il ridimensionamento verticale dei pod.
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à,
installa e poi
inizializza gcloud CLI. Se hai già installato gcloud CLI, ottieni la versione più recente eseguendo
gcloud components update
.
Analizza le richieste di risorse
Il gestore della scalabilità automatica pod verticale analizza automaticamente i container e fornisce richieste di risorse suggerite. Puoi visualizzare queste richieste di risorse utilizzando la console Google Cloud, Cloud Monitoring o Google Cloud CLI.
Console
Per visualizzare le richieste di risorse suggerite nella console Google Cloud, devi avere un carico di lavoro di cui è stato eseguito il deployment da almeno 24 ore. Alcuni suggerimenti potrebbero non essere disponibili o pertinenti per determinati carichi di lavoro, ad esempio quelli creati nelle ultime 24 ore, i pod indipendenti e le app scritte in Java.
Vai alla pagina Carichi di lavoro nella console Google Cloud.
Nell'elenco dei workload, fai clic sul nome del workload da scalare.
Fai clic su list Azioni > Scala > Modifica richieste di risorse.
La sezione Analizza i dati sull'utilizzo delle risorse mostra i dati storici sull'utilizzo analizzati dal controller della scalabilità automatica pod verticale per creare le richieste di risorse suggerite nella sezione Modifica richieste e limiti delle risorse.
Cloud Monitoring
Per visualizzare le richieste di risorse suggerite in Cloud Monitoring, devi avere un carico di lavoro di cui è stato eseguito il deployment.
Vai alla pagina Esplora metriche nella console Google Cloud.
Fai clic su Configurazione.
Espandi il menu Seleziona una metrica.
Nel menu Risorsa, seleziona Scalabilità Kubernetes.
Nel menu Categoria metrica, seleziona Autoscaler.
Nel menu Metrica, seleziona Consigliati per byte di richiesta di replica e Consigliati per core di richiesta di replica.
Fai clic su Applica.
Interfaccia a riga di comando gcloud
Per visualizzare le richieste di risorse suggerite, devi creare un oggetto VerticalPodAutoscaler
e un deployment.
Per i cluster standard, abilita la scalabilità automatica del pod verticale per il cluster. Per i cluster Autopilot, la scalabilità automatica del pod verticale è attivata per impostazione predefinita.
gcloud container clusters update CLUSTER_NAME --enable-vertical-pod-autoscaling
Sostituisci
CLUSTER_NAME
con il nome del cluster.Salva il seguente manifest come
my-rec-deployment.yaml
:apiVersion: apps/v1 kind: Deployment metadata: name: my-rec-deployment spec: replicas: 2 selector: matchLabels: app: my-rec-deployment template: metadata: labels: app: my-rec-deployment spec: containers: - name: my-rec-container image: nginx
Questo manifest descrive un
Deployment
che non ha richieste di CPU o memoria. Il valorecontainers.name
dimy-rec-deployment
specifica che tutti i pod nel deployment appartengono alVerticalPodAutoscaler
.Applica il manifest al cluster:
kubectl create -f my-rec-deployment.yaml
Salva il seguente manifest come
my-rec-vpa.yaml
:apiVersion: autoscaling.k8s.io/v1 kind: VerticalPodAutoscaler metadata: name: my-rec-vpa spec: targetRef: apiVersion: "apps/v1" kind: Deployment name: my-rec-deployment updatePolicy: updateMode: "Off"
Questo manifest descrive un
VerticalPodAutoscaler
. Il valoreupdateMode
diOff
indica che, quando vengono creati i pod, il controller della scalabilità automatica pod verticale analizza le esigenze di CPU e memoria dei container e registra questi consigli nel campostatus
della risorsa. Il controller Vertical Pod Autoscaler non aggiorna automaticamente le richieste di risorse per i container in esecuzione.Applica il manifest al cluster:
kubectl create -f my-rec-vpa.yaml
Dopo un po' di tempo, visualizza
VerticalPodAutoscaler
:kubectl get vpa my-rec-vpa --output yaml
L'output è simile al seguente:
... recommendation: containerRecommendations: - containerName: my-rec-container lowerBound: cpu: 25m memory: 262144k target: cpu: 25m memory: 262144k upperBound: cpu: 7931m memory: 8291500k ...
Questo output mostra i consigli per le richieste di CPU e memoria.
Impostare manualmente le richieste di risorse dei pod
Puoi impostare le richieste di risorse dei pod manualmente utilizzando Google Cloud CLI o la console Google Cloud.
Console
Vai alla pagina Carichi di lavoro nella console Google Cloud.
Nell'elenco dei workload, fai clic sul nome del workload da scalare.
Fai clic su list Azioni > Scala > Modifica richieste di risorse.
- La sezione Modifica richieste e limiti delle risorse mostra le richieste di CPU e memoria correnti per ogni contenitore, nonché le richieste di CPU e memoria suggerite.
Fai clic su Applica suggerimenti più recenti per visualizzare le richieste suggerite per ciascun contenitore.
Fai clic su Salva modifiche.
Fai clic su Conferma.
gcloud
Per impostare le richieste di risorse per un pod, imposta i valori requests.cpu e memory.cpu nel file manifest del deployment.In questo esempio, modifichi manualmente il deployment creato in Analisi delle richieste di risorse con le richieste di risorse suggerite.
Salva il seguente manifest di esempio come
my-adjusted-deployment.yaml
:apiVersion: apps/v1 kind: Deployment metadata: name: my-rec-deployment spec: replicas: 2 selector: matchLabels: app: my-rec-deployment template: metadata: labels: app: my-rec-deployment spec: containers: - name: my-rec-container image: nginx resources: requests: cpu: 25m memory: 256Mi
Questo manifest descrive un deployment con due pod. Ogni pod ha un container che richiede 25 milliCPU e 256 MiB di memoria.
Applica il manifest al cluster:
kubectl apply -f my-adjusted-deployment.yaml
Puoi anche applicare le modifiche manualmente seguendo questi passaggi:
Vai alla pagina Carichi di lavoro nella console Google Cloud.
Nell'elenco dei workload, fai clic sul nome del workload da scalare.
Fai clic su list Azioni > Scala > Modifica richieste di risorse.
Configura le richieste dei contenitori.
Fai clic su Ottieni YAML equivalente.
Fai clic su Scarica carico di lavoro o copia e incolla il manifest in un file chiamato
resource-adjusted.yaml
.Applica il manifest al cluster:
kubectl create -f resource-adjusted.yaml
Impostare automaticamente le richieste di risorse dei pod
La scalabilità automatica dei pod verticali utilizza l'oggetto VerticalPodAutoscaler
per impostare automaticamente le richieste di risorse sui pod quando updateMode
è Auto
. Puoi configurare un VerticalPodAutoscaler
utilizzando gcloud CLI o la console Google Cloud.
Console
Per impostare automaticamente le richieste di risorse, devi disporre di un cluster con la funzionalità di scalabilità automatica del pod verticale abilitata. Nei cluster Autopilot, la funzionalità di scalabilità automatica del pod verticale è abilitata per impostazione predefinita.
Abilita scalabilità automatica pod verticale
Vai alla pagina Google Kubernetes Engine nella console Google Cloud.
Nell'elenco dei cluster, fai clic sul nome del cluster da modificare.
Nella sezione Automazione, fai clic su edit Modifica per l'opzione Scalabilità automatica pod verticale.
Seleziona la casella di controllo Abilita scalabilità automatica pod verticale.
Fai clic su Salva modifiche.
Configura la scalabilità automatica del pod verticale
Vai alla pagina Workload nella console Google Cloud.
Nell'elenco dei carichi di lavoro, fai clic sul nome del deployment per cui vuoi configurare la scalabilità automatica del pod verticale.
Fai clic su list Azioni > Scalabilità automatica > Scalabilità automatica dei pod verticali.
Scegli una modalità di scalabilità automatica:
- Modalità automatica: la scalabilità automatica pod verticale aggiorna le richieste di CPU e memoria durante il ciclo di vita di un pod.
- Modalità iniziale: la scalabilità automatica pod verticale assegna le richieste di risorse solo al momento della creazione del pod e non le modifica in un secondo momento.
(Facoltativo) Imposta i criteri del contenitore. Questa opzione ti consente di assicurarti che il consiglio non venga mai impostato al di sopra o al di sotto di una richiesta di risorse specificata.
- Fai clic su expand_more Aggiungi norme.
- Seleziona Automatico per la modalità di modifica del contenitore.
- In Risorse controllate, seleziona le risorse su cui vuoi eseguire l'autoscaling del contenitore.
- Fai clic su Aggiungi regola per impostare uno o più intervalli minimi o massimi per le richieste di risorse del contenitore:
- Memoria consentita minima: la quantità minima di memoria che il contenuto deve sempre avere, in MiB.
- CPU consentita minima: la quantità minima di CPU che il container deve sempre avere, in mCPU.
- Memoria massima consentita: la quantità massima di memoria che il contenitore deve sempre avere, in MiB.
- CPU consentita massima: la quantità massima di CPU che il container deve sempre avere, in mCPU.
Fai clic su Fine.
Fai clic su Salva.
gcloud
Per impostare automaticamente le richieste di risorse, devi utilizzare un cluster in cui è attivata la funzionalità di scalabilità automatica del pod verticale. La funzionalità è abilitata per impostazione predefinita nei cluster Autopilot.
Per i cluster standard, abilita la scalabilità automatica del pod verticale per il tuo cluster:
gcloud container clusters update CLUSTER_NAME --enable-vertical-pod-autoscaling
Sostituisci
CLUSTER_NAME
con il nome del cluster.Salva il seguente manifest come
my-auto-deployment.yaml
:apiVersion: apps/v1 kind: Deployment metadata: name: my-auto-deployment spec: replicas: 2 selector: matchLabels: app: my-auto-deployment template: metadata: labels: app: my-auto-deployment spec: containers: - name: my-container image: registry.k8s.io/ubuntu-slim:0.1 resources: requests: cpu: 100m memory: 50Mi command: ["/bin/sh"] args: ["-c", "while true; do timeout 0.5s yes >/dev/null; sleep 0.5s; done"]
Questo manifest descrive un deployment con due pod. Ogni pod ha un container che richiede 100 milliCPU e 50 MiB di memoria.
Applica il manifest al cluster:
kubectl create -f my-auto-deployment.yaml
Elenca i pod in esecuzione:
kubectl get pods
L'output mostra i nomi dei pod in
my-deployment
:NAME READY STATUS RESTARTS AGE my-auto-deployment-cbcdd49fb-d6bf9 1/1 Running 0 8s my-auto-deployment-cbcdd49fb-th288 1/1 Running 0 8s
Salva il seguente manifest come
my-vpa.yaml
:apiVersion: autoscaling.k8s.io/v1 kind: VerticalPodAutoscaler metadata: name: my-vpa spec: targetRef: apiVersion: "apps/v1" kind: Deployment name: my-auto-deployment updatePolicy: updateMode: "Auto"
Questo manifest descrive un
VerticalPodAutoscaler
con le seguenti proprietà:targetRef.name
: specifica che qualsiasi pod controllato da un deployment denominatomy-deployment
appartiene a questoVerticalPodAutoscaler
.updateMode: Auto
: specifica che il controller Vertical Pod Autoscaler può eliminare un pod, regolare le richieste di CPU e memoria e avviare un nuovo pod.
Puoi anche configurare la scalabilità automatica del pod verticale in modo da assegnare le richieste di risorse solo al momento della creazione del pod, utilizzando
updateMode: "Initial"
.Applica il manifest al cluster:
kubectl create -f my-vpa.yaml
Attendi qualche minuto e visualizza di nuovo i pod in esecuzione:
kubectl get pods
L'output mostra che i nomi dei pod sono cambiati:
NAME READY STATUS RESTARTS AGE my-auto-deployment-89dc45f48-5bzqp 1/1 Running 0 8s my-auto-deployment-89dc45f48-scm66 1/1 Running 0 8s
Se i nomi dei pod non sono cambiati, attendi ancora un po' di tempo, quindi visualizza di nuovo i pod in esecuzione.
Visualizzare informazioni su un Vertical Pod Autoscaler
Per visualizzare i dettagli di un Vertical Pod Autoscaler:
Visualizza informazioni dettagliate su uno dei tuoi pod in esecuzione:
kubectl get pod POD_NAME --output yaml
Sostituisci
POD_NAME
con il nome di uno dei pod recuperati nel passaggio precedente.L'output è simile al seguente:
apiVersion: v1 kind: Pod metadata: annotations: vpaUpdates: 'Pod resources updated by my-vpa: container 0: cpu capped to node capacity, memory capped to node capacity, cpu request, memory request' ... spec: containers: ... resources: requests: cpu: 510m memory: 262144k ...
Questa uscita mostra che il controller Vertical Pod Autoscaler ha una richiesta di memoria di 262144 k e una richiesta di CPU di 510 milliCPU.
Visualizza informazioni dettagliate su
VerticalPodAutoscaler
:kubectl get vpa my-vpa --output yaml
L'output è simile al seguente:
... recommendation: containerRecommendations: - containerName: my-container lowerBound: cpu: 536m memory: 262144k target: cpu: 587m memory: 262144k upperBound: cpu: 27854m memory: "545693548"
Questo output mostra i consigli per le richieste di CPU e memoria e include le seguenti proprietà:
target
: specifica che, per funzionare in modo ottimale,il contenitore deve richiedere 587 milliCPU e 26.2144 kilobyte di memoria.lowerBound
eupperBound
: la scalabilità automatica pod verticale utilizza queste proprietà per decidere se eliminare un pod e sostituirlo con un nuovo pod. Se un pod ha richieste inferiori al limite inferiore o superiori al limite superiore, il gestore della scalabilità automatica pod verticale lo elimina e lo sostituisce con un pod che soddisfa l'attributo target.
Disattivare determinati container
Puoi disattivare la scalabilità automatica pod verticale per container specifici utilizzando la gcloud CLI o la console Google Cloud.
Console
Per disattivare la scalabilità automatica del pod verticale per container specifici, devi avere un cluster con la funzionalità abilitata. Nei cluster Autopilot la funzionalità di scalabilità automatica del pod verticale è attivata per impostazione predefinita.
Abilita scalabilità automatica pod verticale
Vai alla pagina Google Kubernetes Engine nella console Google Cloud.
Nell'elenco dei cluster, fai clic sul nome del cluster da modificare.
Nella sezione Automazione, fai clic su edit Modifica per l'opzione Scalabilità automatica pod verticale.
Seleziona la casella di controllo Abilita scalabilità automatica pod verticale.
Fai clic su Salva modifiche.
Configura la scalabilità automatica del pod verticale
Vai alla pagina Workload nella console Google Cloud.
Nell'elenco dei carichi di lavoro, fai clic sul nome del deployment per cui vuoi configurare la scalabilità automatica del pod verticale.
Fai clic su list Azioni > Scalabilità automatica > Scalabilità automatica dei pod verticali.
Scegli una modalità di scalabilità automatica:
- Modalità automatica: la scalabilità automatica pod verticale aggiorna le richieste di CPU e memoria durante il ciclo di vita di un pod.
- Modalità iniziale: la scalabilità automatica pod verticale assegna le richieste di risorse solo al momento della creazione del pod e non le modifica in un secondo momento.
Fai clic su expand_more Aggiungi norme.
Seleziona il contenitore per cui vuoi disattivare la funzionalità.
Per Modalità di modifica del contenitore, seleziona Off.
Fai clic su Fine.
Fai clic su Salva.
gcloud
Per disattivare la scalabilità automatica del pod verticale per container specifici, segui questi passaggi:
Salva il seguente manifest come
my-opt-vpa.yaml
:apiVersion: autoscaling.k8s.io/v1 kind: VerticalPodAutoscaler metadata: name: my-opt-vpa spec: targetRef: apiVersion: "apps/v1" kind: Deployment name: my-opt-deployment updatePolicy: updateMode: "Auto" resourcePolicy: containerPolicies: - containerName: my-opt-sidecar mode: "Off"
Questo manifest descrive un
VerticalPodAutoscaler
. Il valoremode: "Off"
disattiva i consigli per il contenitoremy-opt-sidecar
.Applica il manifest al cluster:
kubectl apply -f my-opt-vpa.yaml
Salva il seguente manifest come
my-opt-deployment.yaml
:apiVersion: apps/v1 kind: Deployment metadata: name: my-opt-deployment spec: replicas: 1 selector: matchLabels: app: my-opt-deployment template: metadata: labels: app: my-opt-deployment spec: containers: - name: my-opt-container image: nginx - name: my-opt-sidecar image: busybox command: ["sh","-c","while true; do echo Doing sidecar stuff!; sleep 60; done"]
Applica il manifest al cluster:
kubectl apply -f my-opt-deployment.yaml
Dopo un po' di tempo, visualizza il Vertical Pod Autoscaler:
kubectl get vpa my-opt-vpa --output yaml
L'output mostra i consigli per le richieste di CPU e memoria:
... recommendation: containerRecommendations: - containerName: my-opt-container ...
In questo output sono presenti solo consigli per un contenitore. Non ci sono consigli per
my-opt-sidecar
.La scalabilità automatica pod verticale non aggiorna mai le risorse nei container disattivati. Se attendi qualche minuto, il pod viene ricreato, ma solo un contenitore ha aggiornato le richieste di risorse.
Passaggi successivi
- Scopri di più sulla scalabilità automatica pod verticale.
- Scopri le best practice per l'esecuzione di applicazioni Kubernetes con ottimizzazione dei costi su GKE.
- Scopri come assegnare risorse CPU a container e pod.
- Scopri come assegnare risorse di memoria a container e pod.