engenharia
Um trabalho, uma VM: como isolamos cargas de trabalho de CI
Por que não executamos jobs de CI em contêineres em um kernel compartilhado e quanto isso nos custa.
{autor} · {papel} · {data} · {minutos} {minutosLabel}
Um executor de CI executa código arbitrário do seu repositório com acesso aos seus segredos. O isolamento de contêiner em um kernel compartilhado não é um limite suficiente para isso, porque uma vulnerabilidade de kernel é uma vulnerabilidade de limite de locatário.
O que fazemos
- Cada trabalho recebe seu próprio microVM com seu próprio kernel
- A VM é destruída quando o trabalho termina — nunca reutilizada, nunca reciclada
- Os discos são apagados criptograficamente em vez de serem desanexados e devolvidos a um pool
- Os objetos de cache são criptografados por repositório, portanto, uma leitura de cache não pode cruzar locatários
- Nenhum operador tem acesso shell a uma VM de trabalho em execução
Quanto custa
Um microVM inicializa mais lentamente do que um contêiner. Gastamos um esforço real de engenharia em pools quentes e na restauração de snapshots para reduzir esse tempo para cerca de três segundos. Os contêineres seriam mais fáceis e achamos que o comércio não está próximo.
Seu próximo build pode ser duas vezes mais rápido, pela metade do preço
Comece grátis. Sair é a mesma linha, e publicamos esse diff também.