DevOps

Построение мини-платформы без серверов с Firecracker

Пошаговое руководство по созданию serverless-платформы с Firecracker microVMs. Архитектура, настройка, оптимизация и практическое применение.

5 ответов 1 просмотр

Как построить мини-платформу без серверов с использованием Firecracker microVMs?

Firecracker microVMs — это технология виртуализации с открытым исходным кодом от AWS, которая позволяет создавать безопасные и легковесные виртуальные машины для бессерверных вычислений. Создание платформы без серверов на основе Firecracker требует понимания архитектуры KVM, настройки API-интерфейсов VMM и подготовки изолированной среды с использованием jailer, cgroups и seccomp-фильтров. Каждая виртуальная машина в такой платформе запускается за миллисекунды, обеспечивая производительность близкую к нативной при сохранении строгой изоляции рабочих нагрузок.


Содержание


Что такое 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-архитектуре поток запросов выглядит так:

  1. Запрос поступает на API-шлюз
  2. Оркестратор определяет, какую функцию вызвать
  3. Если готовый экземпляр функции отсутствует — запускается новая microVM
  4. Функция выполняется внутри microVM
  5. Результат возвращается, 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: модуль ядра для создания виртуальных сетевых интерфейсов

Проверка готовности системы

Начнём с базовых проверок. Откройте терминал и выполните:

bash
# Проверяем наличие KVM
ls -la /dev/kvm

# Проверяем поддержку виртуализации процессором
grep -E '(vmx|svm)' /proc/cpuinfo | head -1

# Проверяем версию ядра
uname -r

Если /dev/kvm отсутствует, убедитесь что загружен модуль:

bash
sudo modprobe kvm
sudo modprobe kvm_intel # для Intel
sudo modprobe kvm_amd # для AMD

Установка Firecracker

Простейший путь — скачать готовый бинарник с официального репозитория:

bash
# Получаем последнюю версию
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 нужны два файла:

  1. Ядро Linux ( uncompressed, формат vmlinux или bzImage)
  2. Root filesystem (образ диска в формате ext4)

Для быстрого старта можно использовать готовые файлы из репозитория Firecracker:

bash
# Ядро
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:

bash
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-интерфейсы на хосте, через которые трафик попадает в гостевую систему.

bash
# Создаём мост для объединения всех 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-интерфейсов:

bash
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-сокете. Создадим шаблон конфигурации:

bash
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

Теперь соберём всё вместе:

bash
# Создаём 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 загрузится за доли секунды. Проверить можно подключившись к последовательному порту:

bash
# Firecracker пишет вывод в stderr
# Или используем socat для подключения к сокету
sudo socat - UNIX-CONNECT:/tmp/firecracker-vm0.sock

Шаг 4: Создание оркестратора

Оркестратор — это сердце нашей платформы. Простой скрипт на Python:

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()

Это базовый каркас. Запускаем:

bash
sudo python3 platform.py

Теперь можно создавать и уничтожать microVMs простыми HTTP-запросами:

bash
# Запустить новую 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-диске) радикально ускоряет запуск:

bash
# Создаём tmpfs
sudo mount -t tmpfs -o size=1G tmpfs /var/lib/platform

# Копируем базовый rootfs
cp base-rootfs.ext4 /var/lib/platform/

2. Включите hugepages. Hugepages уменьшают количество TLB-промахов:

bash
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:

python
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:

bash
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-фильтры, но можно усилить:

json
{
 "seccomp-filter": {
 "filter-action": "Kill",
 "apply-on-all-threads": true
 }
}

3. Rate limiting. Ограничьте ресурсы для каждой microVM:

json
{
 "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 для ограничения межсетевого трафика:

bash
# Запрещаем трафик между 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, но под вашим контролем:

python
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:

yaml
# .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-устройств:

bash
# Запуск на Raspberry Pi 4 (aarch64)
firecracker --api-sock /tmp/fc.sock \
 --config-file edge-config.json

Сценарий 4: Multi-tenant SaaS

Изоляция клиентов в отдельных microVMs с гарантированными ресурсами:

python
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.


Источники

  1. Firecracker MicroVM Repository — Официальный репозиторий с исходным кодом и документацией: https://github.com/firecracker-microvm/firecracker
  2. Firecracker Design Documentation — Подробное описание архитектуры и принципов безопасности: https://github.com/firecracker-microvm/firecracker/blob/main/docs/design.md
  3. Firecracker Getting Started Guide — Пошаговое руководство по запуску первых microVMs: https://github.com/firecracker-microvm/firecracker/blob/main/docs/getting-started.md
  4. 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 заслуживает серьёзного рассмотрения.

GitHub / Version Control Platform

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

GitHub / Version Control Platform

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

GitHub / Version Control Platform

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

GitHub / Version Control Platform

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 в производственных средах.

Авторы
E
Разработчик
I
Разработчик
J
Разработчик
J
Разработчик
J
Разработчик
M
Разработчик
M
Разработчик
R
Разработчик
T
Разработчик
Источники
GitHub / Version Control Platform
Version Control Platform
Проверено модерацией
НейроОтветы
Модерация
Построение мини-платформы без серверов с Firecracker