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 do utilizador 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 reduzir as interrupções, ao mesmo tempo que beneficia 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.1709000 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 seus 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
minReplicas
no campo PodUpdatePolicy. - Se usar o modo de atualização
InPlaceOrRecreate
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 umresizePolicy
definido na respetiva especificação para evitar recriações.
Práticas recomendadas
- Para evitar interrupções na atualização do cluster, recomendamos que mantenha o número de objetos
VerticalPodAutoscaler
por 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.