Проект Chef представил формат самодостаточных универсальных пакетов Habitat
Разработчики инструментария управления конфигурацией Chef представили проект Habitat, в рамах которого предложен новый формат самодостаточных пакетов, которые можно использовать для установки в различных дистрибутивах Linux. Пакеты Habitat включают в себя все используемые приложением зависимости и не привязаны к конкретным дистрибутивам Linux, но в отличие от пакетов flatpak и snap, дополнительно включают элементы для автоматизации обновления, развёртывания и управления настройками. Код проекта написан на языке Rust и распространяется под лицензией Apache 2.0.
Основная идея проекта заключается в переносе средств централизованного управления конфигурацией и обновлениями на сторону пакета с приложением. Таким образом средства автоматизации при применении Habitat сосредоточены на приложении, а не на инфраструктуре для его выполнения, позволяя уделять больше внимание возможностям сборки, тратя меньше времени на подготовку окружения для выполнения. Приложение без изменений может запускаться как на выделенных серверах, так и в виртуальных машинах, контейнерах или системах "платформа как сервис" (PaaS).
Формат пакетов подразумевает включение в состав всех необходимых для работы приложения зависимостей, предоставляя самодостаточное окружение, изолированное и независимое от внешней системы. Помимо непосредственно формата пакетов Habitat также предоставляет супервизор для контроля за их выполнением (runtime supervisor), в который встроены средства для координации развёртывания приложения и определения доступных сервисов. Супервизор имеет информацию о взаимодействии между экземплярами текущего приложения, правилах перезапуска, стратегии обновления, а также отвечает за настройку конфигурации для выполнения текущего экземпляра и выполняет функции его подключения к сервисам управления и мониторинга. Управление осуществляется через HTTP API.
Особенности Habitat:
- Предоставление повторяемых сборок - бинарные файлы, собранные на другой системе, будут полностью эквивалентны, что упрощает проведение аудита;
- Выполнение в окружении с единым и неизменным набором ресурсов;
- Возможность централизованного управления runtime-конфигурацией приложения с учётом различных сценариев развёртывания;
- Независимость от дистрибутива Linux и типа окружения (VM, контейнер, обычный сервер, PaaS);
- Поддержка различных платформ контейнерной изоляции и оркестровки контейнеров в кластере - Docker, rtk, Kubernetes, Mesosphere;
- Предсказуемое (идемпотентное) поведение - обработка идентичных входных данных в разное время и в разных окружениях приводит к одинаковому результату;
- Возможность продолжения использования устаревших приложений, которые уже не могут выполняться в штатном окружении современных дистрибутивов;
- Читаемость и простота написания сценариев и конфигурационных файлов, которые могут храниться в обычной системе управления версиями, вместе с самим приложением;
- Наличие сборочной системы, собирающей новые версии пакетов в соответствии с заданным планом сборки и публикующей их для установки и обновления;
- Поддержка автоматического обновления;
- Обновление выполняется атомарно с возможностью отката на прошлую версию;
- Независимость от языков программирования.