21.04.2021

Runj — OCI-совместимый инструментарий для управления контейнерами на базе FreeBSD jail

Самуэль Карп (Samuel Karp), инженер из компании Amazon, занимающийся разработкой Linux-дистрибутива Bottlerocket и технологий контейнерной изоляции для AWS, развивает на основе jail-окружений FreeBSD новый runtime runj для обеспечения изолированного запуска контейнеров, оформленных в соответствии со спецификацией OCI (Open Container Initiative). Проект позиционируется как экспериментальный, разрабатываемый в свободное от основной работы время и пока находящийся на стадии прототипа. Код написан на языке Go и распространяется под лицензией BSD.

После доведения разработки до должного уровня потенциально проект может дорасти до уровня, позволяющего применять runj для замены штатного runtime в системах Docker и Kubernetes, используя для запуска контейнеров FreeBSD вместо Linux. Из OCI runtime в настоящее время реализованы команды для создания, удаления, запуска, принудительного завершения и оценки состояния контейнеров. Начинка контейнера создаётся на основе штатного или урезанного окружения FreeBSD.

Так как в спецификации OCI пока отсутствует поддержка FreeBSD, в рамках проекта разработан ряд дополнительных параметров, связанных с настройкой jail и FreeBSD, которые планируется передать для включения в основную спецификацию OCI. Для управления jail используются утилиты jail, jls, jexec, kill и ps из состава FreeBSD, без прямого обращения к системным вызовам. Из планов на будущее отмечается добавление поддержки управления ограничением ресурсов через RCTL-интерфейс ядра.

Помимо собственного runtime в репозитории проекта также развивается экспериментальная прослойка для использования вместе с runtime containerd (используется в Docker), модифицированным для поддержки FreeBSD. Для преобразования rootfs FreeBSD в OCI-совместимый образ контейнера предлагается специальная утилита. В дальнейшем созданный образ может быть импортирован в containerd.

Источник.