In questa pagina viene spiegato come analizzare e regolare Richieste CPU e richieste di memoria di un container in un cluster Google Kubernetes Engine (GKE) utilizzando scalabilità automatica pod verticale.
Puoi scalare manualmente le risorse container tramite la console Google Cloud.
analizzare le risorse utilizzando un oggetto VerticalPodAutoscaler
oppure
configurare la scalabilità automatica
scalabilità automatica pod verticale.
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
.
Analizza le richieste di risorse
Vertical Pod Autoscaler analizza automaticamente i container e fornisce richieste di risorse suggerite. Puoi visualizzare queste richieste di risorse utilizzando Console Google Cloud, Cloud Monitoring o Google Cloud CLI.
Console
Per visualizzare le richieste di risorse suggerite nella console Google Cloud, devi per il deployment di un carico di lavoro esistente da almeno 24 ore. Alcune che i suggerimenti potrebbero non essere disponibili o pertinenti per determinati carichi di lavoro, quelli creati nelle ultime 24 ore, i pod autonomi e le app scritte in Java.
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 richieste di risorse.
La sezione Analizza i dati sull'utilizzo delle risorse mostra i dati storici sull'utilizzo analizzato dal controller Vertical Pod Autoscaler per creare 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 per cui è già stato eseguito il deployment di un carico di lavoro esistente.
Vai alla pagina Esplora metriche nella console Google Cloud.
Fai clic su Configurazione.
Espandi il menu Seleziona una metrica.
Nel menu Risorsa, seleziona Scala Kubernetes.
Nel menu Categoria di metrica, seleziona Gestore della scalabilità automatica.
Nel menu Metrica, seleziona Consigliati per byte di richiesta replicati e Consigliato 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 VerticalPodAutoscaler
e un oggetto Deployment.
Per i cluster Standard, abilita la scalabilità automatica pod verticale in un cluster Kubernetes. Per i cluster Autopilot, la scalabilità automatica pod verticale sono abilitate per impostazione predefinita.
gcloud container clusters update CLUSTER_NAME --enable-vertical-pod-autoscaling
Sostituisci
CLUSTER_NAME
con il nome del tuo 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 file manifest descrive un
Deployment
che non ha CPU o memoria richieste. Il valorecontainers.name
dimy-rec-deployment
specifica che tutti i pod nel deployment appartengonoVerticalPodAutoscaler
.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 file manifest descrive un
VerticalPodAutoscaler
. Il valoreupdateMode
diOff
significa che, al momento della creazione dei pod, Vertical Pod Autoscaler analizza le esigenze di CPU e memoria di container e record i suggerimenti nel campostatus
della risorsa. Pod verticale Il controller del gestore della scalabilità automatica non aggiorna automaticamente le richieste di risorse 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 suggerimenti per le richieste di CPU e memoria.
Imposta manualmente le richieste di risorse dei pod
Puoi impostare manualmente le richieste di risorse dei pod utilizzando Google Cloud CLI oppure nella console Google Cloud.
Console
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 richieste di risorse.
- La sezione Modifica richieste e limiti delle risorse mostra le informazioni richieste di CPU e memoria per ogni container, nonché di CPU e richieste di memoria.
Fai clic su Applica gli ultimi suggerimenti per visualizzare le richieste suggerite per ciascun containerizzato.
Fai clic su Salva modifiche.
Fai clic su Conferma.
gcloud
Per impostare le richieste di risorse per un pod, imposta requests.cpu e memory.cpu nel manifest del deployment.In questo esempio, modifichi manualmente Deployment creato in Analizza le 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 procedendo nel seguente modo:
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 richieste di risorse.
Configura le richieste contenitore.
Fai clic su Ottieni YAML equivalente.
Fai clic su Scarica carico di lavoro o copia e incolla il manifest in un file denominato
resource-adjusted.yaml
.Applica il manifest al cluster:
kubectl create -f resource-adjusted.yaml
Imposta automaticamente le richieste di risorse dei pod
La scalabilità automatica pod verticale utilizza l'oggetto VerticalPodAutoscaler
per
imposta automaticamente le richieste di risorse sui pod quando updateMode
è Auto
. Tu
puoi configurare un VerticalPodAutoscaler
utilizzando gcloud CLI o
nella console Google Cloud.
Console
Per impostare automaticamente le richieste di risorse, devi avere un cluster con funzionalità di scalabilità automatica pod verticale abilitata. I cluster Autopilot è abilitata per impostazione predefinita la funzionalità di scalabilità automatica pod verticale.
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 verticale dei pod.
Fai clic su Salva modifiche.
Configura scalabilità automatica verticale dei pod
Vai alla pagina Carichi di lavoro nella console Google Cloud.
Nell'elenco dei carichi di lavoro, fai clic sul nome del deployment che vuoi configurare. la scalabilità automatica pod verticale.
Fai clic su list Azioni > Scalabilità automatica > Scalabilità automatica pod verticale.
Scegli una modalità di scalabilità automatica:
- Modalità automatica: la scalabilità automatica pod verticale aggiorna le richieste di CPU e memoria durante la vita di un pod.
- Modalità iniziale: la scalabilità automatica verticale dei pod assegna solo richieste di risorse durante la creazione dei pod e non li modifichi mai in seguito.
(Facoltativo) Imposta i criteri del contenitore. Questa opzione ti consente di assicurarti che il suggerimento non viene mai impostato al di sopra o al di sotto di una richiesta di risorsa specificata.
- Fai clic su expand_more Aggiungi criterio.
- Seleziona Automatica per Modifica modalità contenitore.
- In Risorse controllate, seleziona le risorse che vuoi scalare automaticamente il container.
- Fai clic su Aggiungi regola per impostare uno o più intervalli minimi o massimi per
richieste di risorse del container:
- .
- Min Memoria consentita: la quantità minima di memoria utilizzata dovrebbe sempre avere in MiB.
- Min CPU consentita: la quantità minima di CPU richiesta dal container dovrebbe sempre avere, in mCPU.
- Numero massimo di memoria consentito: la quantità massima di memoria utilizzata dall' dovrebbe sempre avere in MiB.
- CPU massima consentita: la quantità massima di CPU consentita dal container dovrebbe sempre avere, in mCPU.
Fai clic su Fine.
Fai clic su Salva.
gcloud
Per impostare automaticamente le richieste di risorse, devi utilizzare un cluster con funzionalità di scalabilità automatica pod verticale abilitata. Nei cluster Autopilot la funzionalità è abilitata per impostazione predefinita.
Per i cluster Standard, abilita la scalabilità automatica pod verticale cluster:
gcloud container clusters update CLUSTER_NAME --enable-vertical-pod-autoscaling
Sostituisci
CLUSTER_NAME
con il nome del tuo 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 file manifest descrive un
VerticalPodAutoscaler
con le seguenti caratteristiche: proprietà:targetRef.name
: specifica che ogni pod controllato da un Il 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 quindi avviare un nuovo pod.
Puoi anche configurare la scalabilità automatica pod verticale per assegnare 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' prima di visualizzare eseguire nuovamente i pod.
Visualizza le informazioni su Vertical Pod Autoscaler
Per visualizzare i dettagli di un Vertical Pod Autoscaler, segui questi passaggi:
Ottieni informazioni dettagliate su uno dei pod in esecuzione:
kubectl get pod POD_NAME --output yaml
Sostituisci
POD_NAME
con il nome di uno dei tuoi pod recuperato 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 ...
L'output mostra che il controller Vertical Pod Autoscaler ha una richiesta di memoria di 262144k e una richiesta di CPU di 510 milliCPU.
Leggi 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 suggerimenti per le richieste di CPU e memoria e include le seguenti proprietà:
target
: specifica che, affinché il container venga eseguito in modo ottimale, deve richiede 587 milliCPU e 26.2144 kilobyte di memoria.lowerBound
eupperBound
: la scalabilità automatica pod verticale utilizza questi per decidere se eliminare un pod e sostituirlo all'interno del pod. Se un pod ha richieste inferiori al limite inferiore o superiori al valore limite superiore, Vertical Pod Autoscaler elimina il pod e lo sostituisce con un pod che soddisfa l'attributo target.
Disattiva contenitori specifici
Per disattivare la scalabilità automatica pod verticale per container specifici, utilizza il con gcloud CLI o la console Google Cloud.
Console
Per disattivare la scalabilità automatica pod verticale per container specifici, devi un cluster con la funzionalità di scalabilità automatica pod verticale abilitata. I cluster Autopilot hanno la funzionalità di scalabilità automatica pod verticale sono abilitate 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 verticale dei pod.
Fai clic su Salva modifiche.
Configura scalabilità automatica verticale dei pod
Vai alla pagina Carichi di lavoro nella console Google Cloud.
Nell'elenco dei carichi di lavoro, fai clic sul nome del deployment che vuoi configurare la scalabilità automatica pod verticale.
Fai clic su list Azioni > Scalabilità automatica > Scalabilità automatica pod verticale.
Scegli una modalità di scalabilità automatica:
- Modalità automatica: la scalabilità automatica pod verticale aggiorna le richieste di CPU e memoria durante la vita di un pod.
- Modalità iniziale: la scalabilità automatica verticale dei pod assegna solo richieste di risorse durante la creazione dei pod e non li modifichi mai in seguito.
Fai clic su expand_more Aggiungi criterio.
Seleziona il contenitore da disattivare.
In Modifica modalità contenitore, seleziona Off.
Fai clic su Fine.
Fai clic su Salva.
gcloud
Per disattivare la scalabilità automatica pod verticale per container specifici, esegui la seguenti 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 file manifest descrive un
VerticalPodAutoscaler
. Il valoremode: "Off"
disattiva i suggerimenti 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 Vertical Pod Autoscaler:
kubectl get vpa my-opt-vpa --output yaml
L'output mostra suggerimenti per le richieste di CPU e memoria:
... recommendation: containerRecommendations: - containerName: my-opt-container ...
In questo output sono presenti solo suggerimenti per un container. Là non ci sono consigli per
my-opt-sidecar
.Il gestore della scalabilità automatica pod verticale non aggiorna mai le risorse sui container disattivati. Se attendi qualche minuto, il pod si ricrea, ma solo un container ha richieste di risorse aggiornate.
Passaggi successivi
- Scopri di più su Scalabilità automatica pod verticale.
- Scopri come Assegna risorse della CPU a container e pod.
- Scopri come Assegna risorse di memoria a container e pod.