
«runc» следующего поколения с открытым исходным кодом, который позволяет rootless-контейнерам запускать рабочие нагрузки, такие как Systemd, Docker, Kubernetes, точно так же, как виртуальные машины.
Sysbox — это открытый и бесплатный контейнерный рантайм (специализированный "runc"), изначально разработанный компанией Nestybox (приобретена Docker в 05/2022), который улучшает контейнеры двумя ключевыми способами:
Улучшает изоляцию контейнеров:
Пользовательское пространство имён Linux для всех контейнеров (т.е. пользователь root внутри контейнера имеет нулевые привилегии на хосте).
Виртуализирует части procfs и sysfs внутри контейнера.
Скрывает информацию о хосте внутри контейнера.
Блокирует начальные монтирования контейнера и многое другое.
Позволяет контейнерам выполнять те же рабочие нагрузки, что и виртуальным машинам:
С Sysbox контейнеры могут запускать системное ПО, такое как systemd, Docker, Kubernetes, K3s, buildx (включая сборки для нескольких архитектур), устаревшие приложения, мультиархитектурные приложения и многое другое — бесшовно и безопасно.
Это ПО может работать внутри контейнеров Sysbox без модификаций и без использования специальных версий (например, rootless-вариантов).
Никаких привилегированных контейнеров, сложных образов, хитрых entrypoint'ов, особых монтирований томов и т.д.
Думайте об этом как о "форсаже для контейнеров": он позволяет вашим существующим менеджерам контейнеров / оркестраторам (например, Docker, Kubernetes и т.д.) разворачивать контейнеры с усиленной изоляцией, которые могут запускать почти любые рабочие нагрузки, выполняемые в виртуальных машинах.
Sysbox делает это, максимально приближая контейнер к VM-подобному окружению, используя передовые техники виртуализации ОС.
В отличие от альтернативных рантаймов, таких как Kata и KubeVirt, он не использует виртуальные машины. Это упрощает его использование (особенно в облачных средах, поскольку не требуется вложенная виртуализация), хотя он не обеспечивает такого уровня изоляции, как VM-базированные рантаймы. См. здесь для сравнения.
Нет необходимости изучать новые инструменты или изменять существующие образы контейнеров или рабочие процессы, чтобы использовать преимущества Sysbox. Просто установите его и укажите вашему менеджеру контейнеров / оркестратору использовать его для развёртывания улучшенных контейнеров.
Sysbox может сосуществовать с другими контейнерными рантаймами на одном хосте (например, с OCI runc по умолчанию, Kata и т.д.). Вы можете легко выбирать, какие контейнеры или поды запускать с каждым из них, в зависимости от ваших потребностей.
Sysbox — бесплатное и открытое ПО, лицензированное по лицензии Apache, версия 2.0. Подробнее см. в файле LICENSE.
Sysbox изначально разработан компанией Nestybox. Поскольку Nestybox теперь является частью Docker, Docker выступает основным спонсором проекта Sysbox.
Тем не менее, Sysbox — это открытый проект сообщества, и он официально не поддерживается Docker (т.е. подписки Docker не включают поддержку Sysbox). Поддержка осуществляется наилучшим образом через этот репозиторий Github или через Slack-сообщество Sysbox.
Мы приветствуем участие сообщества в развитии и улучшении Sysbox с целью расширения вариантов использования и преимуществ, которые он даёт. Внешние мейнтейнеры и контрибьюторы приветствуются.
Sysbox решает такие задачи, как:
Усиление изоляции контейнеризованных микросервисов (root в контейнере отображается на непривилегированного пользователя на хосте).
Предоставление высокофункционального root-пользователя внутри контейнера без ущерба безопасности хоста.
Обеспечение безопасности CI/CD-конвейеров за счёт поддержки Docker-in-Docker (DinD) или Kubernetes-in-Docker (KinD) без небезопасных привилегированных контейнеров или монтирования Docker-сокета хоста.
Использование контейнеров как "VM-подобных" сред для разработки, локального тестирования, обучения и т.д. с сильной изоляцией и возможностью запускать systemd, Docker, IDE и многое другое внутри контейнера.
Запуск устаревших приложений внутри контейнеров (вместо менее эффективных ВМ).
Замена виртуальных машин более простой, быстрой, эффективной и переносимой контейнерной альтернативой, которую можно легко разворачивать в облачных средах.
Разделение голых серверов (bare-metal) на несколько изолированных вычислительных сред с плотностью в 2 раза выше, чем у ВМ (т.е. развёртывание вдвое большего количества VM-подобных контейнеров, чем ВМ, на том же оборудовании с той же производительностью).
Разделение облачных инстансов (например, EC2, GCP и т.д.) на несколько изолированных вычислительных сред без обращения к дорогостоящей вложенной виртуализации.
Sysbox легко устанавливается на хостах Linux (bare-metal, ВМ, on-prem, облако и т.д.). Он работает во всех основных облачных IaaS и Kubernetes-сервисах (например, EC2, GCP, GKE, EKS, AKS, Rancher и т.д.)
После установки Sysbox работает незаметно: вы используете Docker, Kubernetes и т.д. для развёртывания контейнеров с его помощью.
Например, эта простая команда Docker создаёт контейнер с Sysbox:
$ docker run --runtime=sysbox-runc -it any_image
Вы получаете хорошо изолированный контейнер, способный беспрепятственно запускать как микросервисы, так и системное ПО, которое обычно работает на виртуальных машинах (например, systemd, Docker, Kubernetes и т.д).
Подробнее об использовании Sysbox здесь.
Как показано, Sysbox позволяет непривилегированным контейнерам беспрепятственно запускать системные рабочие нагрузки, такие как systemd, Docker, Kubernetes и т.д., обеспечивая сбалансированный подход между изоляцией контейнеров, производительностью, эффективностью и переносимостью.
И это достигается при минимальных изменениях конфигурации вашей существующей инфраструктуры: просто установите Sysbox и настройте менеджер контейнеров / оркестратор на запуск контейнеров с его помощью, используя любой образ.
Обратите внимание, что хотя Sysbox усиливает изоляцию стандартных контейнеров и во многих сценариях устраняет необходимость в небезопасных привилегированных контейнерах, он (пока) не обеспечивает такой же уровень изоляции, как VM-альтернативы или пользовательские ОС, такие как gVisor. Поэтому для сценариев, где требуется максимальный уровень изоляции, такие альтернативы, как KubeVirt, могут быть предпочтительнее (за счёт более низкой производительности и эффективности, а также большей сложности и стоимости).
Подробнее см. в этом посте в блоге.
Проект Sysbox предназначен для всех, кто хочет экспериментировать, изобретать, учиться и создавать системы с использованием системных контейнеров. Это передовая виртуализация ОС, и вклад приветствуется.
До приобретения компанией Docker в 05/2022 Nestybox предлагала Sysbox Enterprise как расширенную версию Sysbox (например, больше безопасности, больше рабочих нагрузок и официальную поддержку).
Однако после приобретения Sysbox Enterprise больше не предлагается как самостоятельный продукт, а вместо этого был включён в Docker Desktop (см. Docker Hardened Desktop).
ПРИМЕЧАНИЕ: Поскольку Sysbox Enterprise больше не предлагается как самостоятельный продукт, Docker планирует сделать некоторые функции Sysbox Enterprise доступными в Sysbox Community Edition. Функции пока не определены, и ваши отзывы по этому поводу приветствуются.
В таблице ниже представлены ключевые возможности контейнерного рантайма Sysbox.
В ней также приводится сравнение между Sysbox Community Edition (т.е. этим репозиторием) и ранее доступной Sysbox Enterprise Edition (сейчас устаревшей).
Подробнее о возможностях Sysbox здесь.
Если у вас есть вопросы, вы можете связаться с нами здесь.
Мы называем контейнеры, развёртываемые Sysbox, системными контейнерами, чтобы подчеркнуть тот факт, что они могут запускать не только микросервисы (как обычные контейнеры), но и системное ПО, такое как Docker, Kubernetes, Systemd, внутренние контейнеры и т.д.
Подробнее о системных контейнерах здесь.
Хост Sysbox должен соответствовать следующим требованиям:
На нём должен работать один из поддерживаемых дистрибутивов Linux, и это должна быть машина с поддерживаемой архитектурой (например, amd64, arm64).
Мы рекомендуем минимум 4 CPU (например, 2 ядра с 2 гиперпотоками) и 4 ГБ ОЗУ. Хотя это не жёсткое требование, конфигурации меньшего размера могут замедлить работу Sysbox.
Способ установки зависит от окружения, в которое будет установлен Sysbox:
Чтобы установить Sysbox в кластер Kubernetes, используйте daemonset sysbox-deploy-k8s.
В противном случае используйте пакет Sysbox для вашего дистрибутива.
Альтернативно, если пакета для вашего дистрибутива ещё нет, или вы хотите получить последние изменения из апстрима, вы можете собрать и установить Sysbox из исходников.
После установки Sysbox вы создаёте контейнер с помощью вашего менеджера контейнеров или оркестратора (например, Docker или Kubernetes) и любого образа.
Пример команды Docker:
$ docker run --runtime=sysbox-runc --rm -it --hostname my_cont registry.nestybox.com/nestybox/ubuntu-bionic-systemd-docker
root@my_cont:/#
Пример спецификации пода Kubernetes:
apiVersion: v1
kind: Pod
metadata:
name: ubu-bio-systemd-docker
annotations:
io.kubernetes.cri-o.userns-mode: "auto:size=65536"
spec:
runtimeClassName: sysbox-runc
containers:
- name: ubu-bio-systemd-docker
image: registry.nestybox.com/nestybox/ubuntu-bionic-systemd-docker
command: ["/sbin/init"]
restartPolicy: Never
Вы можете выбрать любой образ контейнера; Sysbox не предъявляет никаких требований к образу.
Nestybox предоставляет несколько эталонных образов в своих репозиториях Dockerhub и GitHub Container Registry. Это образы, которые обычно включают systemd, Docker, Kubernetes и многое другое внутри контейнеров. Dockerfile'ы находятся здесь. Не стесняйтесь использовать и изменять их по своему усмотрению.
Мы стремимся предоставлять хорошую документацию; это ключевой компонент проекта Sysbox.
У нас есть несколько документов, которые помогут вам начать работу и получить максимальную отдачу от Sysbox.
Документ о совместимости дистрибутивов Sysbox
Руководство по быстрому старту Sysbox
Руководство пользователя Sysbox
Sysbox быстр и эффективен, как описано в этом посте в блоге Nestybox.
Контейнеры, созданные Sysbox, имеют производительность, аналогичную контейнерам, созданным OCI runc (рантайм по умолчанию для Docker и Kubernetes).
Даже контейнеры, развёрнутые внутри системных контейнеров, имеют отличную производительность, хотя и с небольшими накладными расходами на сетевой ввод/вывод (как и ожидается, поскольку пакеты, исходящие от внутренних контейнеров, проходят через дополнительный сетевой интерфейс / мост внутри системного контейнера).
Если же использовать Sysbox для развёртывания системных контейнеров, заменяющих виртуальные машины, то выигрыш в производительности и эффективности значителен: на одном сервере можно развернуть в 2 раза больше системных контейнеров, чем ВМ, с той же производительностью, и при этом с долей потребления памяти и хранилища. В упомянутом выше посте в блоге об этом рассказано подробнее.
Sysbox был форкнут из отличного OCI runc в начале 2019 года и стоит на плечах работы разработчиков OCI runc.
Тем не менее, Sysbox добавляет значительную функциональность поверх. Он написан на Go и в настоящее время состоит из трёх компонентов: sysbox-runc, sysbox-fs и sysbox-mgr.
Sysbox использует многие функции виртуализации ОС из ядра Linux и дополняет их техниками виртуализации ОС, реализованными в пользовательском пространстве. Это включает использование всех пространств имён Linux (в частности, пользовательского пространства имён), частичную виртуализацию procfs и sysfs, выборочный перехват системных вызовов и многое другое.
Подробнее о дизайне Sysbox можно узнать в Руководстве пользователя Sysbox.
Хотя контейнеры, создаваемые Sysbox, в некоторой степени напоминают виртуальные машины (например, можно работать как root, запускать несколько сервисов и разворачивать Docker и K8s внутри), Sysbox не использует аппаратную виртуализацию.
Sysbox — это чистая технология виртуализации ОС, предназначенная для создания контейнеров, которые могут легко и безопасно запускать как приложения, так и системное ПО.
Это делает контейнеры, создаваемые Sysbox, быстрыми, эффективными и переносимыми (т.е. они не привязаны к гипервизору).
Что касается изоляции, справедливо сказать, что контейнеры Sysbox обеспечивают более сильную изоляцию, чем обычные контейнеры Docker (благодаря использованию пользовательского пространства имён Linux и лёгкой OS-прослойки), но более слабую изоляцию, чем виртуальные машины (из-за совместного использования ядра Linux между контейнерами).
Мы приветствуем вклад в Sysbox — будь то небольшие изменения в документации, исправления ошибок или добавление новых функций. Пожалуйста, ознакомьтесь с правилами внесения вклада и руководством разработчика для получения дополнительной информации.
См. главу о безопасности в Руководстве пользователя для получения информации о том, как Sysbox защищает контейнеры.
Если вы обнаружите ошибки или проблемы, которые могут раскрыть уязвимость Sysbox, пожалуйста, сообщите о них, отправив электронное письмо на [email protected]. Пожалуйста, не открывайте проблемы безопасности в этом репозитории. Спасибо!
Кроме того, недавно в ядре Linux был обнаружен ряд уязвимостей, которые в некоторых случаях снижают или сводят на нет усиленную изоляцию, обеспечиваемую контейнерами Sysbox. К счастью, все они исправлены в последних ядрах Linux. См. главу об уязвимостях и CVE в Руководстве пользователя Sysbox для получения дополнительной информации, а дальнейшие вопросы задавайте на Slack-канале Sysbox.
Поддержка в настоящее время осуществляется на основе best-effort.
Если у вас есть вопрос или комментарий, мы будем рады его услышать. Вы можете связаться с нами на нашем Slack-канале или создать issue в этом репозитории GitHub.
Если вы заметили проблему с Sysbox, пожалуйста, поищите в существующих issues — возможно, они описывают проблему и предлагают обходной путь.
Также ознакомьтесь с документом по устранению неполадок.
Перед удалением Sysbox убедитесь, что все контейнеры, развёрнутые с его помощью, остановлены и удалены.
Способ удаления зависит от способа установки Sysbox:
Чтобы удалить Sysbox в кластере Kubernetes, следуйте этим инструкциям.
В противном случае, чтобы удалить пакет Sysbox, следуйте этим инструкциям.
Если Sysbox был собран и установлен из исходников, следуйте этим инструкциям.
Ниже приведён список функций в плане развития Sysbox.
Мы перечисляем их здесь, чтобы наши пользователи могли лучше понять, куда мы движемся, и дать нам обратную связь о том, какие из них им нравятся больше всего (или меньше всего).
Вот краткий список; в трекере issues Sysbox их гораздо больше.
Поддержка большего количества дистрибутивов Linux.
Дальнейшие улучшения виртуализации procfs и sysfs.
Постоянное улучшение изоляции контейнеров.
Предоставление доступа к устройствам хоста внутри системных контейнеров с соответствующими правами.
Slack: Slack-сообщество Sysbox
Email: [email protected]
Мы доступны с понедельника по пятницу, с 9:00 до 17:00 по тихоокеанскому времени.
Мы очень благодарны вам за использование и/или вклад в Sysbox. Надеемся, что он покажется вам интересным и поможет использовать контейнеры новыми, более мощными способами.