Firecracker VM — это легковесная виртуальная машина (VM), разработанная компанией Amazon Web Services (AWS) для создания и управления изолированными, безопасными и высокопроизводительными виртуальными средами. Она специально оптимизирована для использования в сервисах, таких как AWS Lambda и AWS Fargate, где требуется быстрое создание и запуск виртуальных машин с минимальными накладными расходами.
По сути дела это это оптимизированная версия KVM, которая позволяет запускать за доли секунды виртуальные машины с предустановленным пред настроенным пользовательским окружением и ядром. Мы будем использовать его для быстрого создания тестовых сред.
git clone https://github.com/avkcode/firecracker-sandbox.git
cd firecracker-sandbox
Vm-config.json – конфиг VM firecracker, а в директории tools
находятся сборочные скрипты.
Сначала устанавливаем последнюю версию firecracker:
./tools/install-firecracker.sh
Следующий шаг – запускаем сборочный скрипт rootfs для Debian. Этот скрипт скачивает скомпилированное ядро и с помощью debootstrap собирает корневую файловую систему.

Копируем в корневую папку rootfs и ядро:
cp tools/firecracker-rootfs.ext4 tools/vmlinux .
Makefile в данном случае это скрипт автоматизации для настройки firecracker:

Сначала make activate
чтобы активировать сокет, потом make net-up
чтобы настроить iptables для FC.
Можно запускать VM с помощью команды make up
.
Обычно меньше секунды требуется для загрузки полноценной виртуальной машины. Логин пароль root:root это задается с помощью chroot в сборочном скрипте. В том же скрипте в rootfs задаются настройки сети и DNS. Все это кастомизируется.

Сборка кастомного ядра Linux для использования в средах, таких как Kubernetes или базы данных, может быть оправдана в ряде случаев. Это позволяет оптимизировать производительность, улучшить безопасность и адаптировать систему под конкретные требования. Рассмотрим подробнее, зачем это может быть нужно.
Кастомное ядро позволяет включить или отключить конкретные функции, которые могут значительно повлиять на производительность в контексте Kubernetes или баз данных.
Для Kubernetes:
Улучшение работы сетевого стека:
Включение поддержки современных сетевых протоколов (например, eBPF для Cilium или IPVS для kube-proxy).
Оптимизация работы с сетевыми интерфейсами и снижение задержек.
Улучшение работы cgroups и namespaces:
Kubernetes активно использует cgroups и namespaces для изоляции контейнеров. Кастомное ядро может включать улучшения для этих механизмов.
Оптимизация планировщика задач:
Настройка планировщика задач (например, CFS или MuQSS) для лучшей работы с высоконагруженными контейнерами.
Для баз данных:
Оптимизация ввода-вывода (I/O):
Включение поддержки асинхронного I/O (AIO) и оптимизация работы с файловыми системами (например, ext4, XFS, Btrfs).
Настройка параметров ядра для работы с SSD (например, noop или deadline I/O scheduler).
Улучшение работы с памятью:
Настройка параметров управления памятью (например, vm.swappiness, vm.dirty_ratio) для снижения накладных расходов.
Поддержка больших страниц (HugePages):
Включение поддержки HugePages для снижения накладных расходов на управление памятью, что особенно полезно для баз данных, таких как PostgreSQL или Oracle.
Один из конкретных примеров:
HugePages
Hugepages (или гигантские страницы) — это механизм управления памятью в современных операционных системах, который позволяет использовать страницы памяти большего размера, чем стандартные (обычно 4 КБ). Это может значительно улучшить производительность в определенных сценариях, особенно для приложений, работающих с большими объемами данных, таких как базы данных, виртуализация или высокопроизводительные вычисления (HPC).
Transparent Hugepages (THP) — это механизм в ядре Linux, который автоматически управляет использованием гигантских страниц (hugepages) для приложений, чтобы улучшить производительность памяти без необходимости ручной настройки. В отличие от обычных hugepages, которые требуют явного выделения и настройки, Transparent Hugepages работают "прозрачно" для приложений и системы.
Configuring HugePages on Linux
Using the Deadline IO Scheduler
В директории tools лежит скрипт которые собирает кастомное ядро vmlinux
. Версию ядра можно указать с помощью переменной KERNEL_VERSION="6.11".
[

В скрипте можно задавать параметры ядра:

Подписывайтесь на мой канал.
Sap_ru
Почему не докер?
kt97679
виртуальные машины обеспечивают бОльшую изоляцию
Sap_ru
Для сборки ядра?
kt97679
прошу прощения, я думал вы спрашиваете зачем в принципе нужен firecracker
Sap_ru
Firecracker прикольный. Я про него не знал.Я просто не понял, как это связано со сборкой ядра и зачем такой оверкил, если можно в докере собирать. А можно и просто в папочке.
Rikimaru22 Автор
В docker не будет изоляции, которую дает ВМ. Ядро мы собираем, чтобы протестировать какой-то прикладной софт с определенной версией ядра. Все это нужно автоматизировать. С firecracker можно запускать сотни и тысячи ВМ на одном хосте – без проблем.