2. Давайте познакомимся, я:
§ Живу на Северо-Западе
§ Работаю главным инженером в компании Git in Sky
§ Занимаюсь поддержкой инфраструктуры разных проектов,
больших и маленьких
§ Постоянно что-нибудь конфигурирую
Сравнение современных средств управления конфигурацией: Chef, Puppet, SaltStack, Ansible. 2014
3. Давайте познакомимся, Вы:
§ Занимаетесь разработкой веб-проектов?
§ Занимаетесь поддержкой веб-проектов?
§ Не занимаетесь? А чем занимаетесь?
§ Готов поспорить, вы немного конфигурируете?
§ Если нет, кто-то делает это за вас.
§ (Надеюсь, вы знаете, кто именно, и доверяете ему)
Сравнение современных средств управления конфигурацией: Chef, Puppet, SaltStack, Ansible. 2014
4. Зачем нужны CM системы?
§ Системы управления конфигурацией позволяют:
§ Управлять конфигурацией (сюрприз!)
§ Добиваться повторимости
§ Рассматривать конфигурацию как код
§ За что мы любим библиотеки?
§ Переиспользовать код, в том числе, и чужой
Сравнение современных средств управления конфигурацией: Chef, Puppet, SaltStack, Ansible. 2014
5. How to configure like a pro!
§ 70-е Сначала был UNIX shell (почему «был», он и сейчас есть)
§ 90-е CFEngine 1, CFEngine 2 (ядро проекта - на языке C, кстати,
кто-нибудь здесь разрабатывает на языке C?)
§ 00-е Puppet (на Ruby), Bcfg2 (на Python)
§ 10-е Chef (Ruby), Salt (Python), Ansible (Python), Juju (Go),
Rundeck (Java), Babushka (Ruby), Marelle (Prolog)
Как видите, выбор есть! (Наверняка, я перечислил не всё)
Сравнение современных средств управления конфигурацией: Chef, Puppet, SaltStack, Ansible. 2014
6. Мужской справочник по СМ системам:
§ Задача: выбрать систему
управления конфигурацией
§ План действий (два варианта):
Сравнение современных средств управления конфигурацией: Chef, Puppet, SaltStack, Ansible. 2014
7. Меня зовут Саша, и у меня есть проблема:
Как решал эту задачу я:
§ Начало 2011-го, Puppet и Chef уже есть, выбираю из них
§ Не знаю ни Chef, ни Puppet, ни Ruby
§ Но! Про Puppet есть книга!
§ Книга — источник знаний?
§ Книга — показатель «взрослости» проекта!
§ http://goo.gl/MKe5Ni (опубликована Feb 4, 2008)
Сравнение современных средств управления конфигурацией: Chef, Puppet, SaltStack, Ansible. 2014
8. Назад в будущее:
Я из 2011-го и эта же задача сейчас:
§ 2014: Puppet, Chef, Salt, Ansible, Fabric, ...
§ Про Chef есть книга...две книги...три книги
§ Про Puppet есть три книги...или больше?
§ (Packt Publishing — это круто!)
§ O_O
Нужно менять критерии отбора!
Сравнение современных средств управления конфигурацией: Chef, Puppet, SaltStack, Ansible. 2014
9. Придумываем критерии:
§ Порог вхождения (низкий, высокий, средний)
§ Сложность развертывания (низкая, высокая, средняя)
§ Язык ядра проекта (Ruby, Python, C, Java, Prolog, ...)
§ Язык описания конфигурации (custom DSL, YAML, XML, eDSL, Ruby)
§ Парадигма описания конфигурации (императивная, декларативная)
§ Сложность поддерживания сервиса (низкая, высокая, средняя)
§ Ресурсоемкость (низкая, высокая, средняя)
§ Дружелюбность и компетентность сообщества
§ Классификация получилась очень субъективная и не очень стройная
§ Но другой у меня для вас нет (может, есть у вас для меня?)
Сравнение современных средств управления конфигурацией: Chef, Puppet, SaltStack, Ansible. 2014
10. Порог вхождения:
Сильно зависит от вашего пути:
§ Я начинал с Puppet, и мне было сложно
§ Через три года мы вернулись - «так здесь же все понятно!»
§ Мы уже знали анатомию типичной CM системы
§ Мы знали, что именно нам необходимо (все CM системы похожи)
§ Новая информация про Puppet в сети, новые книги, etc
Тем не менее, у разных систем порог вхождения разный
Сравнение современных средств управления конфигурацией: Chef, Puppet, SaltStack, Ansible. 2014
11. Порог вхождения:
§ Про CFEngine тоже есть книга
§ Я пытался читать ее, уже имея опыт с Puppet и Chef
§ Сначала я сломался прямо на оглавлении
§ Потом я не смог найти, как в CFEngine устроена генерация конфигов
при помощи шаблонов
§ Так, до сих пор, и не знаю, возможно, никак не устроена
§ Да, я не хочу читать никакие книги, я хочу описывать конфигурацию,
где мой «Getting started»?
Сравнение современных средств управления конфигурацией: Chef, Puppet, SaltStack, Ansible. 2014
12. «Getting started»
Типичные действия:
§ Развернуть и настроить сервер, пусть в минимальном варианте (если сервер
вообще предусмотрен)
§ Настроить агент на клиентских машинах, связать их с сервером
§ Начать описывать конфигурацию
§ Протестировать описание
§ Применить описание
Казалось бы, пять простых пунктов!
Сравнение современных средств управления конфигурацией: Chef, Puppet, SaltStack, Ansible. 2014
13. Анатомия СМ-системы:
§ Сервер (если есть, обычно — есть)
§ Агент на клиентских узлах (если есть, часто — есть)
§ Описания конфигурации (хранятся на сервере, применяются
на клиенте), состоят из:
§
Описаний установленных пакетов
§
Описаний разрешенных и запущенных сервисов
§
Шаблонов конфигурационных файлов и правил генерации
§
Описаний параметров сред (логических групп серверов)
Сравнение современных средств управления конфигурацией: Chef, Puppet, SaltStack, Ansible. 2014
14. Шаг 1: развернуть сервер
Сервер нормального человека: Сервер курильщика (Chef):
Сравнение современных средств управления конфигурацией: Chef, Puppet, SaltStack, Ansible. 2014
15. Шаг 1: развернуть сервер
§ В настоящее время (после выхода Chef 11) любой CM сервер
разворачивается через один-два однострочника
§ При этом количество компонентов Chef-сервера не уменьшилось — их
там по-прежнему хватает на целую диаграмму
Сравнение современных средств управления конфигурацией: Chef, Puppet, SaltStack, Ansible. 2014
16. Шаг 2: настроить агент на клиентах
§ Плюс-минус однострочник для всех систем
§ Надо только решить, как будет работать агент: как постоянно
загруженный сервис, либо через cron
§ В случае, если агент написан на Ruby, крайне рекомендую
использовать cron
§ Кстати, в книге про Puppet так и написано: “используйте лучше cron”
§ Потому что Ruby-машина так устроена, что если что-то взяла, то
обратно уже не отдаст
Сравнение современных средств управления конфигурацией: Chef, Puppet, SaltStack, Ansible. 2014
17. Шаг 3: описываем конфигурацию
§ Лучшее описание — декларативное
§ Сам процесс применения описания императивен из-за тяжелого
наследия UNIX shell и других технологий 70-х
§ Выберите тот DSL, который вам будет понятнее (DSL курильщика тоже
есть)
§ Привыкните к мысли, что никакого DSL не хватит и придется либо
писать свои модули, либо исполнять ad hoc скрипты
§ По возможности, делайте их идемпотентными
§ Берите систему с тем языком ядра, который знаете — вам с ним еще
интегрироваться, а, возможно, и патчи на ядро выпускать
Сравнение современных средств управления конфигурацией: Chef, Puppet, SaltStack, Ansible. 2014
18. DSL курильщика
§ В докладе Стаса Богатырева «Chef-сервер не нужен» есть отличный
слайд, отображающий 15 разных мест в описании конфигурации,
где могут быть объявлены атрибуты ноды (управляемой машины)
§ Описание конфигураций для Salt с применением Python, а не YAML —
чистая магия, хотел с гордостью показать вам, как я это умею, но
потом мне стало стыдно
§ Вообще, чем больше и сложнее описываемая конфигурация, тем
больше метрика WTF/LOC при изучении ее описания
§ По субъективным ощущениям для описаний под Chef эта метрика
будет, при прочих равных, наименьшей
Сравнение современных средств управления конфигурацией: Chef, Puppet, SaltStack, Ansible. 2014
19. Дружелюбность и компетентность сообщества
§ В трекере Chef до сих пор висят незакрытые проблемы от 2012-го года
§ Я попытался отправить патч в один из Chef cookbook'ов — через
полгода (!) меня попросили подписать отказ от прав
§ Один человек в мейл-листе Salt жаловался, что его прогнали из
сообщества Ansible
§ В связи со всем этим:
§ Сообщество — это вы сами
§ Вам придется владеть кодом (скорее всего, всем)
§ Дружелюбность и компетентность оцените в зеркале
Сравнение современных средств управления конфигурацией: Chef, Puppet, SaltStack, Ansible. 2014
20. Все СМ-системы системы похожи?
§ С большого расстояния — да
§ Если подойти поближе, то у них окажется
разный цвет и разная форма ушей
§ Кроме того, у каждой будет уникальный характер
Поговорим об уникальных отличиях
Сравнение современных средств управления конфигурацией: Chef, Puppet, SaltStack, Ansible. 2014
21. У каждой системы свой жаргон
На мой взгляд, это довольно глупая уникальность.
Но создателей CM-систем тоже можно понять –
они втайне хотят, чтобы остался только один игрок.
Раньше я приводил в докладах словарики этого жаргона.
Но, говоря о четырех системах сразу, я не вижу
смысла этого делать.
Теперь о действительно уникальном.
Сравнение современных средств управления конфигурацией: Chef, Puppet, SaltStack, Ansible. 2014
22. Chef: сделано рубистами для рубистов
§ Chef-Librarian и Berkshelf — dependency managers
(то же, что Bundler (Ruby), Composer (PHP), Bower (Node), etc)
§ Chef появился как SaaS, и в этом качестве он лучше всех
§ Шифрование sensitive данных — функция ядра системы
(Для Puppet есть подпроект Hiera-Puppet и отдельный плагин
hiera-gpg для шифрования)
§ foodcritic — lint tool
§ test-kitchen — integration testing tool
§ ChefSpec, Cucumber-chef, rspec-chef — unit testing tools
Сравнение современных средств управления конфигурацией: Chef, Puppet, SaltStack, Ansible. 2014
23. Puppet: сделано для RHEL
§ В отличие от Chef, Puppet всегда таргетировался на RHEL-based
системы и нормально на них работал
§ Полная поддержка команд Augeas:
§
Augeas — это API и tool для управления конфигурационными файлами
§
Сhef с Augeas не работает вообще, Salt поддерживает только команду
«set», для Ansible есть сторонний модуль.
Сравнение современных средств управления конфигурацией: Chef, Puppet, SaltStack, Ansible. 2014
24. Salt: сделано для быстрых и грязных
§ Клиенты держат постоянное соединение
с сервером
§ Очень удобно выполнять ad hoc команды
§ Исходно Salt — parallel execution tool
§ Сравните с тем, как параллельное исполнение
сделано, например, в Chef! (если вкратце,
оно там сделано очень плохо)
Сравнение современных средств управления конфигурацией: Chef, Puppet, SaltStack, Ansible. 2014
25. Ansible: сделано для нас
§ Сервер — это не всегда сервер
§ Меньше забот о безопасности
§ Агента на управляемых хостах нет вообще!
§ Ничего не надо устанавливать, кроме
Python, все по SSH
§ OpenBSD? Да, конечно!
§ DragonflyBSD? Да, конечно!
§ SmartOS? Да, конечно!
Сравнение современных средств управления конфигурацией: Chef, Puppet, SaltStack, Ansible. 2014
26. Ansible: момент истины
§ Честно говоря, до сегодняшней ночи я вообще не знал, что это такое
§ Но я знал, что такое SmartOS:
§ Потомок OpenSolaris
§ Запускается с флешки — часть каталогов read-only, конфигурация
восстанавливается хитрыми shell scripts, которые у всех свои и не работают
§ Используется у нас в инфраструктуре в качестве гипервизора и очень нам
нравится
§ Через сорок минут после прочтения Getting Started я мог управлять SmartOS при
помощи Ansible (и был очень, очень удивлен и рад этому)
Сравнение современных средств управления конфигурацией: Chef, Puppet, SaltStack, Ansible. 2014
27. Всё вместе и я
§ Мой личный опыт использования:
§ Chef — 2 года
§ Puppet — 3 месяца
§ Salt — 9 месяцев
§ Ansible — менее суток
§ Можно ли мне верить?
§ Верить можно только исходным кодам приложения
Сравнение современных средств управления конфигурацией: Chef, Puppet, SaltStack, Ansible. 2014
28. Выводы:
§ Знать одну CM систему лучше, чем ни одной!
§ Знать несколько CM систем лучше, чем одну!
§ План не изменился
§ Но теперь у вас есть
схема магазина (я надеюсь)
§ Кстати, наша торговая точка
здесь http://gitinsky.com
Заходите!
Сравнение современных средств управления конфигурацией: Chef, Puppet, SaltStack, Ansible. 2014
29. С вами был Александр Чистяков,
главный инженер Git in Sky
alex@gitinsky.com
http://gitinsky.com
http://meetup.com/DevOps-40
Пожалуйста, ваши вопросы.
Спасибо за внимание!