Я использовал Chef для управления IT-инфраструктурой около полутора лет, начав с версии 0.10. Сначала, где-то пол-года, использовал только для управления конфигурациями, без развертывания ПО с нуля. Затем, уже на другой работе, автоматизировал управления конфигурациями и развертывание с нуля веб-проекта (30+ серверов, nginx, ruby, riak, redis, sphinx-search, rabbitmq и т.п.). Это позволило мне составить собственное мнение o достоинствах и недостатках Chef, и в этой заметке я свое мнение излагаю.

По итогу вышеописанной деятельности я был настолько утомлен недостатками Chef, что начал искать ему замену. Был рассмотрен Puppet и набиравший тогда популярность Ansible. Для объективного сравнения я реализовал часть из того, что уже было сделано для проекта с помощью Chef, с использованием этих двух SCM. По итогу, был выбран Ansible из-за невероятной читабельности получившихся playbook-ов, хотя Puppet также во многом обошел Chef. Особенно радовала декларативность Ansible и Puppet, а вот неопределенность порядка выполнения в Puppet огорчила.

Как-бы то ни было, по итогу работы с Chef у меня сложилось такое мнение:

  • В случае комплексной, динамически изменяемой среды, когда требуется на-лету перенастраивать софт в автоматическом режиме - Chef идеален. Тут его императивность приходится как раз к месту, поскольку действия выполняются сложные, и зависят от состояния системы в конкретный момент.
  • В случае, когда мы имеем ограниченный набор хостов, имеющих каждый свою фиксированную роль, когда любое переконфигурирование выполнятся специалистом - Chef избыточен, и даже вреден, поскольку провоцирует писать конфиги-программы, а не конфиги-данные.

Негатив:

  • Ruby - язык хороший, но пакетировать и совмещать разные версии это ад.
  • Слабочитаемый конечный конфиг, представляющий собой код на ruby. Это главный минус.
  • Императивный стиль большинства рецептов.
  • Жуткая ruby-мешанина в большинстве публичных рецептов, кроме как LWRP использовать оттуда нечего.
  • Привязанность многих cookbooks к Ubuntu.
  • Сложная, хоть и продуманная архитектура.
  • Море зависимостей у клиента и сервера, проблемы с версиями Ruby. К примеру, для squeeze и ruby1.9.3 пришлось пересобрать более 10 пакетов.
  • Для debian пришлось патчить chef для обхода проблемы с неработающим update-rc.d stop, хотя в puppet уже был рабочий workaround.

Позитив:

  • Окружения (environments).
  • Версии cookbook для каждого окружения, заморозка пакетов.
  • Готовые cookbooks, полезно для вникания.
  • Knife - отличный инстумент для любителей консоли вроде меня.

Comments

comments powered by Disqus