Amazon открыл код легковесной платформы виртуализации Firecracker
Компания Amazon представила новую технологию виртуализации Firecracker, обеспечивающую работу виртуальных машин с минимальными накладными расходами. Платформа предоставляет средства для создания и управления изолированными окружениями и сервисами, построенными с использованием бессерверной модели разработки. Код проекта написан на языке Rust и распространяется под лицензией Apache 2.0.
Firecracker предоставляет для запуска задач легковесные виртуальные машины, именуемые microVM, для полноценной изоляции которых применяются технологии аппаратной виртуализации, но при этом обеспечивается производительность и гибкость на уровне обычных контейнеров. Основу Firecracker составляет монитор виртуальных машин (VMM), использующий встроенный в ядро Linux гипервизор KVM.
VMM основан на наработках написанного на языке Rust проекта crosvm, развиваемого компанией Google для запуска Linux в ChromеOS. В настоящее время кодовые базы crosvm и Firecracker разделились, но Amazon планирует передавать в upstream исправления, вносимые в заимствованные компоненты.
Выполняемое внутри виртуальных машин программное окружение урезано и содержит только минимальный набор компонентов. Для экономии памяти, сокращения времени запуска и повышения безопасности в окружениях запускается модифицированное ядро Linux, из которого исключено все лишнее, в том числе сокращена функциональность и урезана поддержка устройств. При запуске с урезанным ядром дополнительный расход памяти по сравнению с контейнером составляет менее 5 Мб. Время с момента запуска microVM до начала выполнения приложения не превышает 125мс. MicroVM могут создаваться с интенсивностью до 150 окружений в секунду. Возможен запуск в виртуальных машинах microVM и обычных окружений на базе штатного ядра Linux (поддерживаются системы с ядром 4.14 и новее).
Для управления виртуальными окружениями в пространстве пользователя выполняется фоновый процесс Virtual Machine Manager, предоставляющий RESTful API, который может применяться для выполнения следующих функций:
- Настройка microVM, выбор шаблонов CPU (C3 и T2), определение числа виртуальных процессоров (vCPU) и размера памяти;
- Добавление сетевых интерфейсов в microVM;
- Добавление дисковых разделов в microVM, доступных как на запись, так и в режиме только для чтения. В хост окружении разделы сохраняются в отдельных файлах (симуляция блочного устройства в файле);
- Обновление параметров блочных устройств без остановки работы виртуальной машины (например, для изменения размера раздела);
- Изменение файлов для блочных устройств до или после загрузки гостевой системы;
- Задание ограничений на пропускную способность и интенсивность выполнения операций для устройств virtio;
- Настройках отражения информации в логах и сохранение метрик для мониторинга;
- Добавление сокетов vsock в microVM;
- Запуск microVM с указанным ядром и образом корневой ФС и настройками.
- Остановка работы microVM;
- Из встроенных возможностей отмечается предоставление дополнительной памяти и мощностей CPU в случае нехватки предоставленных ресурсов, а также запуск фонового процесса в режиме изоляции со сбросом привилегий и применением cgroup/namespace/seccomp.
Проект разработан в подразделении Amazon Web Services с целью повышения производительности и эффективности работы платформ AWS Lambda и AWS Fargate. Для Firecracker подготовлены runtime-модули для интеграции c популярными инструментариями для управления изолированными контейнерами. Ожидается появление поддержки таких платформ, как Kubernetes, Docker и Kata Containers. Первичной областью применения платформы называется использование для создание FaaS-систем (Функция как услуга), предлагающих модель бессерверных вычислений.
Суть метода FaaS заключается в том, что разработчик реализует логику на уровне отдельных функций, не заботясь о создании и управлении инфраструктурой для запуска приложений, и не привязываясь к конкретным серверным приложениям и необходимым для их работы облачным окружениям. Разработка ведется без создания монолитных приложений, на уровне подготовки набора небольших отдельных функций, каждая их которых обеспечивает обработку определенного события и рассчитана на обособленную работу без привязки к окружению (stateless, результат не зависит от прошлого состояния и содержимого ФС).
Функции запускаются только при возникновении необходимости и сразу после обработки события завершают свою работу, т. е. в отличие от микросервисов не требуется постоянное наличие запущенных окружений, потребляющих ресурсы на холостом ходу. FaaS-платформа сама размещает подготовленные функции, организует управление и обеспечивает масштабирование окружений, необходимых для выполнения подготовленных функций.