O que e um init container? Setup antes de o seu app iniciar
Um init container roda e termina antes de os contineres principais de um pod iniciarem - um step de setup garantido que impede o app de rodar ate que ele tenha sucesso.
As vezes um pod precisa de preparacao antes de o app iniciar: aguardar uma dependencia, rodar uma migracao, buscar config. Init containers cuidam exatamente disso. Eles rodam em ordem, um apos o outro, e os contineres de app so iniciam quando todos tiverem concluido com sucesso.
Semantica de run-to-completion
Init containers rodam sequencialmente antes dos contineres de app. Cada um deve terminar com sucesso antes de o proximo rodar. Se um falha, o Kubernetes reinicia o pod e tenta de novo - o app nunca inicia em um pod preparado pela metade.
Usos comuns
- Aguardar ate que um banco de dados ou servico esteja acessivel.
- Rodar uma migracao de schema antes de o app iniciar.
- Buscar secrets, certs ou config para um volume compartilhado.
- Definir permissoes de sistema de arquivos em um volume montado.
Init container vs sidecar
Um init container faz o setup e termina antes do app; um sidecar roda por toda a vida do pod ao lado do app. Use init para "faca isso primeiro", sidecar para "continue fazendo isso".
Compartilhando resultados
Init containers comumente escrevem em um volume que o continer de app tambem monta - config ou certs buscados vao parar ali, prontos para o app quando ele iniciar.
O paralelo com a CI
Isso espelha um step de setup de CI que deve ter sucesso antes de os testes rodarem - instalar dependencias, aguardar um service container, popular dados. Ambos impoem "prepare, verifique e entao prossiga".
Principais conclusões
- Init containers rodam ate concluir, em ordem, antes de os contineres de app iniciarem.
- Eles garantem o setup (esperas, migracoes, config) antes de o app iniciar.
- Ao contrario dos sidecars, eles terminam; nao rodam por toda a vida do pod.