Esta página explica como pode analisar e otimizar a atribuição de recursos para melhorar a eficiência da carga de trabalho no Google Kubernetes Engine (GKE) através da escala automática vertical de pods. Ao analisar a utilização de recursos da sua carga de trabalho ao longo do tempo, pode receber recomendações de otimização e ajustar automaticamente os pedidos de CPU e memória, bem como os limites para contentores nos pods.
Nesta página, vai saber como funciona o dimensionamento automático de pods vertical, as respetivas vantagens e limitações, as práticas recomendadas para a sua utilização e aceder às referências da API para o recurso personalizado VerticalPodAutoscaler e os tipos relacionados.
Esta página destina-se a operadores e programadores que aprovisionam e configuram recursos na nuvem, implementam cargas de trabalho e gerem o dimensionamento de aplicações. Para saber mais sobre as funções comuns, consulte o artigo Funções e tarefas comuns de utilizadores do GKE.
Antes de ler esta página, certifique-se de que está familiarizado com os pedidos e os limites de recursos no Kubernetes.
Para necessidades de escalabilidade rápida em resposta a uma utilização repentina de recursos, use o redimensionador automático horizontal de pods.
Para saber as práticas recomendadas para o dimensionamento automático, consulte o artigo Práticas recomendadas para executar aplicações Kubernetes otimizadas em termos de custos no GKE.
Como funciona a escala automática vertical de pods
A escala automática vertical de pods permite-lhe analisar e definir os recursos de CPU e memória necessários pelos pods. Em vez de ter de configurar os pedidos e os limites da CPU atualizados e os pedidos e os limites de memória para os contentores nos seus pods, pode configurar a escala automática vertical de pods para fornecer valores recomendados para os pedidos e os limites da CPU e da memória que pode usar para atualizar manualmente os seus pods. Em alternativa, pode configurar a escala automática vertical de pods para atualizar automaticamente os valores.
A escala automática vertical de pods está ativada por predefinição nos clusters do Autopilot.
Modos de escala automática vertical de pods
Pode configurar a forma como o dimensionamento automático de pods vertical aplica alterações de recursos através da aplicação de diferentes modos de atualização.
Modo Auto (Recreate)
No modo Recreate, a escala automática vertical de pods
despeja um pod se precisar de alterar os pedidos de recursos do pod. A remoção é necessária porque, devido às limitações do Kubernetes nas versões anteriores à 1.33, a única forma de modificar os pedidos de recursos de um pod em execução é recriá-lo.
Para limitar a quantidade de recriações de pods, use um orçamento de interrupção de pods. Para garantir que o cluster consegue processar os novos tamanhos das cargas de trabalho, use o dimensionamento automático do cluster e o aprovisionamento automático de nós.
A escala automática vertical de pods notifica o redimensionador automático de clusters antes da atualização e fornece os recursos necessários para a carga de trabalho redimensionada antes de recriar a carga de trabalho, de modo a minimizar o tempo de interrupção.
Modo Initial
Com a Initial ativada, a escala automática vertical de pods só atribui pedidos de recursos no momento da criação do pod e nunca os altera posteriormente.
Modo InPlaceOrRecreate
O modo InPlaceOrRecreate tem como objetivo reduzir a interrupção do serviço tentando atualizar os recursos do pod sem recriar o pod. Embora este modo não garanta
zero interrupções, pode ajudar a reduzi-las e, ao mesmo tempo, beneficiar do
ajuste automático vertical de pods.
Para usar o modo InPlaceOrRecreate, defina o campo spec.updatePolicy.updateMode como "InPlaceOrRecreate" no objeto VerticalPodAutoscaler.
Se o ajuste de escala automático vertical do pod determinar que uma atualização no local não é possível, reverte para o comportamento do modo Auto, que remove e recria o pod para aplicar as alterações.
O modo InPlaceOrRecreate está disponível com a versão 1.34.0-gke.2011000 do Kubernetes e
posterior.
Para mais detalhes sobre o comportamento e as limitações existentes do modo InPlaceOrRecreate, consulte o anúncio do Kubernetes sobre as atualizações no local.
Vantagens
A escala automática vertical de pods oferece as seguintes vantagens:
- Definir os pedidos e os limites de recursos certos para as suas cargas de trabalho melhora a estabilidade e a rentabilidade. Se os tamanhos dos recursos do pod forem inferiores aos necessários para as suas cargas de trabalho, a sua aplicação pode ser limitada ou falhar devido a erros de falta de memória. Se os tamanhos dos recursos forem demasiado grandes, tem desperdício e, por isso, faturas mais elevadas.
- Os nós do cluster são usados de forma eficiente porque os pods usam exatamente o que precisam.
- Os pods são agendados em nós que têm os recursos adequados disponíveis.
- Não tem de executar tarefas de testes de referência demoradas para determinar os valores corretos para pedidos de CPU e memória.
- Tempo de manutenção reduzido, uma vez que o dimensionador automático pode ajustar os pedidos de CPU e memória ao longo do tempo sem qualquer ação da sua parte.
A escala automática vertical de pods do GKE oferece as seguintes vantagens em relação ao redimensionador automático de código aberto do Kubernetes:
- Tem em conta o tamanho máximo do nó e as quotas de recursos ao determinar o objetivo da recomendação.
- Notifica o redimensionador automático de clusters para ajustar a capacidade do cluster.
- Usa dados do histórico, fornecendo métricas recolhidas antes de ativar o Vertical Pod Autoscaler.
- Executa pods de escala automática vertical de pods como processos do plano de controlo, em vez de implementações nos nós de trabalho.
Limitações
- Para usar a escala automática vertical de pods com a escala automática horizontal de pods, use a escala automática de pods multidimensional. Também pode usar a escala automática vertical de pods com a escala automática horizontal de pods em métricas personalizadas e externas.
- A escala automática vertical de pods não está pronta para utilização com cargas de trabalho baseadas na JVM devido à visibilidade limitada da utilização real de memória da carga de trabalho.
- A escala automática vertical de pods tem uma predefinição de duas réplicas mínimas para as implementações substituírem os pods por valores de recursos revistos. Na versão 1.22 e posteriores do GKE, pode substituir esta definição especificando um valor para
minReplicasno campo PodUpdatePolicy. - Se usar o
InPlaceOrRecreatemodo de atualização da escala automática vertical de pods e não for possível fazer uma atualização no local (por exemplo, quando aumenta a escala do pod para além da capacidade do nó), a escala automática vertical de pods despeja e recria o pod para aplicar a recomendação. A remoção e a recriação ocorrem mesmo para os pods que têm umresizePolicydefinido na respetiva especificação para evitar recriações. Este comportamento ocorre para pedidos de redimensionamento do Autopilot, incluindo quando aplica restrições de recursos mínimos e de proporção CPU:memória.
Práticas recomendadas
- Para evitar interrupções nas atualizações de clusters, recomendamos que mantenha o número de objetos
VerticalPodAutoscalerpor cluster abaixo de 1000. - A escala automática vertical de pods funciona melhor com cargas de trabalho homogéneas de execução prolongada.
Referência da API
Esta é a referência da API v1. Recomendamos vivamente a utilização desta versão da API.
VerticalPodAutoscaler v1 autoscaling.k8s.io
| Campos | |
|---|---|
|
Grupo, versão e tipo da API. |
metadata |
Metadados de objetos padrão. |
spec |
O comportamento pretendido do |
status |
O estado observado mais recentemente do |
VerticalPodAutoscalerSpec v1 autoscaling.k8s.io
| Campos | |
|---|---|
targetRef |
Referência ao controlador que gere o conjunto de pods para o
autoscaler controlar, por exemplo, uma implementação ou um StatefulSet.
Pode apontar um |
updatePolicy |
Especifica se as atualizações recomendadas são aplicadas quando um Pod é iniciado e se as atualizações recomendadas são aplicadas durante a vida útil de um Pod. |
resourcePolicy |
Especifica as políticas de ajuste dos pedidos de CPU e memória para contentores individuais. A política de recursos pode ser usada para definir restrições nas recomendações para contentores individuais. Se não for especificado, o escalador automático calcula os recursos recomendados para todos os contentores no pod, sem restrições adicionais. |
recommenders |
Recomendador responsável por gerar a recomendação para este objeto VPA. Deixe este campo vazio para usar o recomendador predefinido fornecido pelo GKE. Caso contrário, a lista pode conter exatamente uma entrada para um recomendador alternativo fornecido pelo utilizador. Suportado desde o GKE 1.22. |
VerticalPodAutoscalerList v1 autoscaling.k8s.io
| Campos | |
|---|---|
|
Grupo, versão e tipo da API. |
metadata |
Metadados de objetos padrão. |
items |
Uma lista de |
PodUpdatePolicy v1 autoscaling.k8s.io
| Campos | |
|---|---|
updateMode |
Especifica se as atualizações recomendadas são aplicadas quando um Pod é iniciado e se as atualizações recomendadas são aplicadas durante a vida útil de um Pod. Os valores possíveis são os seguintes:
|
minReplicas |
O número mínimo de réplicas que têm de estar ativas para
tentar a remoção de pods (pendente de outras verificações, como o orçamento de interrupção de pods).
Apenas são permitidos valores positivos. A predefinição é |
PodResourcePolicy v1 autoscaling.k8s.io
| Campos | |
|---|---|
containerPolicies |
Uma matriz de políticas de recursos para contentores individuais. Pode existir, no máximo, uma entrada para cada contentor com nome e, opcionalmente, uma única entrada com carateres universais com `containerName = '*'`, que processa todos os contentores que não têm políticas individuais. |
ContainerResourcePolicy v1 autoscaling.k8s.io
| Campos | |
|---|---|
containerName |
O nome do contentor ao qual a política se aplica. Se não for especificada, a política serve como política predefinida. |
mode |
Especifica se as atualizações recomendadas são aplicadas ao contentor quando é iniciado e se as atualizações recomendadas são aplicadas durante a duração do contentor. Os valores possíveis são "Off" e "Auto". A predefinição é "Auto" se não especificar um valor. |
minAllowed |
Especifica o pedido mínimo de CPU e o pedido de memória permitidos para o contentor. Por predefinição, não é aplicado nenhum mínimo. |
maxAllowed |
Especifica o pedido máximo de CPU e o pedido de memória permitidos para o contentor. Por predefinição, não é aplicado nenhum máximo. |
ControlledResources |
Especifica o tipo de recomendações que vão ser calculadas (e
possivelmente aplicadas) pelo |
VerticalPodAutoscalerRecommenderSelector v1 autoscaling.k8s.io
| Campos | |
|---|---|
name |
Nome do recomendador responsável por gerar a recomendação para este objeto. |
VerticalPodAutoscalerStatus v1 autoscaling.k8s.io
| Campos | |
|---|---|
recommendation |
Os pedidos de CPU e memória recomendados mais recentemente. |
conditions |
Descreve o estado atual do |
RecommendedPodResources v1 autoscaling.k8s.io
| Campos | |
|---|---|
containerRecommendation |
Uma matriz de recomendações de recursos para contentores individuais. |
RecommendedContainerResources v1 autoscaling.k8s.io
| Campos | |
|---|---|
containerName |
O nome do contentor ao qual a recomendação se aplica. |
target |
O pedido de CPU e o pedido de memória recomendados para o contentor. |
lowerBound |
O pedido de CPU mínimo recomendado e o pedido de memória para o contentor. Não é garantido que este valor seja suficiente para que a aplicação seja estável. A execução com pedidos de CPU e memória mais pequenos tem provavelmente um impacto significativo no desempenho ou na disponibilidade. |
upperBound |
O pedido de CPU e o pedido de memória máximos recomendados para o contentor. É provável que os pedidos de CPU e memória superiores a estes valores sejam desperdiçados. |
uncappedTarget |
A recomendação de recursos mais recente calculada pelo dimensionador automático, com base na utilização real de recursos, sem ter em conta a ContainerResourcePolicy. Se a utilização real de recursos fizer com que o destino viole a ContainerResourcePolicy, isto pode ser diferente da recomendação limitada. Este campo não afeta a atribuição real de recursos. É usado apenas como uma indicação de estado. |
VerticalPodAutoscalerCondition v1 autoscaling.k8s.io
| Campos | |
|---|---|
type |
O tipo de condição que está a ser descrito. Os valores possíveis são "RecommendationProvided", "LowConfidence", "NoPodsMatched" e "FetchingHistory". |
status |
O estado da condição. Os valores possíveis são True, False e Unknown. |
lastTransitionTime |
A última vez que a condição fez uma transição de um estado para outro. |
reason |
O motivo da última transição de um estado para outro. |
message |
Uma string legível que fornece detalhes sobre a última transição de um estado para outro. |
O que se segue?
- Saiba como dimensionar os pedidos e os limites de recursos de contentores.
- Saiba mais sobre as práticas recomendadas para executar aplicações Kubernetes otimizadas em termos de custos no GKE.
- Saiba mais sobre o dimensionamento automático de clusters.