FreeBSD virtual environment management and repository

О проекте

CBSD — это обёртка из sh-скриптов (преимущественно) вокруг подсистемы jail(8), гипервизоров bhyve и Xen для операционной системы FreeBSD. Проект позиционируется как единый инструмент комплексного решения при построении серверов приложений, использующее заранее подготовленные образы виртуальных окружений с типовым набором ПО и требующие минимальной настройки.

Какого-либо нового функционала в ОС на данном этапе не внесено — всё, что могут делать скрипты CBSD, можно сделать командой (командами, десятками, сотнями команд) в CLI через соответствующие утилиты. Проект делается как для облегчения нужд по администрированию виртуальных сред на FreeBSD, так и «just for fun».

Особенности…

  • WEB-интерфейс и централизованное управление окружениями; (смотрите меню: Installation on FreeBSD)
  • поддержка ZFS файловой системы, ZFS квот, ZFS снапшотов;
  • отсутствие привязки к ZFS: CBSD работает прозрачно на UFS, HammerFS или любой другой FS: некоторые пользовали запускают jail и bhyve на кластерных FS, таких как NFS, GlusterFS и Ceph, что характерно для ДЦ и обеспечения failover
  • наличие pre/post start/stop хук для интеграции с различными DevOPS инструментами ( DDNS, DNSMasq, Consul, и т.д.)
  • экспорт метрик по использованию ресурсов jail и виртуальных машин (Экспорт и отображение jail и bhyve метрик с CBSD, Grafana и Prometheus)
  • bsdconfig-подобные диалоги текстового интерфейса, что избавляет вас от необходимости учить большое количество команд и аргументов
  • модульная структура - каждая команда - это отдельный файл, что делает большой проект легким в обслуживании. Помимо этого, есть отдельные комплексные модули ( vncterm, noVNC, WS/WSS нотификации, Puppet хелперы)
  • быстрое создание и развертывание виртуальных окружений с нуля по манифесту;
  • Поддержка профилей для создания jail
  • экспорт и импорт окружений в образ;
  • клонирование окружений (в т.ч. на удалённую машину);
  • холодная миграция окружений с ноды на ноду;
  • управление ресурсами окружений (приоритезация, квоты);
  • репликация окружений на удалённые машины;
  • дистрибуция «типовых» окружений с определённым набором софта и сервисами;
  • управление очередностью запуска окружений;
  • репозиторий с готовыми template-клетками;
  • Поддержка Puppet и наличие Puppet модуля CBSD для массового менеджмента конфигурациями;
  • bhyve: работа на ZVOL или в md-backend;
  • bhyve: поддержка VNC
  • bhyve: поддержка PCI Passthrough
  • bhyve: поддержа UEFI PXE boot;
  • bhyve: менеджмент виртуальных дисков;
  • bhyve: поддержка VALE, виртуального свича;
  • jail: полная или частичная шифрация данных jail
  • jail: XJails (Xorg в jail);
  • jail: поддержка ненативных архитектур клеток через Qemu User mode (например, клетки arm и mips64 архитектуры на x86-64 ноде);
  • jail: готовый репозиторий для ядер и миров, что делает шаги buildworld/installworld необязательными;
  • jail: если шаги buildworld/installworld предпринимаются, поддерживается src.conf для кастомизации сборки;
  • jail: base каталог может располагаться на MD/RAM/TMPFS диске, что может быть полезно при большом кол-ве jail-ов с RO-подмонтированной базой;
  • jail: поддержка VIMAGE;
  • jail: поддержка NAT (pf, ipfw, ipfilter);
  • jail: подсчет трафика в jail;
  • jail: port expose - проброс сетевых соединений в jail;
  • jail: поддержка CARP;
  • jail: поддержка RACCT/RCTL;
  • jail: конвертирование jail в PXE/ISO/Memstick-имидж;
  • jail: поддержка VNC в окружение;

Цели проекта

  • Предоставить пользователям FreeBSD возможность удобного менеджмента виртуальных окружений
  • Продемонстрировать возможности FreeBSD как Cloud-хостинг платформы;
  • автоматизация типовых операций;
  • создание (своих собственных/персональных) платформ для приложений по-требованию (PaaS);
  • и не только…

Пара ПОЧЕМУ…

Q: «Почему FreeBSD:

  • По мнению авторов проекта, Linux давно не принадлежит обычным людям, влияние на нее оказывают большие и коммерческие организации, тогда как FreeBSD по большей части разрабатывается обычными энтузиастами. Сегодня Linux - это коммерческая ОС для зарабатывания денег - то, чем был Microsoft Windows в 90 годах и против чего боролись когда-то апологеты Linux в то время (автор CBSD один из них). Да, FreeBSD по этим причинам значительно отстает по некоторым характеристикам. Достаточно посмотреть на обилие таких решений как OpenVZ, Docker, Rancher, Kubernetis, LXD, Ceph, GlusterFS, OpenNebula, OpenStack, Proxmox, ISPPanel и десяток других - все это создано коммерческими компаниями под Linux и сделано это очень хорошо. Однако Linux перенасыщен подобными решениями. Поэтому, гораздо более интересно создать это на FreeBSD, где ничего похожего нет. Это - отличный challenge, чтобы что-то улучшить и исправить в FreeBSD. Мы все любим независимость и свободу и FreeBSD сегодня - это независимая и свободная ОС, находящаяся в руках обычных людей.

