Pular para o conteúdo

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.