Cloud Intelligence™
Chega de superprovisionar para a inicialização: conheça o novo CPU Startup Boost do GKE
Esta página também está disponível em English, Deutsch, Español, Français, Italiano e 日本語.
About Chimbu Chinnadurai
I've probably debugged a Kubernetes issue in more time zones than I care to count. Based in London, I help engineering teams across EMEA get their clusters to behave — and actually understand why they misbehaved in the first place.
I write, speak, and guest on podcasts about all things cloud-native. Away from the terminal: I enjoy cooking almost as much as simplifying overly complex systems.
My personal pageSe você já rodou uma JVM, um app Spring Boot ou qualquer coisa com um framework pesado no Kubernetes, sabe bem como é. Depois que o container esquenta, tudo fica bem. A latência se estabiliza, o uso de CPU cai e o app simplesmente roda. Mas nos primeiros segundos — às vezes dezenas de segundos — depois que o container inicia, é um workload completamente diferente. Carregamento de classes, warm-up do JIT, grafos de injeção de dependência e inicialização de connection pools. Tudo isso consome muita CPU, tudo ao mesmo tempo, e termina quase tão rápido quanto começou.
O Kubernetes não faz distinção entre "regime permanente" e "cold start". O CPU request que você define para o container é o que você tem durante toda a vida do Pod.
PerfectScale™ for Kubernetes
Ready to optimize?
Get your free Kubernetes savings analysis

