
firecracker v1.17.0
MicroVMs seguros y rápidos para la computación sin servidor.
Nuestra misión es permitir la ejecución segura, multiinquilino y con mínima sobrecarga de cargas de trabajo de contenedores y funciones.
Lee más sobre la Carta de Firecracker aquí.
¿Qué es Firecracker?
Firecracker es una tecnología de virtualización de código abierto diseñada específicamente para crear y gestionar servicios seguros, multiinquilino y basados en contenedores y funciones que proporcionan modelos operativos serverless. Firecracker ejecuta cargas de trabajo en máquinas virtuales ligeras, llamadas microVMs, que combinan las propiedades de seguridad y aislamiento proporcionadas por la tecnología de virtualización de hardware con la velocidad y flexibilidad de los contenedores.
Descripción general
El componente principal de Firecracker es un monitor de máquina virtual (VMM) que utiliza el Kernel Virtual Machine (KVM) de Linux para crear y ejecutar microVMs. Firecracker tiene un diseño minimalista. Excluye dispositivos innecesarios y funcionalidad orientada al huésped para reducir la huella de memoria y la superficie de ataque de cada microVM. Esto mejora la seguridad, disminuye el tiempo de arranque y aumenta la utilización del hardware. Firecracker también se ha integrado en runtimes de contenedores, por ejemplo Kata Containers y Flintlock.
Firecracker fue desarrollado en Amazon Web Services para acelerar la velocidad y eficiencia de servicios como AWS Lambda y AWS Fargate. Firecracker es de código abierto bajo Apache versión 2.0.
Para leer más sobre Firecracker, consulta firecracker-microvm.io.
Primeros pasos
Para comenzar con Firecracker, descarga los binarios de la última versión o compílalo desde el código fuente.
Puedes compilar Firecracker en cualquier sistema Unix/Linux que tenga Docker en ejecución (usamos un contenedor de desarrollo) y bash instalado, de la siguiente manera:
git clone https://github.com/firecracker-microvm/firecracker
cd firecracker
tools/devtool build
toolchain="$(uname -m)-unknown-linux-musl"
El binario de Firecracker se ubicará en build/cargo_target/${toolchain}/debug/firecracker. Para más información sobre cómo compilar, probar y ejecutar Firecracker, consulta la guía de inicio rápido.
La seguridad general de las microVMs de Firecracker, incluida la capacidad de cumplir los criterios para la computación multiinquilino segura, depende de un sistema operativo host Linux bien configurado. Una configuración que creemos que cumple este estándar se incluye en el documento de configuración del host de producción.
Contribuciones
Firecracker ya ejecuta cargas de trabajo de producción dentro de AWS, pero aún es el Día 1 en el camino guiado por nuestra misión. Hay mucho más por construir y damos la bienvenida a todas las contribuciones.
Para contribuir a Firecracker, consulta la sección de configuración de desarrollo en la guía de inicio y luego las directrices de contribución de Firecracker.
Versiones
Las nuevas versiones de Firecracker se publican a través de la página de versiones del repositorio de GitHub, normalmente cada dos o tres meses. Un historial de cambios se registra en nuestro registro de cambios.
La política de versiones de Firecracker se detalla aquí.
Diseño
La arquitectura general de Firecracker se describe en el documento de diseño.
Características y capacidades
Firecracker consiste en un único proceso de gestor de micro máquinas virtuales que expone un endpoint de API al host una vez iniciado. La API está especificada en formato OpenAPI. Lee más al respecto en la documentación de la API.
El endpoint de API se puede utilizar para:
- Configurar la microVM mediante:
- Establecer el número de vCPUs (el valor predeterminado es 1).
- Establecer el tamaño de memoria (el valor predeterminado es 128 MiB).
- Configurar una plantilla de CPU.
- Añadir una o más interfaces de red a la microVM.
- Añadir uno o más discos de lectura-escritura o solo lectura a la microVM, cada uno representado por un dispositivo de bloque respaldado por archivo.
- Activar un nuevo escaneo del dispositivo de bloque mientras el huésped está en ejecución. Esto permite que el sistema operativo huésped detecte cambios de tamaño en el archivo de respaldo del dispositivo de bloque.
- Cambiar el archivo de respaldo de un dispositivo de bloque, antes o después del arranque del huésped.
- Configurar limitadores de velocidad para dispositivos virtio que pueden limitar el ancho de banda, las operaciones por segundo, o ambos.
- Configurar el sistema de registro y métricas.
[BETA]Configurar el árbol de datos del servicio de metadatos orientado al huésped. El servicio solo está disponible para el huésped si este recurso está configurado.- Añadir un socket vsock a la microVM.
- Añadir un dispositivo de entropía a la microVM.
- Añadir un dispositivo pmem a la microVM.
- Configurar y gestionar hotplugging de memoria.
[Vista previa para desarrolladores]Hot-plug y hot-unplug de dispositivos virtio PCI mientras la VM está en ejecución.- Iniciar la microVM usando una imagen de kernel dada, un sistema de archivos raíz y argumentos de arranque.
- [Solo x86_64] Detener la microVM.
Capacidades integradas:
- Paginación por demanda de fallos y sobresuscripción de CPU habilitadas por defecto.
- Filtros seccomp avanzados y específicos por hilo para mayor seguridad.
- Proceso Jailer para iniciar Firecracker en escenarios de producción; aplica una barrera de aislamiento de cgroup/namespace y luego elimina privilegios.
Plataformas probadas
Probamos todas las combinaciones de:
| Instancia | SO y kernel del host | Rootfs del huésped | Kernel del huésped |
|---|---|---|---|
| m5n.metal (Intel Cascade Lake) | al2 linux_5.10 | ubuntu 24.04 | linux_5.10 |
| m6i.metal (Intel Ice Lake) | al2023 linux_6.1 | linux_6.1 | |
| al2023 linux_6.18 | |||
| m7i.metal-24xl (Intel Sapphire Rapids) | |||
| m7i.metal-48xl (Intel Sapphire Rapids) | |||
| m8i.metal-48xl (Intel Granite Rapids)* | |||
| m8i.metal-96xl (Intel Granite Rapids)* | |||
| m6a.metal (AMD Milan) | |||
| m7a.metal-48xl (AMD Genoa) | |||
| m6g.metal (Graviton 2) | |||
| m7g.metal (Graviton 3) | |||
| m8g.metal-24xl (Graviton 4) | |||
| m8g.metal-48xl (Graviton 4) | |||
| m9g.metal-48xl (Graviton 5) |
*: Solo admitimos instancias AWS EC2 de 8.ª generación Intel (*8i) que utilicen un kernel de host 6.1 o 6.18. Esto se debe al escaso soporte del kernel para CPUs Granite Rapids en 5.10.
Problemas conocidos y limitaciones
- El dispositivo RTC
pl031en aarch64 no admite interrupciones, por lo que los programas del huésped que utilizan una alarma RTC (por ejemplo,hwclock) no funcionarán.
Rendimiento
Las características de rendimiento de Firecracker se enumeran como parte de la documentación de especificaciones. Todas las especificaciones forman parte de nuestro compromiso de admitir cargas de trabajo de contenedores y funciones en modelos operativos serverless y, por lo tanto, se aplican mediante pruebas de integración continua.
Política de divulgación de seguridad
La seguridad de Firecracker es nuestra máxima prioridad. Si sospechas que has descubierto una vulnerabilidad, contáctanos de forma privada, como se describe en nuestro documento de política de seguridad; priorizaremos inmediatamente tu divulgación.
Preguntas frecuentes y contacto
Las preguntas frecuentes se recopilan en nuestro documento de preguntas frecuentes.
Puedes ponerte en contacto con la comunidad de Firecracker de las siguientes maneras:
- Problemas relacionados con la seguridad, consulta nuestro documento de política de seguridad.
- Chatea con nosotros en nuestro espacio de trabajo de Slack Nota: la mayoría de los mantenedores están en una zona horaria europea.
- Abre un issue de GitHub en este repositorio.
- Envía un correo electrónico a los mantenedores a [email protected].
Al comunicarte dentro de la comunidad de Firecracker, ten en cuenta nuestro código de conducta.