Существует множество сред для запуска контейнеров; среди распространенных можно выделить runc и kata. Мы в Beeline Cloud решили поговорить не только о широко известных, но и о набирающих свою аудиторию рантаймах. В подборке: проект, который окрестили «Docker’ом на диете»; система, заточенная под unikernel; среда для работы на устройствах с ограничениями по памяти и не только. Все они имеют лицензию Apache-2.0.

Youki
Среда запуска контейнеров, которая написана на Rust и предназначена для работы в окружениях с ограничениями по памяти. Название Youki в переводе с японского обозначает «контейнер», а также «счастливый» и «радостный».
Проект был опубликован в 2021 году и с тех пор собрал больше 7 тыс. звезд на GitHub. Его представили разработчики Юсуке Сакурай и Тору Комацу, который является амбассадором CNCF и был награжден премией Open Source Peer за вклад в проекты с открытым исходным кодом. Как пишут авторы, они вдохновлялись решением RailCar [репозиторий которого был архивирован] и хотели «сделать аналог runc, написанный на Rust». Инженеры остановились на этом языке программирования (вместо привычного для подобных решений Go), так как хотели продемонстрировать его возможности в сфере контейнеризации. Среди преимуществ Rust они отметили высокую безопасность памяти и удобство управления системными вызовами, по сравнению с альтернативами.
Согласно тестам, проведенным с помощью инструмента бенчмаркинга hyperfine, Youki справляется с запуском и удалением контейнера за ~200 мс. В случае runc этот показатель составляет ~350 мс. При необходимости Youki может работать в связке с Docker или Podman. Можно использовать два режима: с правами суперпользователя или без них (rootless). Второй вариант позволяет запускать контейнеры и Docker-демоны с минимумом необходимых разрешений, чтобы дополнительно обезопасить среду запуска.
На данный момент локальная сборка поддерживается в Linux. Но для работы с альтернативными платформами можно воспользоваться Vagrant. В целом команда подготовила обширную документацию с настройками и примерами использования. Есть инструкции для разработчиков, желающих внести вклад в развитие инструмента.
Кстати, мы тоже рассказывали, как можно «влиться» в открытую разработку, и подобрали материалы, которые помогут сделать это: базовое руководство по работе с Git-инструментами, исследование лучших практик, позволяющих закрепиться в open source и awesome-список с материалами по теме.
urunc
Это — контейнерный рантайм для специализированных ядер (unikernel), который с 2023 года развивает команда программистов из Греции. По словам авторов, urunc появился, чтобы обеспечить бесшовную интеграцию с облачными архитектурами. При этом unikernel-программы помещаются в OCI-совместимые образы. На сегодняшний день urunc поддерживает специализированные ядра Rumprun, Unikraft, MirageOS, Mewz и Linux.
Инструмент совместим с Kubernetes или любой другой системой, поддерживающей CRI. Однако работает только на GNU/Linux с архитектурами x86-64 и ARM64.
Несмотря на тот факт, что проект находится на ранних этапах развития, разработчики подготовили достаточно подробную документацию. Там можно найти раздел с инструкциями для быстрого старта, рекомендации по установке и конфигурации (с примерами TOML-файлов). Еще разработчики поделились несколькими руководствами — например, как использовать urunc с k8s. Многие инструкции также подробно расписаны прямо в README-файле репозитория на GitHub.
Ocre
Это — компактная среда запуска контейнеров для встраиваемых систем и IoT-устройств. По сравнению с классическими контейнерными рантаймами она требует значительно меньше памяти. Разработчики называют Ocre «Docker’ом на диете», так как он позволяет развернуть контейнер весом в 700 Кбайт. Проект развивается при поддержке организации LF Edge, которая входит в The Linux Foundation. И его цель — сделать разработку приложений для периферийных устройств с ограниченными вычислительными ресурсами такой же простой, как проектирование облачного ПО. Ocre позволяет запускать бинарники, написанные на любом языке программирования, как в Linux-окружении, так и в средах на базе Zephyr — то есть на устройствах с CPU и микроконтроллерами.
Что касается дорожной карты, то в планах команды добавить поддержку сетевых API, встроенных WASI-интерфейсов и многопоточности. Документация проекта аскетичная, однако в ней можно найти описание архитектуры и руководство по развертыванию контейнерного приложения в духе классического Hello, world! [хотя гайд не завершен].

Quark
OCI-совместимая среда запуска контейнеров на Rust. В Quark входит гипервизор QVisor и гостевое ядро QKernel, которые тесно связаны между собой и не предназначены для раздельного использования. В хостовом пространстве реализован специальный поток обработки QCall, который минимизирует накладные расходы на переключение контекста между гостевой и хостовой средой.
Разработчики провели несколько сравнительных тестов. В одних он обогнал Kata по большинству метрик, а в других — вплотную приблизился к показателям runc.
Полноценной документации у проекта пока нет, её роль играет README-файл. В нем описан процесс установки, есть примеры запуска контейнерного приложения. Также представлены наглядные схемы, которые помогают разобраться — например, как компоненты инструмента взаимодействуют друг с другом при системных вызовах.
Kuasar
Еще одна среда запуска контейнеров, написанная на Rust. Проект развивается при поддержке фонда CNCF и имеет почти полторы тысячи звезд на GitHub. Kuasar умеет работать с MicroVM, App Kernel, Wasm и runc. Как пишут авторы на сайте проекта, сегодня ни одна контейнерная технология не способна удовлетворить все потребности cloud-native-нагрузок. Поэтому цель Kuasar — предложить гибкий подход к управлению корпоративными системами, к изоляции контейнеров и потреблению ресурсов. Разработчики провели серию тестов, чтобы оценить производительность своего решения. Они сравнили скорость запуска контейнеров и объем потребления памяти.
Kuasar был быстрее Kata примерно на 34%. При этом для развертки пятидесяти подов, общие накладные расходы на потребление памяти составили порядка 15 МБ. В случае Kata этот показатель был равен 18 МБ для каждого пода.
В целом документация у инструмента не очень подробная, особенно если речь идет о технических деталях и примерах работы. Однако она наполнена множеством иллюстраций с комментариями об архитектуре Kuasar и взаимодействии компонентов в сценариях с различными «сэндбоксерами».
Incus
Инструмент для запуска полноценных Linux-систем внутри контейнеров (и виртуальных машин). Название Incus отсылает к виду ливневых облаков cumulonimbus incus, что в переводе с латинского означает «наковальня». Проект появился в качестве форка инструмента LXD. Дело в том, что в 2023 году компания Canonical решила развивать LXD самостоятельно и вывела его из-под крыла проекта Linux Containers. Многие восприняли это решение с сожалением и занялись разработкой альтернативы; сегодня Incus имеет почти 4,5 тысячи звезд на GitHub.
Incus подходит для работы как с одним инстансом, так и крупными кластерами на тысячи вычислительных узлов. Конфигурация хранится в распределенной базе данных Incus. В рамках проекта также развивается IncusOS — специальная операционная система, заточенная под работу с Incus. В основе лежит Debian 13, поддерживаются функции безопасной загрузки UEFI и TPM и, соответственно, полное шифрование диска.
Документация проекта довольно подробная и покрывает не только базовые вопросы вроде первоначально настройки, но и работу с API. Учитывая историю развития инструмента, если кто-то из пользователей оригинального LXD пожелает перейти на Incus, то для них также подготовили небольшое руководство.
Beeline Cloud — secure cloud provider. Разрабатываем облачные решения, чтобы вы предоставляли клиентам лучшие сервисы.
Свежие технологические материалы в нашем блоге на Хабре:
Популярные материалы в нашем хабраблоге:
