
Na AWS re: Invent 2018, que acontece atualmente em Las Vegas, ocorreu
o anúncio do
Firecracker , uma nova tecnologia de virtualização de código aberto baseada no Linux KVM. Os autores prometem que, com isso, "em uma fração de segundo, você pode executar máquinas micro-virtuais leves (microVMs) em um ambiente não virtualizado, obtendo as vantagens das VMs tradicionais - na forma de segurança e isolamento de cargas de trabalho e contêineres - na forma de uso eficiente dos recursos".
Antecedentes
O Firecracker está sendo desenvolvido por funcionários da Amazon Web Services que se propuseram a melhorar o consumo de recursos e a vida útil de usuários de serviços como o AWS Lambda (lançado em 2014 e hoje nos permite dizer que o modelo sem servidor
continuará a existir) e o AWS Fargate (apareceu um ano atrás) )
O projeto foi baseado no desenvolvimento de código aberto do Google,
crosvm do Chromium OS, escrito em Rust e responsável pelo lançamento de sistemas operacionais com virtualização de dispositivos (mas sem emular hardware real). Portanto, o código do Firecracker também é escrito
na linguagem Rust , e seus autores prometem retornar suas correções à base de código do projeto pai, embora os próprios projetos tenham divergido bastante de propósito.
A primeira versão pública do Firecracker -
0.1.0 - ocorreu em março deste ano, e a última
versão mais recente -
0.11.0 - há apenas alguns dias. Comecei a escrever este artigo logo após o anúncio do Firecracker na Internet, quando o projeto tinha 76 estrelas no GitHub e, no momento da publicação, esse número ultrapassava 500.

Recursos do Firecracker
O principal componente do Firecracker é o VMM (Virtual Machine Monitor), que usa o Linux KVM para criar e executar os chamados microVMs. Os autores chamam seu produto de "uma alternativa baseada na nuvem ao QEMU" [usada pela Kata Containers], "destinada apenas ao lançamento seguro e eficiente de contêineres".
E aqui está um exemplo de um sistema host que executa os microVMs mencionados:

Os desenvolvedores buscam o minimalismo, incluindo no produto apenas o mais necessário, garantindo assim custos mínimos de memória e, ao mesmo tempo, reduzindo o potencial de possíveis vulnerabilidades. No Firecracker,
apenas 4 dispositivos são emulados: virtio-net, virtio-block, console serial e um teclado com 1 botão, usado para interromper a operação do microVM. Como sistemas operacionais host e convidado, atualmente são suportados sistemas operacionais baseados no
kernel Linux versão 4.14 ( lançada em novembro do ano passado) e superior, e os planos atuais dos desenvolvedores são oferecer suporte às duas últimas ramificações estáveis do kernel Linux. Em termos de hardware, apenas os processadores Intel são suportados até o momento, mas a AMD e o ARM estão na agenda.
O Firecracker em si consiste em um único processo do VMM, que na inicialização disponibiliza a API do terminal (RESTful) na máquina host. A API em si é
descrita no formato OpenAPI e, em particular, permite iniciar o microVM com os parâmetros especificados (imagem do kernel, sistema de arquivos raiz, argumentos de inicialização) e pará-lo, configurar máquinas virtuais (número de vCPU, RAM, modelo para CPU), adicionar a interfaces de rede, discos (apresentados como dispositivos de bloco, modos de leitura e gravação e somente leitura disponíveis), configuram o sistema para logs e métricas.
As principais vantagens do Firecracker são segurança (foco na computação multilocatário, vários níveis de isolamento), alto desempenho (o microVM pode ser lançado
em 125 ms e os autores prometem melhorar esse valor no próximo ano), sobrecarga mínima (cada microVM consome cerca de 5 megabytes memória). O que acrescenta peso ao projeto - ele já foi testado "em batalha" e fornece o trabalho de vários serviços da AWS (incluindo os mencionados Lambda e Fargate).
Detalhes de segurança
Entre os principais recursos do Firecracker, focados em garantir um alto nível de segurança, são mencionados os seguintes:
- Modelo de convidado simples (para todos os convidados, apenas o mínimo é fornecido - veja acima cerca de 4 dispositivos).
- Isolando o processo do Firecracker com cgroups e seccomp BPF, bem como um conjunto limitado de chamadas de sistema permitidas.
- Vinculação estática do processo do Firecracker para iniciá-lo isoladamente do ambiente host.
Firecracker Demo
O blog da AWS
mostrou como você pode experimentar os microVMs em ação. Para fazer isso, basta criar uma instância do i3.metal e fazer upload de 3 arquivos para ela (arquivo executável do
firecracker
, imagem raiz do FS, kernel do Linux):

Depois disso - defina os direitos necessários para / dev / kvm:
$ sudo setfacl -mu:${USER}:rw /dev/kvm
Defina a configuração para a primeira máquina convidada:
$ curl --unix-socket /tmp/firecracker.sock -i \ -X PUT "http://localhost/machine-config" \ -H "accept: application/json" \ -H "Content-Type: application/json" \ -d "{ \"vcpu_count\": 1, \"mem_size_mib\": 512 }"
... então o núcleo para ela:
$ curl --unix-socket /tmp/firecracker.sock -i \ -X PUT "http://localhost/boot-source" \ -H "accept: application/json" \ -H "Content-Type: application/json" \ -d "{ \"kernel_image_path\": \"./hello-vmlinux.bin\", \"boot_args\": \"console=ttyS0 reboot=k panic=1 pci=off\" }"
... e FS raiz:
$ curl --unix-socket /tmp/firecracker.sock -i \ -X PUT "http://localhost/drives/rootfs" \ -H "accept: application/json" \ -H "Content-Type: application/json" \ -d "{ \"drive_id\": \"rootfs\", \"path_on_host\": \"./hello-rootfs.ext4\", \"is_root_device\": true, \"is_read_only\": false }"
Resta realmente lançar o convidado:
Resultado:

E quanto a outros projetos de contêineres?
Embora os autores do Firecracker prometam sua "integração com tempos de execução populares de contêineres", é isso que eles
respondem quando perguntados se o projeto pode ser usado com contêineres Kubernetes, Docker ou Kata:
Ainda não. Estamos desenvolvendo o Firecracker como um projeto de código aberto, pois oferece uma abordagem significativamente diferente à segurança no lançamento de contêineres. Esperamos que outras comunidades que criam tecnologias de código aberto para contêineres o considerem útil. "Estamos trabalhando para garantir que o Firecracker se integre perfeitamente ao ecossistema de contêineres - com o objetivo de integração contínua no futuro, fornecendo mais opções para isolar as cargas de trabalho de contêineres".
PS
Leia também em nosso blog: