Usando o Kubernetes Vertical Pod Autoscaler
Descubra como usar o Kubernetes Vertical Pod Autoscaler para ajustar automaticamente as solicitações e os limites de recursos para contêineres em execução em pods em um cluster que você criou usando o Kubernetes Engine (OKE).
Você não pode usar o Kubernetes Vertical Pod Autoscaler com pools de nós virtuais.
- Definindo solicitações automaticamente com base no uso para garantir que o valor de recurso apropriado esteja disponível para cada pod.
- Mantendo proporções entre limites e solicitações que foram especificadas nas configurações iniciais dos contêineres.
- Reduzindo pods que estão solicitando recursos em excesso, com base no uso ao longo do tempo.
- Ampliando pods que estão solicitando recursos insuficientes, com base no uso ao longo do tempo.
O Vertical Pod Autoscaler tem três componentes:
- Recomendador: Monitora o consumo de recursos atual e passado e fornece valores recomendados de solicitação de CPU e memória para um contêiner.
- Atualizador: Verifica se há pods com recursos incorretos e os exclui, para que os pods possam ser recriados com os valores de solicitação atualizados.
- Plug-in de Admissão: Define as solicitações corretas de recursos em novos pods (ou seja, pods recém-criados ou recriados pelo controlador deles devido a alterações feitas pelo Atualizador).
Para obter mais informações, consulte Vertical Pod Autoscaler e Gerenciando Recursos para Contêineres na documentação do Kubernetes.
Configure o Vertical Pod Autoscaler usando o objeto de definição de recurso personalizado VerticalPodAutoscaler
. O objeto VerticalPodAutoscaler
permite especificar os pods a serem verticalmente dimensionados de forma automática e quais recomendações de recursos aplicar (se houver). Para obter mais informações, consulte VerticalPodAutoscaler e Objeto de Definição de Recurso Personalizado na documentação do Kubernetes.
O Vertical Pod Autoscaler exige a instalação de uma origem de métricas, como o Kubernetes Metrics Server, no cluster. Para obter mais informações, consulte Implantando o Kubernetes Metrics Server em um Cluster.
Substituindo Faixas de Limites
O Vertical Pod Autoscaler tenta fazer recomendações dentro dos valores mínimo e máximo especificados por uma faixa de limites, se uma tiver sido definida. No entanto, se a faixa de limites aplicável estiver em conflito com os valores especificados na seção resourcePolicy
do manifesto VerticalPodAutoscaler
, o Vertical Pod Autoscaler dará prioridade à política de recursos e fará as recomendações corretamente (mesmo que os valores fiquem fora da faixa de limites). Para obter mais informações, consulte Faixas de Limites e Faixa de Limites de Substituição da Política de Recursos na documentação do Kubernetes.
Criando Recomendações sem Aplicá-las
Você pode usar o Vertical Pod Autoscaler para criar e aplicar recomendações ou simplesmente para criar recomendações (sem atualizar os pods). Para simplesmente criar recomendações sem aplicá-las, defina updateMode: "Off"
na seção updatePolicy
do manifesto VerticalPodAutoscaler
.
Quando os pods são criados, o Vertical Pod Autoscaler analisa as necessidades de CPU e memória dos contêineres e registra essas recomendações no campo Status
. O Vertical Pod Autoscaler não executa qualquer ação para atualizar as solicitações de recursos para os contêineres em execução.
Excluindo Contêineres Específicos
Você pode usar o Vertical Pod Autoscaler para criar e aplicar recomendações a todos os contêineres de um pod ou pode excluir seletivamente contêineres específicos. Para desativar recomendações para um contêiner específico, na seção resourcePolicy
do manifesto VerticalPodAutoscaler
, especifique um containerName
e defina mode: "Off"
na seção containerPolicies
.
Observações sobre o Vertical Pod Autoscaler
Observe o seguinte:
- No momento, é recomendável não usar o Vertical Pod Autoscaler com o Horizontal Pod Autoscaler nas métricas de utilização de CPU ou memória. No entanto, observe que você pode usar o Vertical Pod Autoscaler com o Horizontal Pod Autoscaler em métricas personalizadas e externas. Consulte Suporte para métricas personalizadas na documentação do Kubernetes.
- As recomendações do Vertical Pod Autoscaler podem exceder os recursos disponíveis (por exemplo, tamanho do nó, tamanho disponível, cota disponível). Observe que a aplicação das recomendações pode fazer com que os pods entrem em um status pendente.
- Sempre que o Vertical Pod Autoscaler atualiza recursos do pod, o pod é recriado, o que faz com que todos os contêineres em execução sejam reiniciados. Observe que o pod pode ser recriado em outro nó.
- Você pode usar o Kubernetes Vertical Pod Autoscaler com pools de nós gerenciados, mas não com pools de nós virtuais.
Como Trabalhar com o Vertical Pod Autoscaler
As instruções a seguir orientam você na implantação do Vertical Pod Autoscaler em um cluster. Elas descrevem como:
- Verificar se o Kubernetes Metrics Server foi instalado em um cluster.
- Baixe e implante o Vertical Pod Autoscaler.
- Implantar um aplicativo de amostra.
- Exibir a operação de dimensionamento em ação.
- Exibir a recomendação.
- Limpar, removendo o aplicativo de amostra e o Vertical Pod Autoscaler.
Etapa 1: Verificar a Instalação do Kubernetes Metrics Server
-
Se você ainda não tiver feito isso, siga as etapas para configurar o arquivo de configuração kubeconfig do cluster e (se necessário) defina a variável de ambiente KUBECONFIG para apontar para o arquivo. Observe que você deve configurar seu próprio arquivo kubeconfig. Não é possível acessar um cluster usando um arquivo kubeconfig que outro usuário tenha configurado. Consulte Configurando o Acesso ao Cluster.
-
Confirme se o Kubernetes Metrics Server foi implantado com sucesso no cluster e se está disponível digitando:
kubectl -n kube-system get deployment/metrics-server
Se o comando retornar um erro `Not Found`, implante o Kubernetes Metrics Server no cluster antes de continuar. Consulte Implantando o Kubernetes Metrics Server em um Cluster.
Etapa 2: Fazer Download e Implantar o Vertical Pod Autoscaler
- Faça download do código de origem do Vertical Pod Autoscaler no GitHub. Por exemplo, informando:
git clone -b vpa-release-0.8 https://github.com/kubernetes/autoscaler.git
-
Altere para o diretório
vertical-pod-autoscaler
:cd autoscaler/vertical-pod-autoscaler
-
Se você implantou anteriormente o Vertical Pod Autoscaler, exclua-o digitando:
./hack/vpa-down.sh
-
Implante o Vertical Pod Autoscaler digitando:
./hack/vpa-up.sh
-
Verifique se os pods do Vertical Pod Autoscaler foram criados com sucesso digitando:
kubectl get pods -n kube-system
A saída do comando anterior mostra os pods:
vpa-admission-controller-59d9965cfb-bzs8l 1/1 Running 0 6m34s vpa-recommender-5bcb58569-mqdds 1/1 Running 0 6m43s vpa-updater-5979cbf757-scw2d 1/1 Running 0 6m46s
Observe que você provavelmente verá nomes e números diferentes.
Etapa 3: Implantar o Aplicativo de Amostra
- Implante o aplicativo hamster de amostra para criar uma implantação e um Vertical Pod Autoscaler correspondente, digitando:
kubectl apply -f examples/hamster.yaml
A saída do comando anterior confirma a implantação e a criação:
verticalpodautoscaler.autoscaling.k8s.io/hamster-vpa created deployment.apps/hamster created
A implantação do aplicativo hamster cria uma implantação com dois pods e um Vertical Pod Autoscaler apontando para a implantação.
- Verifique se os pods do hamster foram criados com sucesso digitando:
kubectl get pods -l app=hamster
A saída do comando acima confirma a criação:
NAME READY STATUS RESTARTS AGE hamster-7cbfd64f57-mqqnk 1/1 Running 0 54s hamster-7cbfd64f57-rq6wv 1/1 Running 0 55s
Observe que você provavelmente verá nomes diferentes para os pods do hamster.
- Exiba as reservas de CPU e memória usando o comando
kubectl describe pod
e um dos nomes de pods do hamster retornados na etapa anterior. Por exemplo:kubectl describe pod hamster-7cbfd64f57-rq6wv
Observe que o comando anterior é apenas um exemplo. Use um dos nomes de pods do hamster que foram retornados quando você executou o comando
kubectl get pods -l app=hamster
na etapa anterior.Na seção de solicitações da saída, você pode ver as reservas atuais de CPU e memória do pod. Por exemplo:
Requests: cpu: 100m memory: 50Mi
O Vertical Pod Autoscaler (especificamente, o Recomendador) analisa os pods e observa o comportamento deles para determinar se essas reservas de CPU e memória são apropriadas. Observe que você poderá ver diferentes reservas de CPU e memória.
As reservas não são suficientes porque o aplicativo hamster de amostra está deliberadamente com falta de recursos. Cada pod executa um único contêiner que:
- solicita 100 milinúcleos, mas tenta utilizar mais de 500 milinúcleos
- reserva muito menos memória do que precisa para ser executado
Etapa 4: Exibir a Operação de Dimensionamento
Tendo analisado os pods originais no aplicativo hamster de amostra e determinado que as reservas de CPU e memória são inadequadas, o Vertical Pod Autoscaler (especificamente o Atualizador) inicia novamente os pods com valores diferentes, conforme proposto pelo Recomendador. Observe que o Vertical Pod Autoscaler não modifica o modelo na implantação, mas atualiza as solicitações reais dos pods.
-
Monitore os pods no aplicativo hamster de amostra e aguarde o Atualizador iniciar um novo pod do hamster com um novo nome, digitando:
kubectl get --watch pods -l app=hamster
-
Quando você vir que um novo pod do hamster foi iniciado, exiba as reservas de CPU e memória usando o comando
kubectl describe pod
e o nome do pod. Por exemplo:kubectl describe pod hamster-7cbfd64f57-wmg4
Na seção de solicitações da saída, você pode ver as reservas de CPU e memória do novo pod:
Requests: cpu: 587m memory: 262144k
No exemplo acima, observe que a reserva de CPU aumentou para 587 milinúcleos e a reserva de memória aumentou para 262,144 Kilobytes. O pod original estava com falta de recursos e o Vertical Pod Autoscaler corrigiu as reservas originais com valores mais apropriados. Observe que você poderá ver diferentes reservas de CPU e memória.
Etapa 5: Exibir a Recomendação
Exiba as recomendações feitas pelo Vertical Pod Autoscaler (especificamente, pelo Recomendador) digitando:
kubectl describe vpa/hamster-vpa
A saída do comando anterior mostra as recomendações:
Name: hamster-vpa
Namespace: default
Labels: <none>
Annotations: kubectl.kubernetes.io/last-applied-configuration:
{"apiVersion":"autoscaling.k8s.io/v1beta2","kind":"VerticalPodAutoscaler","metadata":{"annotations":{},"name":"hamster-vpa","namespace":"d...
API Version: autoscaling.k8s.io/v1
Kind: VerticalPodAutoscaler
Metadata:
Creation Timestamp: 2020-09-22T18:08:09Z
Generation: 27
Resource Version: 19466955
Self Link: /apis/autoscaling.k8s.io/v1/namespaces/default/verticalpodautoscalers/hamster-vpa
UID: 689cee90-6fed-404d-adf9-b6fa8c1da660
Spec:
Resource Policy:
Container Policies:
Container Name: *
Controlled Resources:
cpu
memory
Max Allowed:
Cpu: 1
Memory: 500Mi
Min Allowed:
Cpu: 100m
Memory: 50Mi
Target Ref:
API Version: apps/v1
Kind: Deployment
Name: hamster
Update Policy:
Update Mode: Auto
Status:
Conditions:
Last Transition Time: 2020-09-22T18:10:10Z
Status: True
Type: RecommendationProvided
Recommendation:
Container Recommendations:
Container Name: hamster
Lower Bound:
Cpu: 519m
Memory: 262144k
Target:
Cpu: 587m
Memory: 262144k
Uncapped Target:
Cpu: 587m
Memory: 262144k
Upper Bound:
Cpu: 1
Memory: 500Mi
Events: <none>
Observe que talvez você veja recomendações diferentes.
Etapa 6: Limpar
- Remova o aplicativo de amostra digitando:
kubectl delete -f examples/hamster.yaml
-
No diretório
vertical-pod-autoscaler
, exclua a implantação do Vertical Pod Autoscaler digitando:./hack/vpa-down.sh