https://github.com/ctrox/zeropod

Zeropod é um runtime especializado para Kubernetes, implementado como um containerd shim, projetado para otimizar o uso de recursos ao automaticamente criar checkpoints e “pausar” containers que estão ociosos por um tempo determinado (baseado na ausência de conexões TCP). Quando ocioso, o Zeropod salva o estado completo da memória do container no disco usando CRIU (Checkpoint/Restore In Userspace). Se houver novo tráfego, ele intercepta a conexão de entrada, restaura o container em dezenas a centenas de milissegundos e encaminha a requisição — tornando o processo quase invisível para os usuários finais.

Principais Características

  • Escala até Zero: Permite que pods reduzam o uso de recursos a zero quando inativos, mas restauram instantaneamente o estado completo e disponibilidade quando necessário. O pod nunca é marcado como terminado no Kubernetes, garantindo que integrações operacionais como kubectl exec continuem funcionando normalmente.
  • Checkpoint Automático: O Zeropod monitora a atividade TCP. Após um período configurável de inatividade, ele cria um checkpoint do container em execução no disco.
  • Restauração Quase Instantânea: Quando uma nova conexão chega, o Zeropod reativa o container a partir do último estado com atraso mínimo.
  • Migração & Migração ao Vivo: Suporta migração de pods entre nós — tanto para containers “pausados” quanto (com recursos recentes) migração ao vivo de containers em execução sem tempo de inatividade, utilizando a migração preguiçosa do CRIU e transferência de memória segura via TLS pod-a-pod.
  • Eficiência de Recursos: Enquanto os pods estão pausados, suas alocações de CPU/memória podem ser reduzidas ou liberadas, diminuindo custos em ambientes de desenvolvimento, staging ou com baixo tráfego.
  • eBPF para Redirecionamento de Tráfego: Um programa eBPF intercepta o tráfego TCP, direcionando novas conexões para um processo “ativador” leve, que inicia a lógica de restauração e retoma a operação normal do container.
  • Métricas Prometheus: Expõe métricas operacionais e de checkpoint.

Casos de Uso

  • Sites e APIs com baixo tráfego.
  • Ambientes de desenvolvimento e staging com uso esporádico.
  • Oferta de pequenos níveis “gratuitos” ou reduzidos em PaaS.
  • Sites “quase estáticos” que eventualmente precisam de processamento dinâmico no servidor.
  • Qualquer workload Kubernetes que se beneficie da economia de custos durante períodos ociosos sem perder disponibilidade instantânea.

Configuração

Para usar o Zeropod, defina o runtimeClassName do pod como zeropod e aplique algumas anotações:

  • zeropod.ctrox.dev/container-names: Quais containers no pod devem ser gerenciados.
  • zeropod.ctrox.dev/ports-map: Portas a monitorar para gatilhos de restauração.
  • zeropod.ctrox.dev/scaledown-duration: Tempo de inatividade antes de reduzir escala (padrão: 1 minuto; zero desativa o scale-down automático).

Atividade Recente

Logs recentes de workflows e releases mostram desenvolvimento constante, incluindo a integração de novas capacidades de migração ao vivo e atualizações contínuas para suportar novas versões do CRIU e componentes instaladores mais robustos.

Resumindo, o Zeropod traz o conceito de “escala até zero” e restauração rápida e com estado para ambientes Kubernetes padrão com configuração mínima, permitindo eficiência no uso de recursos para quase qualquer perfil de aplicação.

Recomendação do Kope