- Ferramenta de runtime desenvolvida para reduzir o desperdício de recursos de contêineres inativos em ambientes Kubernetes
- Se não houver conexão TCP por um determinado período, salva automaticamente um checkpoint do contêiner em disco
- Funciona no formato de containerd shim, salva o estado de memória do contêiner e o encerra, depois o restaura em alguns milissegundos na primeira conexão
- Durante a restauração, todo o estado da aplicação é recuperado como estava, então do ponto de vista do usuário quase não há latência
- Usa redirecionamento baseado em eBPF para encaminhar pacotes TCP ao proxy e, após a restauração, alterna para conexão direta
- Realiza checkpoint e restauração com CRIU - Checkpoint and Restore in Userspace
- Fornece um fluxo de restauração automática na primeira requisição por meio de uma sequência de ativação (activation sequence)
- Inclui uma lógica de espera inteligente que rastreia a atividade TCP recente para evitar interrupções e restaurações frequentes
- No Kubernetes, o contêiner continua sendo reconhecido como se estivesse em execução, evitando reinicializações do runtime
- Ao executar o comando
kubectl exec, a restauração acontece automaticamente e o acesso funciona como em um contêiner comum
- Cada processo shim coleta métricas, e o zeropod-manager em nível de nó as agrega e as expõe por um endpoint HTTP
- Se o cluster oferecer suporte, fornece in-place scaling para ajustar dinamicamente as solicitações de recursos
- Ao drenar um nó, é possível migrar Pods com scale down para outro nó
- Também oferece suporte experimental a migração ao vivo
- Adequado para serviços de baixo tráfego, ambientes de desenvolvimento e staging, tiers de baixo custo em plataformas semelhantes ao Heroku e backends de sites estáticos
- A maioria dos programas funciona sem modificações adicionais, e é possível analisar erros do CRIU pelos logs do containerd
4 comentários
Uma reinvenção do
inetd? (brincadeira)O Elastic Machine Pool da Platform 9, que vi no AWS re:Invent no ano passado, naquela época era voltado só para B2B e parecia pesado demais para testar rapidamente, mas este aqui é simples de instalar e tem um funcionamento intuitivo, então gostei. Eu queria alocar recursos de forma agressiva no ambiente de desenvolvimento sem prejudicar a experiência do usuário; se o PoC for bem, parece algo que vale a pena adotar.
Eu estava me perguntando em que isso era diferente do KNative, e pelo visto as duas frases abaixo são o ponto principal.
containerd shim, salva o estado de memória do contêiner e o encerra; depois, na primeira conexão, restaura em alguns milissegundoslambda. . .. ?