Проект Chef представил формат самодостаточных универсальных пакетов Habitat

2016-06-17

Разработчики инструментария управления конфигурацией 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;
  • Предсказуемое (идемпотентное) поведение - обработка идентичных входных данных в разное время и в разных окружениях приводит к одинаковому результату;
  • Возможность продолжения использования устаревших приложений, которые уже не могут выполняться в штатном окружении современных дистрибутивов;
  • Читаемость и простота написания сценариев и конфигурационных файлов, которые могут храниться в обычной системе управления версиями, вместе с самим приложением;
  • Наличие сборочной системы, собирающей новые версии пакетов в соответствии с заданным планом сборки и публикующей их для установки и обновления;
  • Поддержка автоматического обновления;
  • Обновление выполняется атомарно с возможностью отката на прошлую версию;
  • Независимость от языков программирования.