Capítulo 12: Integración con Contenedores
Capítulo 12: Integración con Contenedores
Firecracker puede integrarse con el ecosistema de contenedores, permitiendo ejecutar imágenes Docker/OCI como microVMs con aislamiento fuerte, de forma transparente para las herramientas existentes.
Opciones de integración
| Herramienta | Descripción | Uso típico |
|---|---|---|
| firecracker-containerd | Runtime containerd oficial para Firecracker | Infraestructura propia |
| Kata Containers | Runtime alternativo para Kubernetes/containerd | Kubernetes con VMs |
| Ignite | CLI de Weaveworks para VMs como contenedores | Desarrollo local |
firecracker-containerd
firecracker-containerd es el runtime oficial que permite usar Firecracker como backend de containerd. Cada contenedor corre en su propia microVM.
Arquitectura
graph LR
A[Docker/nerdctl/kubectl] -->|CRI| B[containerd]
B -->|snapshotter| C[devmapper snapshotter]
B -->|runtime| D[firecracker-containerd runtime]
D -->|API| E[Firecracker VMM]
E -->|KVM| F[microVM]
F -->|rootfs| G[Imagen OCI como ext4]
Instalación de firecracker-containerd
# Prerrequisitos: containerd instalado
sudo apt-get install -y containerd
# Descargar release de firecracker-containerd
FC_VERSION="1.0.0"
ARCH="$(uname -m)"
curl -fsSL "https://github.com/firecracker-microvm/firecracker-containerd/releases/download/v${FC_VERSION}/firecracker-containerd_${FC_VERSION}_linux_${ARCH}.tar.gz" \
| sudo tar -xz -C /usr/local/bin
# Binarios instalados:
# - firecracker-containerd (runtime shim)
# - firecracker-ctr (cliente de prueba)
# - fcnet-setup (setup de red)
# - snapshotter (plugin de containerd)
Configurar containerd para usar Firecracker
# /etc/containerd/config.toml
version = 2
[plugins."io.containerd.grpc.v1.cri".containerd]
snapshotter = "devmapper"
default_runtime_name = "firecracker"
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.firecracker]
runtime_type = "aws.firecracker"
[proxy_plugins]
[proxy_plugins.devmapper]
type = "snapshot"
address = "/run/firecracker-containerd/snapshotter.sock"
# Reiniciar containerd
sudo systemctl restart containerd
Ejecutar contenedor en microVM
# Ejecutar un contenedor Alpine en una microVM Firecracker
sudo firecracker-ctr --address /run/firecracker-containerd/containerd.sock \
run --runtime "aws.firecracker" \
--snapshotter "devmapper" \
--rm \
docker.io/library/alpine:3.19 \
my-test-vm \
sh
Kernel personalizado para contenedores
Las imágenes de contenedores no incluyen kernel. Debes proveer el kernel:
# /etc/firecracker-containerd/runtime-config.json
{
"kernel_image_path": "/var/lib/firecracker-containerd/kernels/vmlinux",
"kernel_args": "console=ttyS0 noapic reboot=k panic=1 pci=off nomodule",
"drive": {
"is_read_only": false
},
"machine_config": {
"vcpu_count": 1,
"mem_size_mib": 512
}
}
Kata Containers con Firecracker
Kata Containers es un proyecto de la CNCF que usa Firecracker (entre otros VMMs) como runtime. Permite ejecutar pods de Kubernetes en microVMs.
Instalar Kata con Firecracker runtime
# Instalar kata-containers
sudo snap install kata-containers --classic
# O desde el release
KATA_VERSION="3.4.0"
curl -fsSL "https://github.com/kata-containers/kata-containers/releases/download/${KATA_VERSION}/kata-static-${KATA_VERSION}-amd64.tar.xz" \
| sudo tar -xJ -C /
# Verificar que el runtime de Firecracker está disponible
kata-runtime --kata-config /opt/kata/share/defaults/kata-containers/configuration-fc.toml check
Configurar Kubernetes para usar Kata+Firecracker
# RuntimeClass para Kata con Firecracker
apiVersion: node.k8s.io/v1
kind: RuntimeClass
metadata:
name: kata-fc
handler: kata-fc
---
# Pod usando el RuntimeClass
apiVersion: v1
kind: Pod
metadata:
name: secure-pod
spec:
runtimeClassName: kata-fc
containers:
- name: app
image: nginx:alpine
ContainerD + Kata en containerd
# /etc/containerd/config.toml - agregar runtime Kata
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.kata-fc]
runtime_type = "io.containerd.kata-fc.v2"
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.kata-fc.options]
ConfigPath = "/opt/kata/share/defaults/kata-containers/configuration-fc.toml"
Ignite (Weaveworks)
Ignite proporciona una experiencia similar a Docker para microVMs Firecracker:
# Instalar ignite
curl -fsSL "https://github.com/weaveworks/ignite/releases/latest/download/ignite-amd64" \
-o /usr/local/bin/ignite
chmod +x /usr/local/bin/ignite
# Ejecutar una VM con imagen OCI (¡como Docker!)
sudo ignite run weaveworks/ignite-ubuntu \
--name my-vm \
--cpus 2 \
--memory 1GB \
--ssh
# Conectar por SSH
sudo ignite ssh my-vm
# Listar VMs
sudo ignite ps
# Detener
sudo ignite stop my-vm
sudo ignite rm my-vm
Comparativa de opciones
| Criterio | firecracker-containerd | Kata + Firecracker | Ignite |
|---|---|---|---|
| Integración K8s | Media | Nativa | No |
| Facilidad de uso | Media | Compleja | Alta |
| Madurez | Alta | Muy alta | Media |
| Caso de uso | Infraestructura FaaS | K8s con VMs | Dev/test |