Q: «Почему CBSD написан на sh:

  • Большая часть кода написана на sh по той причине, что подобные задачи не требуют большой математической логики (подробнее) - ядро CBSD нужно рассматривать как backend к shell-командам, которыми достигается необходимое и в случае проблем, любой системный инженер всегда может локализовать и исправить проблему в коде.

    Проблемы сложности сопровождения "большого кода на sh" изначально решены модульной структурой проекта, где каждый скрипт делает только свою задачу. Остальные, более сложные компоненты CBSD (например, Frontend, который реализует RestAPI для работы интерфейсов) пишется с использованием языка go, nodejs, php и не является частью CBSD Core.

Q: CBSD готова к использованию в production?

  • Это зависит только от вас и ваших требований. CBSD существует с 2013 и на данный момент является одной из старейших систем по управлению виртуальными окружениями FreeBSD, при этом она находится в актуальном состоянии и продолжает совершенствоваться. Ряд пользователей успешно применяет CBSD в больших production инсталляциях.

    Нам также интересно узнать больше о применении CBSD и ClonOS, мы создали отдельную страничку, где коллекционируем статьи и обзоры от разных пользователей

Q: ezjail, qjail, zjail, warden, iocage, bsdploy, jailctl, и прочее: Какого черта так много проектов, какая разница между всеми?

  • Короткий ответ: каждый проект имеет свой особенный вектор развития и цели по сравнению с другими; Вы имеете выбор между различными вариантами технологий и реализаций. Основное отличие между CBSD и другими в том, что CBSD позиционируется как комплексное решение с по возможности простым (когда это возможно) интерфейсом управления. CBSD по этой причине значительно крупнее и больше и не всем это подходит. Но мы преследуем разные цели по сравнению с другими и сфокусированы на комплексных кластерных решениях.

Q: jail, bhyve, xen... Как насчет Docker, планируется ли поддерка Docker в CBSD?

  • Нет. Мы ориентируемся на большие production-ready и FreeBSD-based инсталляции. Docker прекрасен, но у него нет официальной поддержки FreeBSD, поэтому нет смысла использовать в серъезной работе неподходящие инструменты.

    Вы можете использовать Docker также, как это сделано в MacOS или FreeNAS - через промежуточную прослойку из гипервизора [x/b]hyve. Но это годится больше для забавы и игр, нежели серъезного применения в рабочей инфраструктуре. Но если очень хочется, все это легко сделать самостоятельно и без CBSD.

Q: «Что означает буква C в названии проекта?»

  • По оригинальной идее, CBSD означает «кластер BSD», поскольку одна из целей проекта - получение одноранговой фермы серверов, обслуживающих большое количество клеток в одном пространстве, что позволяет клеткам мигрировать между нодами и делить между собой общий пул ресурсов.

Q: «В чем заключается кластеризация?»

  • В качестве транспорта при общении одной ноды с другой используется SSH протокол, что обеспечивает шифрованный канал связи. При добавлении нод и обмене ключами, нода начинает реплицировать локальный реестр CBSD (SQlite3 база) на соседей. Например, если на Node1 погасить клетку jail2, то выполнив SQL запрос на Node2 по состоянию клетки jail2, данное изменение в статусе будет отражено.
  • Добавленные друг на друга ноды представляют из себя одноранговую сеть. Другими словами, каждая нода может выполнить CBSD-команды на удаленной ноде с одинаковыми правами. Таким образом, имеется множественные точки входа для управления фермой - вы в состоянии зайти на одну ноду и с нее управлять состоянием и параметрами клеток, расположенные на соседних системах. При этом роль ACL и прав доступа - на совести front-end-ов.
  • Через демон taskd (очередь задач через SQLite3 базу), ноды могут ставить друг на друга долгие или отложенные задачи, при создании получая ID задачи и далее, контроллирующие по нему отработку и результат.
  • Соединение SSH между участниками держится постоянно (опционально), выступая в роли некого heartbeat-а между нодами и мультиплексированием ssh для ускоренного вызова команд (те, является SSH ControlMaster-соединением, что исключает долгую handshake-стадию при удаленных командах)

CBSD-related поддержка, чат и юзергруппа

Мы запустили Telegram канал для дискуссий вокруг использования и разработки CBSD

Пожалуйста, присоединяйтесь к нам в @cbsdofficial

Поддержать проект!

Работа над CBSD Project во многом зависит от следующих факторов:

  • От наличия свободного времени разработчиков вне основной дневной работы (проект не коммерческий): работая над CBSD, мы жертвуем своим временем на отдых и общению с семьей и друзьями;
  • От востребованности проекта;
  • От предложений, связанных с применением CBSD наработок или разработка и адаптация ее компонент под реальные коммерческие проекты;

Если вы хотите помочь или просто поблагодарить авторов, воспользуйтесь кнопкой ниже:

Через PayPal:

Donate CBSD"

Через Яндекс.Деньги, Рубли:

Кроме этого, вы можете распространить информацию о проекте или написать статью об использовании. Кроме этого вы можете лайкнуть проект на странице Github CBSD, нажав Star. Мелочь, а приятно ;-)