Nesta página, explicamos como analisar e ajustar as solicitações de CPU e as solicitações de memória de um contêiner em um Google Kubernetes Engine (GKE) usando escalonamento automático de pods verticais.
É possível escalonar recursos de contêiner manualmente usando o Console do Google Cloud,
analisar recursos usando um objeto VerticalPodAutoscaler
ou
configurar o escalonamento automático usando o
escalonamento automático vertical de pods.
Antes de começar
Antes de começar, verifique se você realizou as tarefas a seguir:
- Ativar a API Google Kubernetes Engine. Ativar a API Google Kubernetes Engine
- Se você quiser usar a Google Cloud CLI para essa tarefa,
instale e, em seguida,
inicialize a
CLI gcloud. Se você instalou a CLI gcloud anteriormente, instale a versão
mais recente executando
gcloud components update
.
Analisar solicitações de recursos
O escalonador automático vertical de pods analisa automaticamente seus contêineres e fornece solicitações de recursos sugeridas. É possível ver essas solicitações de recursos usando o Console do Google Cloud, o Cloud Monitoring ou a Google Cloud CLI.
Console
Para visualizar as solicitações de recursos sugeridas no Console do Google Cloud, é preciso ter uma carga de trabalho atual implantada com pelo menos 24 horas de idade. Algumas sugestões podem não estar disponíveis ou ser relevantes para determinadas cargas de trabalho, como as criadas nas últimas 24 horas, pods independentes e apps escritos em Java.
Acesse a página Cargas de trabalho no console do Google Cloud.
Na lista de cargas de trabalho, clique no nome da carga de trabalho que você quer escalonar.
Clique em list Ações > Escalonar > Editar solicitações de recursos.
A seção Analisar dados de utilização de recursos mostra dados históricos de uso que o controlador do Escalonador automático vertical de pods analisou para criar as solicitações de recursos sugeridas na seção Ajustar solicitações e limites de recursos.
Cloud Monitoring
Para ver as solicitações de recursos sugeridas no Cloud Monitoring, você precisa implantar uma carga de trabalho atual.
Acesse a página do Explorador de métricas no console do Google Cloud.
Clique em Configuração.
Abra o menu Selecionar uma métrica.
No menu Recurso, selecione Escalonar do Kubernetes.
No menu Categoria da métrica, selecione Escalonador automático.
No menu Métrica, selecione Recomendado por bytes de solicitação de réplica e Recomendado por núcleo de solicitação de réplica.
Clique em Aplicar.
CLI da gcloud
Para ver as solicitações de recursos sugeridas, crie um objeto VerticalPodAutoscaler
e uma implantação.
Para clusters padrão, ative o escalonamento automático vertical de pods no cluster. Para clusters do Autopilot, o escalonamento automático vertical de pods é ativado por padrão.
gcloud container clusters update CLUSTER_NAME --enable-vertical-pod-autoscaling
Substitua
CLUSTER_NAME
pelo nome do cluster.Salve o seguinte manifesto como
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
Esse manifesto descreve um
Deployment
que não tem solicitações de CPU ou memória. O valorcontainers.name
demy-rec-deployment
especifica que todos os pods na implantação pertencem aVerticalPodAutoscaler
.Aplique o manifesto ao cluster:
kubectl create -f my-rec-deployment.yaml
Salve o seguinte manifesto como
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"
Esse manifesto descreve uma
VerticalPodAutoscaler
. O valorupdateMode
deOff
significa que, quando os pods são criados, o controlador de escalonador automático vertical de pods analisa as necessidades de CPU e memória dos contêineres e registra essas recomendações no campostatus
do recurso. O controlador do escalonador automático vertical de pods não atualiza automaticamente as solicitações de recursos para executar contêineres.Aplique o manifesto ao cluster:
kubectl create -f my-rec-vpa.yaml
Depois de algum tempo, visualize o
VerticalPodAutoscaler
:kubectl get vpa my-rec-vpa --output yaml
A saída será assim:
... recommendation: containerRecommendations: - containerName: my-rec-container lowerBound: cpu: 25m memory: 262144k target: cpu: 25m memory: 262144k upperBound: cpu: 7931m memory: 8291500k ...
O resultado mostra recomendações para solicitações de CPU e memória.
Definir solicitações de recursos de pods manualmente
É possível definir solicitações de recursos de pods manualmente usando a Google Cloud CLI ou o Console do Google Cloud.
Console
Acesse a página Cargas de trabalho no console do Google Cloud.
Na lista de cargas de trabalho, clique no nome da carga de trabalho que você quer escalonar.
Clique em list Ações > Escalonar > Editar solicitações de recursos.
- A seção Ajustar solicitações e limites de recursos mostra as solicitações atuais de CPU e memória para cada contêiner, além das solicitações sugeridas de CPU e memória.
Clique em Aplicar sugestões mais recentes para visualizar as solicitações sugeridas para cada contêiner.
Clique em Save Changes.
Clique em Confirmar.
gcloud
Para definir solicitações de recursos para um pod, defina os valores de "request.cpu" e "memory.cpu" no manifesto de implantação. Neste exemplo, você modifica manualmente a implantação criada em Analisar solicitações de recursos com solicitações de recursos sugeridas.
Salve o seguinte manifesto de exemplo como
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
Esse manifesto descreve uma implantação com dois pods. Cada pod tem um contêiner que solicita 25 milliCPU e 256 MiB de memória.
Aplique o manifesto ao cluster:
kubectl apply -f my-adjusted-deployment.yaml
Também é possível aplicar alterações manualmente seguindo estas etapas:
Acesse a página Cargas de trabalho no console do Google Cloud.
Na lista de cargas de trabalho, clique no nome da carga de trabalho que você quer escalonar.
Clique em list Ações > Escalonar > Editar solicitações de recursos.
Configure as solicitações de contêiner.
Clique em Ver YAML equivalente.
Clique em Fazer download da carga de trabalho ou copie e cole o manifesto em um arquivo chamado
resource-adjusted.yaml
.Aplique o manifesto ao cluster:
kubectl create -f resource-adjusted.yaml
Definir solicitações de recursos de pods automaticamente
O escalonamento automático vertical de pods usa o objeto VerticalPodAutoscaler
para
definir automaticamente as solicitações de recursos nos pods quando updateMode
é Auto
. É
possível configurar um VerticalPodAutoscaler
usando a CLI gcloud ou o
console do Google Cloud.
Console
Para definir solicitações de recursos automaticamente, é necessário ter um cluster com o recurso de escalonamento automático vertical de pods ativado. Os clusters do Autopilot têm o recurso de escalonamento automático vertical de pods ativado por padrão.
Ativar o Escalonamento automático vertical de pods
Acesse a página do Google Kubernetes Engine no console do Google Cloud.
Na lista de clusters, clique no nome do cluster que você quer modificar.
Na seção Automação, clique em edit Editar na opção Escalonamento automático vertical de pods.
Marque a caixa de seleção Ativar o escalonamento automático vertical de pods.
Clique em Salvar alterações.
Configurar o escalonamento automático vertical de pods
Acesse a página Cargas de trabalho no console do Google Cloud.
Na lista de cargas de trabalho, clique no nome da implantação em que você quer configurar o escalonamento automático vertical de pods.
Clique em list Ações > Escalonamento automático > Escalonamento automático vertical de pods.
Escolha um modo de escalonamento automático:
- Modo automático: o escalonamento automático vertical de pods atualiza as solicitações de CPU e memória durante a vida útil de um pod.
- Modo inicial: o escalonamento automático vertical de pods atribui solicitações de recursos apenas na criação do pod e nunca as altera posteriormente.
(Opcional) Defina políticas de contêiner. Com essa opção, você garante que a recomendação nunca seja definida acima ou abaixo de uma solicitação de recurso especificada.
- Clique em expand_more Adicionar política.
- Selecione Automático para Editar o modo de contêiner.
- Em Recursos controlados, selecione em quais recursos você quer fazer o escalonamento automático do contêiner.
- Clique em Adicionar regra para definir um ou mais intervalos mínimos ou máximos para as solicitações de recursos do contêiner:
- Memória mínima permitida: a quantidade mínima de memória que o contêiner precisa ter sempre, em MiB.
- CPU mínima permitida: a quantidade mínima de CPU que o contêiner precisa ter sempre, em mCPU.
- Memória permitida máxima: a quantidade máxima de memória que o contêiner precisa ter sempre, em MiB.
- Máximo permitido de CPU: a quantidade máxima de CPU que o contêiner precisa ter sempre, em mCPU.
Clique em Concluído.
Clique em Salvar.
gcloud
Para definir solicitações de recursos automaticamente, use um cluster com o recurso de escalonamento automático vertical de pods ativado. Os clusters do Autopilot têm o recurso ativado por padrão.
Para clusters padrão, ative o escalonamento automático vertical de pods no cluster:
gcloud container clusters update CLUSTER_NAME --enable-vertical-pod-autoscaling
Substitua
CLUSTER_NAME
pelo nome do cluster.Salve o seguinte manifesto como
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"]
Esse manifesto descreve uma implantação com dois pods. Cada pod tem um contêiner que solicita 100 milliCPU e 50 MiB de memória.
Aplique o manifesto ao cluster:
kubectl create -f my-auto-deployment.yaml
Liste os pods em execução:
kubectl get pods
A saída mostra os nomes dos pods em
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
Salve o seguinte manifesto como
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"
Este manifesto descreve um
VerticalPodAutoscaler
com as seguintes propriedades:targetRef.name
: especifica que qualquer pod controlado por uma implantação chamadamy-deployment
pertence a esseVerticalPodAutoscaler
.updateMode: Auto
: especifica que o controlador do escalonador automático vertical de pods pode excluir um pod, ajustar as solicitações de CPU e memória e, em seguida, iniciar um novo pod.
Também é possível configurar o escalonamento automático vertical de pods para atribuir solicitações de recursos apenas no momento da criação do pod, usando
updateMode: "Initial"
.Aplique o manifesto ao cluster:
kubectl create -f my-vpa.yaml
Aguarde alguns minutos e veja os pods em execução novamente:
kubectl get pods
A resposta mostra que os nomes dos pods foram alterados:
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 os nomes dos pods não tiverem mudado, aguarde um pouco mais e veja os pods em execução novamente.
Ver informações sobre um escalonador automático vertical de pods
Para ver detalhes sobre um escalonador automático vertical de pods, faça o seguinte:
Receba informações detalhadas sobre um dos seus pods em execução:
kubectl get pod POD_NAME --output yaml
Substitua
POD_NAME
pelo nome de um dos pods que você recuperou na etapa anterior.O resultado será assim:
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 ...
Esta saída mostra que o controlador do escalonador automático vertical de pods tem uma solicitação de memória de 262144k e uma solicitação de CPU de 510 miliCPU.
Veja informações detalhadas sobre
VerticalPodAutoscaler
:kubectl get vpa my-vpa --output yaml
O resultado será assim:
... recommendation: containerRecommendations: - containerName: my-container lowerBound: cpu: 536m memory: 262144k target: cpu: 587m memory: 262144k upperBound: cpu: 27854m memory: "545693548"
Esta saída mostra recomendações para solicitações de CPU e memória e inclui as seguintes propriedades:
target
: especifica essa informação para que o contêiner seja executado de maneira ideal, precisa solicitar 587 milliCPU e 26.2144 kilobytes de memória.lowerBound
eupperBound
: o escalonamento automático vertical de pods usa essas propriedades para decidir se quer excluir um pod e substituí-lo por um novo pod. Se um pod tiver solicitações abaixo do limite inferior ou acima do superior, o escalonador automático vertical de pods excluirá o pod e o substituirá por um que atenda ao atributo de destino.
Desativar contêineres específicos
É possível desativar contêineres específicos do escalonamento automático vertical de pods usando a CLI gcloud ou o Console do Google Cloud.
Console
Para desativar contêineres específicos do escalonamento automático vertical de pods, é necessário ter um cluster com o recurso de escalonamento automático vertical de pods ativado. Os clusters do Autopilot têm o recurso de escalonamento automático vertical de pods ativado por padrão.
Ativar o Escalonamento automático vertical de pods
Acesse a página do Google Kubernetes Engine no console do Google Cloud.
Na lista de clusters, clique no nome do cluster que você quer modificar.
Na seção Automação, clique em edit Editar na opção Escalonamento automático vertical de pods.
Marque a caixa de seleção Ativar o escalonamento automático vertical de pods.
Clique em Salvar alterações.
Configurar o escalonamento automático vertical de pods
Acesse a página Cargas de trabalho no console do Google Cloud.
Na lista de cargas de trabalho, clique no nome da implantação em que você quer configurar o escalonamento automático vertical de pods.
Clique em list Ações > Escalonamento automático > Escalonamento automático vertical de pods.
Escolha um modo de escalonamento automático:
- Modo automático: o escalonamento automático vertical de pods atualiza as solicitações de CPU e memória durante a vida útil de um pod.
- Modo inicial: o escalonamento automático vertical de pods atribui solicitações de recursos apenas na criação do pod e nunca as altera posteriormente.
Clique em expand_more Adicionar política.
Selecione o contêiner que você quer desativar.
Em Editar modo do contêiner, selecione Desativado.
Clique em Concluído.
Clique em Salvar.
gcloud
Para desativar contêineres específicos do escalonamento automático vertical de pods, execute as seguintes etapas:
Salve o seguinte manifesto como
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"
Esse manifesto descreve uma
VerticalPodAutoscaler
. O valormode: "Off"
desativa as recomendações do contêinermy-opt-sidecar
.Aplique o manifesto ao cluster:
kubectl apply -f my-opt-vpa.yaml
Salve o seguinte manifesto como
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"]
Aplique o manifesto ao cluster:
kubectl apply -f my-opt-deployment.yaml
Após algum tempo, veja o escalonador automático vertical de pods:
kubectl get vpa my-opt-vpa --output yaml
O resultado mostra recomendações para solicitações de CPU e memória:
... recommendation: containerRecommendations: - containerName: my-opt-container ...
Nesta saída, há apenas recomendações para um contêiner. Não há recomendações para
my-opt-sidecar
.O escalonador automático vertical de pods nunca atualiza recursos em contêineres desativados. Depois de alguns minutos, o Pod é recriado, mas apenas um contêiner tem as solicitações de recurso atualizadas.
A seguir
- Saiba mais sobre o Escalonamento automático vertical de pods.
- Saiba como atribuir recursos da CPU a contêineres e pods.
- Saiba como atribuir recursos de memória a contêineres e pods.