Построение мини-платформы без серверов с Firecracker
Пошаговое руководство по созданию serverless-платформы с Firecracker microVMs. Архитектура, настройка, оптимизация и практическое применение.
Как построить мини-платформу без серверов с использованием Firecracker microVMs?
Firecracker microVMs — это технология виртуализации с открытым исходным кодом от AWS, которая позволяет создавать безопасные и легковесные виртуальные машины для бессерверных вычислений. Создание платформы без серверов на основе Firecracker требует понимания архитектуры KVM, настройки API-интерфейсов VMM и подготовки изолированной среды с использованием jailer, cgroups и seccomp-фильтров. Каждая виртуальная машина в такой платформе запускается за миллисекунды, обеспечивая производительность близкую к нативной при сохранении строгой изоляции рабочих нагрузок.
Содержание
- Что такое Firecracker и зачем нужна microVM
- Архитектура Firecracker: как работает виртуализация
- Требования к системе и подготовка среды
- Пошаговое создание мини-платформы с Firecracker
- Оптимизация производительности и безопасность
- Интеграция с облачными сервисами и сценарии применения
- Источники
- Заключение
Что такое Firecracker и зачем нужна microVM
Традиционная виртуальная машина — мощный инструмент, но тяжеловесный. Запуск полного гипервизора с эмуляцией оборудования ради одной функции или контейнера — это как заводить грузовик ради поездки в булочную. Контейнеры, напротив, легки и быстры, но не обеспечивают аппаратной изоляции. И тут на сцену выходит Firecracker.
Firecracker — это виртуальный менеджер машин (VMM), разработанный AWS специально для бессерверных (serverless) рабочих нагрузок. Он использует KVM (Kernel-based Virtual Machine) для создания так называемых microVMs — минималистичных виртуальных машин, которые сочетают в себе безопасность традиционных ВМ со скоростью запуска контейнеров.
Ключевые характеристики
Почему именно Firecracker, а не QEMU или чистый Docker? Вот несколько причин:
- Скорость запуска. Время от API-вызова
InstanceStartдо начала выполнения/sbin/initв гостевой системе составляет ≤ 125 мс. Это критически важно для serverless, где холодный старт — главный враг. - Минимализм. Firecracker эмулирует только четыре устройства:virtio-net, virtio-block, последовательный порт и клавиатуру с одним ключом. Никаких USB-контроллеров, звуковых карт или графических адаптеров.
- Безопасность. Каждая microVM изолирована на уровне аппаратуры через KVM, дополнительно ограничена seccomp-фильтрами, cgroups и работает через процесс jailer с пониженными привилегиями.
- Плотность размещения. Можно запускать сотни microVMs на одном физическом сервере. AWS Fargate и Lambda используют Firecracker именно для этого.
Serverless-модель и Firecracker
Serverless не означает «без серверов» в буквальном смысле. Серверы есть, но управление ими полностью скрыто от разработчика. Платформа автоматически выделяет ресурсы при поступлении запроса и освобождает их после выполнения. Firecracker идеально подходит для этой модели благодаря быстрому запуску и низкому потреблению памяти.
В классической serverless-архитектуре поток запросов выглядит так:
- Запрос поступает на API-шлюз
- Оркестратор определяет, какую функцию вызвать
- Если готовый экземпляр функции отсутствует — запускается новая microVM
- Функция выполняется внутри microVM
- Результат возвращается, microVM уничтожается или переходит в пул
Построение собственной мини-платформы позволяет понять все эти этапы изнутри.
Архитектура Firecracker: как работает виртуализация
Чтобы построить платформу, нужно понимать, как устроены её компоненты. Архитектура Firecracker спроектирована с одной целью — максимизировать безопасность при минимальном overhead.
Слои изоляции
Согласно документации по дизайну, Firecracker использует многоуровневую защиту:
Слой 1: KVM и границы виртуализации. Linux KVM обеспечивает аппаратную изоляцию через расширения процессора (Intel VT-x или AMD-V). Гостевая система физически не может выйти за пределы выделенного адресного пространства.
Слой 2: Seccomp-фильтры. Firecracker ограничивает набор системных вызовов, которые может выполнять процесс VMM. Разрешены только те, что действительно нужны: управление памятью, базовый I/O, KVM-ioctl. Всё остальное блокируется на уровне ядра.
Слой 3: Jailer. В производственных средах Firecracker запускается через утилиту jailer, которая:
- Создает изолированное окружение через namespaces
- Понижает привилегии процесса
- Настраивает cgroups для ограничения ресурсов
- Ограничивает доступ к файловой системе
Внутреннее устройство VMM
Сам процесс Firecracker — это статически скомпилированный бинарник на Rust. Никаких разделяемых библиотек, никаких внешних зависимостей. Это уменьшает поверхность атаки и упрощает развёртывание.
Внутри VMM работает REST API сервер на Unix-сокете. Через этот API можно:
| Операция | Метод | Описание |
|---|---|---|
| Настройка ВМ | PUT /machine-config |
CPU, память |
| Добавление диска | PUT /drives/{id} |
virtio-block устройство |
| Настройка сети | PUT /network-interfaces/{id} |
virtio-net через TAP |
| Запуск | PUT /actions с InstanceStart |
Старт ВМ |
| Остановка | PUT /actions с InstanceHalt |
Остановка ВМ |
Устройства virtio
Firecracker не эмулирует реальное оборудование. Вместо этого используется паравиртуализация через virtio:
- virtio-net — сетевой интерфейс, подключаемый к TAP-устройству на хосте
- virtio-block — блочное устройство, подключаемое к файлу rootfs
К каждому устройству можно применить ограничители скорости (rate limiters). Например, ограничить сеть до 100 Мбит/с или диск до 50 IOPS. Это ключевая фича для многотенантной платформы — один пользователь не может «съесть» весь канал.
Требования к системе и подготовка среды
Прежде чем строить платформу, нужно подготовить фундамент. Firecracker работает не везде — есть жёсткие требования к железу и ОС.
Аппаратные требования
- Процессор: x86_64 или aarch64 с поддержкой аппаратной виртуализации
- Intel VT-x или AMD-V: обязательное условие для KVM
- ОЗУ: минимум 2 ГБ для хоста + память для каждой microVM
- Диск: SSD настоятельно рекомендуется для приемлемой производительности
Программные требования
- Linux: ядро 4.14+ (рекомендуется 5.10 или новее)
- KVM: модуль ядра должен быть загружен (
/dev/kvmдоступен) - Права: пользователь должен иметь read/write доступ к
/dev/kvm - TUN/TAP: модуль ядра для создания виртуальных сетевых интерфейсов
Проверка готовности системы
Начнём с базовых проверок. Откройте терминал и выполните:
# Проверяем наличие KVM
ls -la /dev/kvm
# Проверяем поддержку виртуализации процессором
grep -E '(vmx|svm)' /proc/cpuinfo | head -1
# Проверяем версию ядра
uname -r
Если /dev/kvm отсутствует, убедитесь что загружен модуль:
sudo modprobe kvm
sudo modprobe kvm_intel # для Intel
sudo modprobe kvm_amd # для AMD
Установка Firecracker
Простейший путь — скачать готовый бинарник с официального репозитория:
# Получаем последнюю версию
release_url="https://github.com/firecracker-microvm/firecracker/releases"
latest=$(basename $(curl -fsXJL ${release_url}/latest -w '%{url_effective}' -o /dev/null))
# Скачиваем (пример для x86_64)
curl -L ${release_url}/download/${latest}/firecracker-${latest}-x86_64.tgz | tar xz
# Переименовываем для удобства
mv firecracker-${latest}-x86_64 firecracker
chmod +x firecracker
sudo mv firecracker /usr/local/bin/
Подготовка ядра и rootfs
Каждой microVM нужны два файла:
- Ядро Linux ( uncompressed, формат
vmlinuxилиbzImage) - Root filesystem (образ диска в формате ext4)
Для быстрого старта можно использовать готовые файлы из репозитория Firecracker:
# Ядро
curl -fsSL -o vmlinux \
https://s3.amazonaws.com/spec.ccfc.min/img/quickstart_guide/x86_64/kernels/vmlinux-hello
# Rootfs
curl -fsSL -o rootfs.ext4 \
https://s3.amazonaws.com/spec.ccfc.min/img/quickstart_guide/x86_64/rootfs/bionic.rootfs.ext4
Но для реальной платформы вам понадобится собственное ядро и rootfs. Это можно сделать с помощью buildroot:
git clone https://github.com/buildroot/buildroot.git
cd buildroot
make menuconfig
# Выберите:
# Target options -> x86_64
# Filesystem images -> ext4
# Kernel -> linux kernel
make -j$(nproc)
Результат — минимальный Linux-образ размером в несколько мегабайт, оптимизированный для Firecracker.
Пошаговое создание мини-платформы с Firecracker
Теперь переходим к самому интересному — построению платформы. Мы создадим систему, которая может запускать функции по запросу, управлять жизненным циклом microVMs и маршрутизировать сетевой трафик.
Шаг 1: Настройка сетевой инфраструктуры
Каждая microVM должна иметь доступ к сети. Firecracker использует TAP-интерфейсы на хосте, через которые трафик попадает в гостевую систему.
# Создаём мост для объединения всех TAP-интерфейсов
sudo ip link add br0 type bridge
sudo ip addr add 172.16.0.1/24 dev br0
sudo ip link set br0 up
# Включаем IP-форвардинг
sudo sysctl -w net.ipv4.ip_forward=1
# Настраиваем NAT для выхода в интернет
sudo iptables -t nat -A POSTROUTING -s 172.16.0.0/24 -o eth0 -j MASQUERADE
Создаём функцию для генерации TAP-интерфейсов:
create_tap() {
local tap_name=$1
local ip_addr=$2
sudo ip tuntap add dev ${tap_name} mode tap
sudo ip addr add ${ip_addr}/30 dev ${tap_name}
sudo ip link set ${tap_name} up
sudo ip link set ${tap_name} master br0
}
Шаг 2: Написание API-конфигурации
Firecracker управляется через REST API на Unix-сокете. Создадим шаблон конфигурации:
setup_vm() {
local socket_path=$1
local kernel_path=$2
local rootfs_path=$3
local tap_name=$4
local vcpu_count=$5
local mem_size=$6
# Запускаем Firecracker
rm -f ${socket_path}
sudo firecracker --api-sock ${socket_path} &
local pid=$!
sleep 1
# Конфигурируем машину
curl --unix-socket ${socket_path} \
-X PUT 'http://localhost/machine-config' \
-H 'Content-Type: application/json' \
-d "{
\"vcpu_count\": ${vcpu_count},
\"mem_size_mib\": ${mem_size}
}"
# Подключаем ядро
curl --unix-socket ${socket_path} \
-X PUT 'http://localhost/boot-source' \
-H 'Content-Type: application/json' \
-d "{
\"kernel_image_path\": \"${kernel_path}\",
\"boot_args\": \"console=ttyS0 reboot=k panic=1 pci=off\"
}"
# Подключаем rootfs
curl --unix-socket ${socket_path} \
-X PUT 'http://localhost/drives/rootfs' \
-H 'Content-Type: application/json' \
-d "{
\"drive_id\": \"rootfs\",
\"path_on_host\": \"${rootfs_path}\",
\"is_root_device\": true,
\"is_read_only\": false
}"
# Подключаем сеть
curl --unix-socket ${socket_path} \
-X PUT 'http://localhost/network-interfaces/eth0' \
-H 'Content-Type: application/json' \
-d "{
\"iface_id\": \"eth0\",
\"host_dev_name\": \"${tap_name}\"
}"
echo $pid
}
Шаг 3: Запуск первой microVM
Теперь соберём всё вместе:
# Создаём TAP-интерфейс
create_tap "tap0" "172.16.0.10"
# Настраиваем и запускаем ВМ
pid=$(setup_vm \
"/tmp/firecracker-vm0.sock" \
"/path/to/vmlinux" \
"/path/to/rootfs.ext4" \
"tap0" \
2 \ # 2 vCPU
512 # 512 MB RAM
)
# Запускаем!
curl --unix-socket /tmp/firecracker-vm0.sock \
-X PUT 'http://localhost/actions' \
-H 'Content-Type: application/json' \
-d '{"action_type": "InstanceStart"}'
Если всё настроено правильно, microVM загрузится за доли секунды. Проверить можно подключившись к последовательному порту:
# Firecracker пишет вывод в stderr
# Или используем socat для подключения к сокету
sudo socat - UNIX-CONNECT:/tmp/firecracker-vm0.sock
Шаг 4: Создание оркестратора
Оркестратор — это сердце нашей платформы. Простой скрипт на Python:
import subprocess
import json
import os
import socket
import time
from http.server import HTTPServer, BaseHTTPRequestHandler
class MicroVM:
def __init__(self, vm_id, vcpu=2, mem=512):
self.vm_id = vm_id
self.vcpu = vcpu
self.mem = mem
self.socket_path = f"/tmp/fc-{vm_id}.sock"
self.tap_name = f"tap{vm_id}"
self.ip = f"172.16.0.{10 + vm_id * 4}"
self.rootfs = f"/var/lib/platform/rootfs-{vm_id}.ext4"
def prepare(self):
"""Создаём копию rootfs для изоляции"""
if not os.path.exists(self.rootfs):
subprocess.run([
"cp", "/var/lib/platform/base-rootfs.ext4",
self.rootfs
])
# Создаём TAP
subprocess.run([
"ip", "tuntap", "add", "dev", self.tap_name, "mode", "tap"
])
subprocess.run([
"ip", "addr", "add", f"{self.ip}/30", "dev", self.tap_name
])
subprocess.run(["ip", "link", "set", self.tap_name, "up"])
subprocess.run([
"ip", "link", "set", self.tap_name, "master", "br0"
])
def start(self):
"""Запускаем Firecracker процесс"""
os.unlink(self.socket_path) if os.path.exists(self.socket_path) else None
self.process = subprocess.Popen([
"firecracker",
"--api-sock", self.socket_path
])
time.sleep(0.5)
self._configure()
def _configure(self):
"""Конфигурируем через API"""
api = lambda method, path, data=None: self._api_call(method, path, data)
api("PUT", "/machine-config", {
"vcpu_count": self.vcpu,
"mem_size_mib": self.mem
})
api("PUT", "/boot-source", {
"kernel_image_path": "/var/lib/platform/vmlinux",
"boot_args": "console=ttyS0 reboot=k panic=1 pci=off"
})
api("PUT", "/drives/rootfs", {
"drive_id": "rootfs",
"path_on_host": self.rootfs,
"is_root_device": True,
"is_read_only": False
})
api("PUT", "/network-interfaces/eth0", {
"iface_id": "eth0",
"host_dev_name": self.tap_name
})
api("PUT", "/actions", {"action_type": "InstanceStart"})
def _api_call(self, method, path, data):
"""Выполняем HTTP запрос через Unix-сокет"""
s = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
s.connect(self.socket_path)
body = json.dumps(data) if data else ""
request = (
f"{method} {path} HTTP/1.0\r\n"
f"Content-Type: application/json\r\n"
f"Content-Length: {len(body)}\r\n"
f"\r\n{body}"
)
s.send(request.encode())
response = s.recv(4096)
s.close()
return response
def stop(self):
"""Останавливаем microVM"""
try:
self._api_call("PUT", "/actions", {"action_type": "InstanceHalt"})
except:
self.process.kill()
self.process.wait()
# Очищаем TAP
subprocess.run(["ip", "link", "del", self.tap_name])
class PlatformHandler(BaseHTTPRequestHandler):
vms = {}
next_id = 0
def do_POST(self):
if self.path == "/invoke":
vm = MicroVM(self.next_id)
vm.prepare()
vm.start()
self.vms[self.next_id] = vm
self.next_id += 1
self.send_response(200)
self.end_headers()
self.wfile.write(
f"Started VM {vm.vm_id} with IP {vm.ip}".encode()
)
def do_DELETE(self):
if self.path.startswith("/stop/"):
vm_id = int(self.path.split("/")[2])
if vm_id in self.vms:
self.vms[vm_id].stop()
del self.vms[vm_id]
self.send_response(200)
self.end_headers()
self.wfile.write(f"Stopped VM {vm_id}".encode())
if __name__ == "__main__":
server = HTTPServer(("0.0.0.0", 8080), PlatformHandler)
print("Platform running on :8080")
server.serve_forever()
Это базовый каркас. Запускаем:
sudo python3 platform.py
Теперь можно создавать и уничтожать microVMs простыми HTTP-запросами:
# Запустить новую VM
curl -X POST http://localhost:8080/invoke
# Остановить VM
curl -X DELETE http://localhost:8080/stop/0
Оптимизация производительности и безопасность
Создать платформу — половина дела. Сделать её быстрой и безопасной — вот настоящий вызов.
Производительность
Согласно техническим спецификациям, Firecracker должен обеспечивать:
- Время запуска VMM: ≤ 8 CPU мс
- Время старта инстанса: ≤ 125 мс
- Производительность CPU: > 95% от bare-metal
- Пропускная способность сети: до 14.5 Гбит/с при ≤ 80% CPU
- Пропускная способность диска: до 1 ГиБ/с при ≤ 70% CPU
Как приблизиться к этим показателям?
1. Используйте tmpfs для rootfs. Размещение rootfs в tmpfs (RAM-диске) радикально ускоряет запуск:
# Создаём tmpfs
sudo mount -t tmpfs -o size=1G tmpfs /var/lib/platform
# Копируем базовый rootfs
cp base-rootfs.ext4 /var/lib/platform/
2. Включите hugepages. Hugepages уменьшают количество TLB-промахов:
echo 1024 | sudo tee /proc/sys/vm/nr_hugepages
# При конфигурации ВМ:
# "mem_size_mib": 512 — выделится из hugepages автоматически
3. Оптимизируйте ядро. Стандартное ядро содержит много лишнего для microVM. Включите только необходимое:
CONFIG_KVM_GUEST=y
CONFIG_VIRTIO_BLK=y
CONFIG_VIRTIO_NET=y
CONFIG_EXT4_FS=y
CONFIG_SERIAL_8250=y
# Отключите лишнее:
# CONFIG_USB=n, CONFIG_SOUND=n, CONFIG_DRM=n
4. Пул pre-warmed instances. Вместо холодного старта держите несколько готовых microVMs:
class VMPool:
def __init__(self, size=5):
self.pool = []
self.size = size
self._fill()
def _fill(self):
for _ in range(self.size - len(self.pool)):
vm = MicroVM(generate_id())
vm.prepare()
vm.start()
self.pool.append(vm)
def get(self):
if not self.pool:
self._fill()
vm = self.pool.pop(0)
# Асинхронно пополняем пул
Thread(target=self._fill).start()
return vm
Безопасность
1. Всегда используйте jailer. В production-среде Firecracker должен запускаться через jailer:
sudo jailer \
--id vm-001 \
--exec-file /usr/local/bin/firecracker \
--uid 123 \
--gid 123 \
--chroot-base-dir /srv/jailer \
--node 0 \
-- \
--api-sock /run/firecracker/api.sock
Jailer выполняет:
- Создаёт изолированный chroot
- Переключается в namespace
- Понижает UID/GID
- Настраивает cgroups
- Ограничивает возможности (capabilities)
2. Seccomp-фильтры. Firecracker уже включает встроенные seccomp-фильтры, но можно усилить:
{
"seccomp-filter": {
"filter-action": "Kill",
"apply-on-all-threads": true
}
}
3. Rate limiting. Ограничьте ресурсы для каждой microVM:
{
"drive_id": "rootfs",
"path_on_host": "/var/lib/rootfs.ext4",
"rate_limiter": {
"bandwidth": {
"size": 10485760,
"refill_time": 100
},
"ops": {
"size": 1000,
"refill_time": 100
}
}
}
Это гарантирует, что одна шумная microVM не забьёт диск для остальных.
4. Сетевая изоляция. Используйте iptables для ограничения межсетевого трафика:
# Запрещаем трафик между microVMs
sudo iptables -I FORWARD -i br0 -o br0 -j DROP
# Разрешаем только выход в интернет
sudo iptables -A FORWARD -i br0 -o eth0 -j ACCEPT
sudo iptables -A FORWARD -o br0 -i eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT
Интеграция с облачными сервисами и сценарии применения
Мини-платформа на Firecracker — не просто учебный проект. Она может решать реальные задачи.
Сценарий 1: Code execution sandbox
Платформа для безопасного выполнения пользовательского кода. Как LeetCode или HackerRank, но под вашим контролем:
def execute_code(language, code):
vm = pool.get()
# Отправляем код в microVM
send_to_vm(vm, {
"language": language,
"code": code
})
# Ждём результат с таймаутом
result = wait_for_result(vm, timeout=5)
# Уничтожаем ВМ после выполнения
vm.stop()
return result
Сценарий 2: CI/CD runner
Временные окружения для тестов. Каждая сборка получает чистую microVM:
# .github/workflows/test.yml
jobs:
test:
runs-on: self-hosted-firecracker
steps:
- uses: actions/checkout@v3
- run: npm install
- run: npm test
# VM уничтожается автоматически после job
Сценарий 3: Edge computing
Firecracker прекрасно работает на ARM, что делает его идеальным для edge-устройств:
# Запуск на Raspberry Pi 4 (aarch64)
firecracker --api-sock /tmp/fc.sock \
--config-file edge-config.json
Сценарий 4: Multi-tenant SaaS
Изоляция клиентов в отдельных microVMs с гарантированными ресурсами:
class TenantManager:
def __init__(self):
self.tenants = {}
def create_tenant(self, tenant_id, plan="basic"):
limits = {
"basic": {"vcpu": 1, "mem": 256},
"pro": {"vcpu": 2, "mem": 512},
"enterprise": {"vcpu": 4, "mem": 2048}
}[plan]
vm = MicroVM(
tenant_id,
vcpu=limits["vcpu"],
mem=limits["mem"]
)
vm.prepare()
vm.start()
self.tenants[tenant_id] = vm
return vm.ip
Интеграция с Kubernetes
Для тех, кто хочет объединить Kubernetes с FireVM, существует проект krustlet, который позволяет запускать WASM-модули как Kubelets. Но можно пойти дальше и создать CRD (Custom Resource Definition) для управления Firecracker microVMs через нативный Kubernetes API.
Источники
- Firecracker MicroVM Repository — Официальный репозиторий с исходным кодом и документацией: https://github.com/firecracker-microvm/firecracker
- Firecracker Design Documentation — Подробное описание архитектуры и принципов безопасности: https://github.com/firecracker-microvm/firecracker/blob/main/docs/design.md
- Firecracker Getting Started Guide — Пошаговое руководство по запуску первых microVMs: https://github.com/firecracker-microvm/firecracker/blob/main/docs/getting-started.md
- Firecracker Technical Specification — Технические требования к производительности и SLA: https://github.com/firecracker-microvm/firecracker/blob/main/SPECIFICATION.md
Заключение
Firecracker — это мощный инструмент для создания serverless-платформ, который сочетает в себе безопасность традиционной виртуализации с лёгкостью и скоростью контейнеров. Создание мини-платформы на его основе требует понимания KVM, навыков работы с сетью Linux и умения управлять процессами через API.
Мы прошли путь от базовой установки Firecracker до построения полноценного оркестратора с пулом microVMs, настройкой безопасности через jailer и rate limiting. Это не академический пример — подобная архитектура лежит в основе AWS Lambda и Fargate, обслуживающих миллионы запросов в секунду.
Главные выводы:
- Начинайте с простого. Запустите одну microVM вручную, поймите процесс, потом автоматизируйте
- Безопасность — не опция. Jailer, seccomp и cgroups должны быть включены с первого дня
- Измеряйте всё. Без метрик вы не поймёте, где узкое место: сеть, диск или CPU
- Пул pre-warmed instances — ключ к минимизации холодного старта в serverless
Технология активно развивается. В 2026 году Firecracker поддерживает не только x86_64, но и ARM, что открывает возможности для edge computing и IoT. Если вы строите платформу для выполнения кода, CI/CD или multi-tenant SaaS — Firecracker заслуживает серьёзного рассмотрения.

