2020-10 upd: we reached the first fundraising goal and rented a server in Hetzner for development! Thank you for donating !
О проекте
CBSD — это обёртка из sh-скриптов (преимущественно) вокруг подсистемы jail(8), гипервизоров bhyve, QEMU / NVMM и Xen для BSD операционных систем ( FreeBSD, DragonFlyBSD ). Проект позиционируется как единый инструмент комплексного решения при построении серверов приложений, использующее заранее подготовленные образы виртуальных окружений с типовым набором ПО и требующие минимальной настройки.
Какого-либо нового функционала в ОС на данном этапе не внесено — всё, что могут делать скрипты CBSD, можно сделать командой (командами, десятками, сотнями команд) в CLI через соответствующие утилиты. Проект делается как для облегчения нужд по администрированию виртуальных сред на FreeBSD, так и «just for fun».
- jail demo
- bhyve demo
Особенности…
- Легкий старт
- Любите Vagrant-like стиль? Не проблема!
- репозиторий с готовыми template-клетками
- API module: частное облако через API
- Хотите деплоить ВМ и контейнера в стиле Terraform/aws-cli/kubectl используя тонкий клиент (из Window, MACOS, Linux) для CBSD API? Попробуйте это!
- 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, phpIPAM, monit (health-check) и т.д.)
- экспорт метрик по использованию ресурсов jail и виртуальных машин (Экспорт и отображение jail и bhyve метрик с CBSD, Grafana и Prometheus)
- bsdconfig-подобные диалоги текстового интерфейса, что избавляет вас от необходимости учить большое количество команд и аргументов
- модульная структура - каждая команда - это отдельный файл, что делает большой проект легким в обслуживании. Помимо этого, есть отдельные комплексные модули ( Kubernetes для CBSD, vncterm, noVNC, WS/WSS нотификации, Puppet хелперы )
- быстрое создание и развертывание виртуальных окружений с нуля по манифесту;
- Поддержка профилей для создания jail/bhyve/XEN
- экспорт и импорт окружений в образ;
- клонирование окружений (в т.ч. на удалённую машину);
- холодная миграция окружений с ноды на ноду;
- управление ресурсами окружений (приоритезация, квоты);
- репликация окружений на удалённые машины;
- дистрибуция «типовых» окружений с определённым набором софта и сервисами;
- управление очередностью запуска окружений;
- Поддержка Puppet и наличие Puppet модуля CBSD для массового менеджмента конфигурациями;
- bhyve: поддержка cloud-init. Полный стек современных ОС: (Windows,CentOS,NetBSD,OpenBSD, Debian, Ubuntu и FreeBSD )
- bhyve: поддержка живой миграции
- bhyve: работа на ZVOL или в md-backend;
- bhyve: поддержка VNC
- bhyve: поддержка PCI Passthrough и SR-IOV
- bhyve: Общие каталоги для виртуальных машин bhyve (через virtio-p9)
- bhyve: поддержа UEFI PXE boot;
- bhyve: менеджмент виртуальных дисков;
- bhyve: поддержка VALE support: быстрый NETMAP-based виртуальный свич;
- jail: выполнение массовых команд в параллельном режиме: jexec
- jail: полная или частичная шифрация данных jail (GELI и нативная ZFS шифрация)
- 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-имидж или bhyve ВМ;
- jail: поддержка VNC в окружение;
- …
Цели проекта
- Предоставить пользователям FreeBSD возможность удобного менеджмента виртуальных окружений
- Продемонстрировать возможности FreeBSD как Cloud-хостинг платформы;
- автоматизация типовых операций;
- создание (своих собственных/персональных) платформ для приложений по-требованию (PaaS);
- и не только…
- Дорожная карта
FAQ
Q: «Почему FreeBSD:
По мнению авторов проекта, Linux давно не принадлежит обычным людям, влияние на нее оказывают большие и коммерческие организации, тогда как FreeBSD по большей части разрабатывается обычными энтузиастами. Сегодня Linux - это коммерческая ОС для зарабатывания денег - то, чем был Microsoft Windows в 90 годах и против чего боролись когда-то апологеты Linux в то время (автор CBSD один из них). Да, FreeBSD по этим причинам значительно отстает по некоторым характеристикам. Достаточно посмотреть на обилие таких решений как OpenVZ, Docker, Rancher, Kubernetes, 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, при этом она находится в актуальном состоянии и продолжает совершенствоваться. Таким образом, это прошло проверку временем. За этот огромный период по меркам 3rd-party проектов FreeBSD было собрано и обработано большое количество ошибок и пожеланий, отправленных большим количеством пользователей. Ряд пользователей успешно применяет CBSD в больших production инсталляциях.
Кроме этого, проект сотрудничает с некоторыми поставщиками услуг на базе FreeBSD/jail/bhyve, которые используют CBSD в продакшене. Это является дополнительным показателем долгосрочных перспектив.
Нам также интересно узнать больше о применении CBSD и ClonOS, мы создали отдельную страничку, где коллекционируем статьи и обзоры от разных пользователей
Q: AppJail, bastillebsd, bhyve-rc, bhyvemgr, bsdploy, bdm, bvm, chyves, cirrina, cloudbsd, crate, ezjail, finch, focker, fubarnetes, ioc, iocage: ( in shell, in python ), iocell, iohyve, jadm, jail-primer, jailadmin, jailctl, jailer, jailutils, jocker, jest, kjail, mkjail, pot, pyvm-bhyve, quickjail, qjail, quBSD, runj, rvmadm, tredly, vessel, virt-manager vm-bhyve, warden, weasel, zjail, и прочее: Какого черта так много проектов, какая разница между всеми?
Большинство из них родилось и уже умерло. Некоторые проекты рождаются по причине NIH-синдрома. Некоторые умирают из-за отстутствия долгосрочных целей и отсутствия поддержки. Провести сравнение с CBSD достаточно сложно. Короткий ответ: каждый проект имеет свой особенный вектор развития и цели по сравнению с другими; Вы имеете выбор между различными вариантами технологий и реализаций. Основное отличие между CBSD и другими в том, что CBSD позиционируется как комплексное решение с по возможности простым (когда это возможно) интерфейсом управления. CBSD по этой причине значительно крупнее и больше и не всем это подходит. Но мы преследуем разные цели по сравнению с другими и сфокусированы на комплексных кластерных решениях.
Q: Any child project?
- Reggae: DevOps tool for CBSD
- BITBSD and BitCloud.sh: CBSD-based programmable VPS platform for blockchain
- ClonOS: FreeBSD based distro for virtual hosting platform and appliance
- bhyve cloud: Bhyve cloud
- k8s-bhyve project: FreeBSD/bhyve-based K8S clusters
- MyBee: FreeBSD based distro with pre-installed CBSD and API service.
Некоторые люди экономят свое время и используют CBSD для решения более комплексных задач, некоторые из них:
Q: jail, bhyve, xen... Как насчет Docker, планируется ли поддерка Docker в CBSD?
Нет. Мы ориентируемся на большие production-ready и FreeBSD-based инсталляции. Docker прекрасен, но у него нет официальной поддержки FreeBSD, поэтому нет смысла использовать в серъезной работе неподходящие инструменты.
Вы можете использовать Docker также, как это сделано в MacOS или FreeNAS - через промежуточную прослойку из гипервизора [x/b]hyve. Но это годится больше для забавы и игр, нежели серъезного применения в рабочей инфраструктуре. Но если очень хочется, все это: Docker with FreeBSD легко можно сделать и без 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 (на английском языке)
Пожалуйста, присоединяйтесь к нам в @cbsdofficial_ru (на русском языке)
Поддержать проект!
Если вы хотите помочь, поблагодарить или угостить авторов CBSD пивом, воспользуйтесь ссылкой ниже:
Кроме этого, вы можете распространить информацию о проекте или написать статью об использовании. Кроме этого вы можете лайкнуть проект на странице Github CBSD, нажав Star. Мелочь, а приятно ;-)