Conceitos · Containers

Lifecycle Hooks

postStart e preStop permitem executar ações no momento exato em que um container inicia ou para. Fundamentais para zero-downtime deploys no EKS.

// TIMELINE DE INÍCIO E ENCERRAMENTO
STARTUP →
Container criado
postStart executa
StartupProbe
ReadinessProbe
LivenessProbe
🟢 Tráfego
← SHUTDOWN
SIGTERM enviado
preStop executa
terminationGracePeriod
SIGKILL (se necessário)
🔴 Pod removido
🚀

postStart

Executado imediatamente após o container ser criado. Roda em paralelo com o ENTRYPOINT — não há garantia de ordem entre postStart e o processo principal. O container não passa para o estado Running até o postStart completar.

CASOS DE USO
  • ·Registrar o serviço em um service registry
  • ·Aquecer cache antes de aceitar tráfego
  • ·Enviar notificação de startup para sistema externo
  • ·Validar que dependências estão disponíveis
EXEMPLO
lifecycle:
  postStart:
    exec:
      command:
      - /bin/sh
      - -c
      - echo "started" >> /var/log/app.log
⚠️ postStart e o ENTRYPOINT rodam em paralelo — não use postStart para aguardar o processo principal, isso pode criar race condition.
🛑

preStop

Executado antes do SIGTERM ser enviado ao container. O gateway da AWS leva alguns segundos para remover o pod dos targets após receber a notificação — sem preStop, requisições em andamento são cortadas. Este é o hook mais importante para zero-downtime no EKS.

CASOS DE USO
  • ·Aguardar o ALB remover o pod dos targets (sleep 5)
  • ·Drenar conexões em andamento (HTTP keep-alive)
  • ·Desregistrar do service registry (Consul, Eureka)
  • ·Finalizar writes em andamento antes de fechar DB connection
EXEMPLO — ZERO DOWNTIME NO EKS
lifecycle:
  preStop:
    exec:
      command:
      - /bin/sh
      - -c
      - sleep 5  # aguarda ALB

terminationGracePeriodSeconds: 30
💡 Receita zero-downtime EKS: preStop com sleep 5 + terminationGracePeriodSeconds: 30 + app que faz graceful shutdown ao receber SIGTERM. Isso cobre o delay de deregistration do ALB Target Group.

Tipos de Handler

exec

Executa um comando dentro do container. Mais comum e flexível.

command: ['/bin/sh', '-c', 'sleep 5']
httpGet

Faz uma requisição HTTP GET. Útil para chamar endpoint de shutdown da aplicação.

path: /shutdown
port: 8080
tcpSocket

Abre uma conexão TCP na porta especificada. Mais simples que HTTP.

port: 8080