Firecracker - это технология виртуализации с открытым исходным кодом, специально разработанная для создания и управления безопасными, многопользовательскими контейнерными и функциональными сервисами, предоставляющими бессерверные операционные модели. Firecracker запускает рабочие нагрузки в легковесных виртуальных машинах (microVMs), которые сочетают в себе свойства безопасности традиционных ВМ со скоростью и гибкостью контейнеров. Основной компонент Firecracker - это гипервизор виртуальной машины (VMM), который использует Linux Kernel Virtual Machine (KVM) для создания и запуска microVMs с минималистичным дизайном, исключающим ненужные устройства и функции для уменьшения объема памяти и площади поверхности атаки.

Архитектура Firecracker обеспечивает безопасную изоляцию microVMs через несколько слоев защиты. Первый слой изоляции предоставляется Linux KVM и границей виртуализации Firecracker. Для обеспечения глубины защиты Firecracker использует seccomp фильтры для ограничения системных вызовов, cgroups и namespaces для изоляции ресурсов, и понижение привилегий через процесс jailer. Firecracker предоставляет гостям доступ к хранилищу и сеть через эмулированные устройства VirtIO Net и VirtIO Block, а также применение ограничителей скорости к каждому тому и сетевому интерфейсу для обеспечения справедливого использования хостовых аппаратных ресурсов. Каждая microVM может быть дополнительно инкапсулирована в cgroup для контроля ресурсов.

Для начала работы с Firecracker требуется наличие модуля Linux KVM, доступ к /dev/kvm и поддержка x86_64 или aarch64 архитектуры. Процесс запуска включает скачивание или сборку двоичного файла Firecracker, настройку сети через TAP устройства, подготовку ядра Linux и rootfs в формате ext4, и конфигурацию microVM через API. В производственных средах Firecracker должен запускаться через jailer для обеспечения безопасности. Для создания mini-платформы необходимо развернуть несколько экземпляров Firecracker с общей сетевой инфраструктурой и системой управления, обеспечивающей оркестрацию microVMs.

Firecracker обеспечивает строгие спецификации производительности и стабильности: запуск виртуального менеджера машин занимает не более 8 CPU ms, время от получения API вызова InstanceStart до начала процесса /sbin/init в госте составляет ≤ 125 ms, вычислительная производительность гостевого CPU > 95% от bare-metal, пропускная способность сети до 14.5 Gbps при использовании ≤ 80% хостового CPU, и пропускная способность хранения до 1 GiB/s при использовании ≤ 70% хостового CPU. Эти спецификации обеспечиваются интеграционными тестами и обязательны для поддержания SLA в производственных средах.