O dilema: velocidade de inicialização vs. desperdício em idle
Toda equipe que roda workloads pesados e sensíveis à latência no Kubernetes é forçada a escolher entre duas concessões frustrantes:
Dimensionar para a inicialização e pagar por isso para sempre. Definir o CPU request alto o suficiente para passar rápido pela inicialização, mesmo que o app só precise de CPU mínima depois de aquecido. Esse request fica lá 24 horas por dia. É o que o scheduler usa para alocar o Pod, o que o cluster autoscaler usa para decidir se adiciona nós e o que aparece na sua fatura. Em algumas centenas de réplicas, o custo dessa troca entre inicialização mais rápida e desperdício contínuo se acumula rápido.
Dimensionar para o regime permanente e sofrer na inicialização. Definir o request de acordo com o uso real em runtime e aceitar que cada restart, cada rolling deployment, cada upgrade de nó significa uma espera longa até o Pod ficar pronto. Sob CPU throttling, um warm-up de JVM que deveria levar 5 segundos pode se estender para 30 ou mais. Isso significa rollouts mais lentos, scale-out mais lento durante eventos do HPA e possíveis picos de latência para os usuários.
Nenhuma das opções é realmente aceitável. O CPU startup boost foi criado para fechar essa lacuna.
O que o CPU startup boost realmente resolve
O CPU startup boost é um novo recurso do Vertical Pod Autoscaler (VPA) do GKE, atualmente em Preview. Ele permite aumentar temporariamente o CPU request de um container durante a inicialização do Pod e depois reduzi-lo automaticamente de volta ao baseline, sem reiniciar o container.
Runtimes que consomem muitos recursos (Java, Node.js e Python com imports pesados) recebem a folga de CPU de que precisam apenas quando precisam: durante a inicialização. Seu request de baseline pode refletir o uso real em regime permanente, em vez de um valor inflado para dar conta dos primeiros segundos de vida do Pod. Como a redução do valor com boost para o baseline usa o in-place Pod resize (IPPR) do Kubernetes, em vez de eviction e recriação do Pod, o container continua rodando o tempo todo.
Isso funciona em conjunto com a função habitual do VPA de recomendar e aplicar o dimensionamento de recursos de longo prazo. O startup boost é, na prática, apenas um override de curta duração aplicado por cima do baseline que o VPA (ou você) já estabeleceu.
Como funciona e como configurar
O passo a passo completo está aqui: Accelerate application startup with CPU startup boost.
O CPU startup boost é definido adicionando um bloco startupBoost ao seu objeto VerticalPodAutoscaler. Você pode aplicá-lo no nível do Pod, para que todos os containers recebam o mesmo boost, ou no nível do container, para direcionar containers específicos ou excluir alguns de um boost aplicado a todo o Pod.
Ele só é acionado na criação do Pod. Se um container reiniciar depois — por exemplo, após um OOMKill enquanto o Pod em si continua vivo —, o boost não é reaplicado. O admission webhook que injeta o boost roda apenas na admissão inicial do Pod.
O tipo de boost pode ser um multiplicador ou uma quantidade fixa. type: "Factor" multiplica o CPU request de baseline por um fator (factor: 2 o dobra); type: "Quantity" adiciona uma quantidade fixa de CPU por cima do baseline.
Ele funciona junto com os update modes do VPA, não no lugar deles. Use com updateMode: "Off" se quiser apenas o comportamento de boost e nada mais, ou combine com updateMode: "InPlaceOrRecreate" se também quiser que o VPA continue ajustando os recursos com base no uso contínuo.
Para configurar um boost no nível do Pod, use uma das opções a seguir.
Boost no nível do Pod, com atuação do VPA desligada
Use esta opção quando quiser o boost e nada mais — o VPA não aplicará nenhuma outra recomendação de recursos.
apiVersion: "autoscaling.k8s.io/v1"kind: VerticalPodAutoscalermetadata: name: example-vpaspec: targetRef: apiVersion: "apps/v1" kind: Deployment name: example updatePolicy: updateMode: "Off" startupBoost: cpu: type: "Factor" factor: 2 durationSeconds: 10Cada container do Pod recebe 2x seu CPU request de baseline durante os primeiros 10 segundos após o Pod atingir Ready; depois disso, o GKE o redimensiona de volta in-place.
Boost no nível do Pod, com gerenciamento contínuo do VPA
Use esta opção quando quiser tanto o startup boost quanto o right-sizing contínuo e in-place dos recursos depois.
apiVersion: "autoscaling.k8s.io/v1"kind: VerticalPodAutoscalermetadata: name: example-vpaspec: targetRef: apiVersion: "apps/v1" kind: Deployment name: example updatePolicy: updateMode: "InPlaceOrRecreate" startupBoost: cpu: type: "Factor" factor: 2 durationSeconds: 10O comportamento do boost é o mesmo, mas updateMode: "InPlaceOrRecreate" significa que o VPA continua recomendando e aplicando mudanças de recursos ao longo da vida do Pod, tentando primeiro o resize in-place antes de recorrer à recriação.
Boost no nível do container, direcionado a um container
Útil quando um Deployment tem um sidecar ou container utilitário que não precisa do pico de CPU na inicialização. Você restringe o boost apenas ao container que precisa dele via resourcePolicy.containerPolicies.
apiVersion: "autoscaling.k8s.io/v1"kind: VerticalPodAutoscalermetadata: name: example-vpaspec: targetRef: apiVersion: "apps/v1" kind: Deployment name: example updatePolicy: updateMode: "Off" resourcePolicy: containerPolicies: - containerName: "boosted-container-name" mode: "Off" startupBoost: cpu: type: "Quantity" quantity: "2"Aqui, boosted-container-name recebe 2 vCPUs extras por cima do seu request de baseline durante a inicialização — uma quantidade fixa, e não um multiplicador.
Excluindo um container de um boost no nível do Pod
O caso inverso: um boost no nível do Pod está configurado, mas um container não deve receber o boost junto com o restante.
apiVersion: "autoscaling.k8s.io/v1"kind: VerticalPodAutoscalermetadata: name: example-vpaspec: targetRef: apiVersion: "apps/v1" kind: Deployment name: example updatePolicy: updateMode: "InPlaceOrRecreate" startupBoost: cpu: type: "Factor" factor: 2 resourcePolicy: containerPolicies: - containerName: "disable-cpu-boost-for-this-container" startupBoost: cpu: type: "Factor" factor: 1O boost no nível do Pod aplica um fator de 2x a tudo por padrão, mas a política do container sobrescreve isso com um fator de 1 para o container especificado.
Your cloud bill shouldn't be a mystery
Optimization, automation, expertise. In one platform.
Outros pontos que vale a pena conhecer antes de ativar
Alguns requisitos operacionais precisam ser atendidos antes de usar o CPU startup boost.
Requisitos. Você precisa do GKE 1.36.0-gke.4447000 ou posterior, no Standard ou no Autopilot. O VPA precisa estar habilitado — ele vem ativado por padrão no Autopilot, e no Standard você precisa ativá-lo explicitamente. Seu workload também precisa ser gerenciado por um controller (Deployment, StatefulSet e assim por diante); Pods avulsos não são suportados. A lista completa está aqui: Requisitos do CPU startup boost.
Interações com o HPA. Se você também estiver rodando o Horizontal Pod Autoscaler, defina um readinessProbe e configure durationSeconds: 0 no boost. Caso contrário, o HPA pode interpretar o pico temporário de CPU como carga real e fazer scale-out antes da hora. Veja Interactions with horizontal Pod autoscaling.
Interações com o cluster autoscaler no Standard. Um startup boost pode acionar um scale-up de nós para acomodar o request com boost. Quando o boost expira e o nó parece subutilizado, isso pode acionar um scale-down e causar o eviction do Pod — um loop. O GKE recomenda explicitamente usar o Autopilot se você quiser evitar esses loops de desfragmentação sem configuração extra. Veja Cluster autoscaler and eviction loops.
Limites de capacidade do nó. Em clusters Standard, se não houver espaço para o request com boost completo, o GKE o limita ao que realmente cabe no nó.
Verificação. Confirme que um boost foi aplicado verificando a anotação vpaCpuStartupBoost/<container-name> no Pod, e confirme que o unboost aconteceu procurando por um evento InPlaceResizedByVPA (kubectl get events --field-selector reason=InPlaceResizedByVPA). Passo a passo completo: Verify CPU startup boost.
Conclusão
O CPU startup boost fecha uma lacuna real na forma como o Kubernetes lida com o dimensionamento de recursos. Ele separa "o que meu app precisa para iniciar rápido" de "o que meu app precisa depois de estar rodando" — uma distinção que antes significava inflar seus requests de baseline para sempre ou conviver com inicializações lentas e limitadas por throttling. Agora você tem as duas coisas: um start rápido e um footprint enxuto em regime permanente, aplicados automaticamente e removidos in-place, sem interromper o container.
Ainda é um recurso em Preview, então valem as ressalvas de sempre: avalie primeiro em um ambiente que não seja de produção e preste muita atenção às interações entre o HPA e o cluster autoscaler antes de fazer o rollout em larga escala.
Right-sizing além da janela de inicialização
O CPU startup boost resolve o pico do boot inicial, mas ele ainda depende de um baseline de regime permanente preciso. Em uma frota grande, manter esses requests de CPU e memória de baseline precisos ao longo do tempo é um problema contínuo.
É aí que entra o PerfectScale by DoiT. O PerfectScale monitora a utilização real para fazer o right-sizing contínuo dos requests de baseline dos pods. Ele usa o resize in-place de Pods para ajustar recursos sem evictions nem restarts, trabalhando junto com seus autoscalers existentes (como Cluster Autoscaler ou Karpenter).
Se o startup boost garante um cold start rápido e sem interrupções, o PerfectScale é o que impede que o restante do ciclo de vida do Pod volte a cair no super ou no subprovisionamento.
Agende uma demo para saber mais sobre o PerfectScale by DoiT.