chef, puppet, salt, ansible on secon 2014

29
Сравнение современных средств управления конфигурацией: Chef, Puppet, SaltStack, Ansible Александр Чистяков, главный инженер Git in Sky, 2014

Upload: alexander-chistyakov

Post on 29-Nov-2014

1.654 views

Category:

Technology


3 download

DESCRIPTION

My presentation from SECON 2014

TRANSCRIPT

Page 1: Chef, Puppet, Salt, Ansible on SECON 2014

Сравнение современных средств управления

конфигурацией:

Chef, Puppet, SaltStack, Ansible

Александр Чистяков, главный инженер Git in Sky,

2014

Page 2: Chef, Puppet, Salt, Ansible on SECON 2014

Давайте познакомимся, я:

§ Живу на Северо-Западе§ Работаю главным инженером в компании Git in Sky§ Занимаюсь поддержкой инфраструктуры разных проектов,

больших и маленьких§ Постоянно что-нибудь конфигурирую

Сравнение современных средств управления конфигурацией: Chef, Puppet, SaltStack, Ansible. 2014

Page 3: Chef, Puppet, Salt, Ansible on SECON 2014

Давайте познакомимся, Вы:

§ Занимаетесь разработкой веб-проектов?§ Занимаетесь поддержкой веб-проектов?§ Не занимаетесь? А чем занимаетесь?§ Готов поспорить, вы немного конфигурируете?§ Если нет, кто-то делает это за вас.§ (Надеюсь, вы знаете, кто именно, и доверяете ему)

Сравнение современных средств управления конфигурацией: Chef, Puppet, SaltStack, Ansible. 2014

Page 4: Chef, Puppet, Salt, Ansible on SECON 2014

Зачем нужны CM системы?

§ Системы управления конфигурацией позволяют:§ Управлять конфигурацией (сюрприз!)§ Добиваться повторимости§ Рассматривать конфигурацию как код§ За что мы любим библиотеки?§ Переиспользовать код, в том числе, и чужой

Сравнение современных средств управления конфигурацией: Chef, Puppet, SaltStack, Ansible. 2014

Page 5: Chef, Puppet, Salt, Ansible on SECON 2014

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

Page 6: Chef, Puppet, Salt, Ansible on SECON 2014

Мужской справочник по СМ системам:

§ Задача: выбрать систему управления конфигурацией§ План действий (два варианта):

Сравнение современных средств управления конфигурацией: Chef, Puppet, SaltStack, Ansible. 2014

Page 7: Chef, Puppet, Salt, Ansible on SECON 2014

Меня зовут Саша, и у меня есть проблема:

Как решал эту задачу я:§ Начало 2011-го, Puppet и Chef уже есть, выбираю из них§ Не знаю ни Chef, ни Puppet, ни Ruby§ Но! Про Puppet есть книга!§ Книга — источник знаний?§ Книга — показатель «взрослости» проекта!§ http://goo.gl/MKe5Ni (опубликована Feb 4, 2008)

Сравнение современных средств управления конфигурацией: Chef, Puppet, SaltStack, Ansible. 2014

Page 8: Chef, Puppet, Salt, Ansible on SECON 2014

Назад в будущее:

Я из 2011-го и эта же задача сейчас:§ 2014: Puppet, Chef, Salt, Ansible, Fabric, ...§ Про Chef есть книга...две книги...три книги§ Про Puppet есть три книги...или больше?§ (Packt Publishing — это круто!)§ O_O

Нужно менять критерии отбора!

Сравнение современных средств управления конфигурацией: Chef, Puppet, SaltStack, Ansible. 2014

Page 9: Chef, Puppet, Salt, Ansible on SECON 2014

Придумываем критерии:

§ Порог вхождения (низкий, высокий, средний)§ Сложность развертывания (низкая, высокая, средняя)§ Язык ядра проекта (Ruby, Python, C, Java, Prolog, ...)§ Язык описания конфигурации (custom DSL, YAML, XML, eDSL, Ruby)§ Парадигма описания конфигурации (императивная, декларативная)§ Сложность поддерживания сервиса (низкая, высокая, средняя)§ Ресурсоемкость (низкая, высокая, средняя)§ Дружелюбность и компетентность сообщества§ Классификация получилась очень субъективная и не очень стройная§ Но другой у меня для вас нет (может, есть у вас для меня?)

Сравнение современных средств управления конфигурацией: Chef, Puppet, SaltStack, Ansible. 2014

Page 10: Chef, Puppet, Salt, Ansible on SECON 2014

Порог вхождения:

Сильно зависит от вашего пути:§ Я начинал с Puppet, и мне было сложно§ Через три года мы вернулись - «так здесь же все понятно!»§ Мы уже знали анатомию типичной CM системы§ Мы знали, что именно нам необходимо (все CM системы похожи)§ Новая информация про Puppet в сети, новые книги, etc

Тем не менее, у разных систем порог вхождения разный

Сравнение современных средств управления конфигурацией: Chef, Puppet, SaltStack, Ansible. 2014

Page 11: Chef, Puppet, Salt, Ansible on SECON 2014

Порог вхождения:

§ Про CFEngine тоже есть книга§ Я пытался читать ее, уже имея опыт с Puppet и Chef§ Сначала я сломался прямо на оглавлении§ Потом я не смог найти, как в CFEngine устроена генерация конфигов

при помощи шаблонов§ Так, до сих пор, и не знаю, возможно, никак не устроена§ Да, я не хочу читать никакие книги, я хочу описывать конфигурацию,

где мой «Getting started»?

Сравнение современных средств управления конфигурацией: Chef, Puppet, SaltStack, Ansible. 2014

Page 12: Chef, Puppet, Salt, Ansible on SECON 2014

«Getting started»

Типичные действия:§ Развернуть и настроить сервер, пусть в минимальном варианте (если сервер

вообще предусмотрен)§ Настроить агент на клиентских машинах, связать их с сервером§ Начать описывать конфигурацию§ Протестировать описание§ Применить описание

Казалось бы, пять простых пунктов!Сравнение современных средств управления конфигурацией: Chef, Puppet, SaltStack, Ansible. 2014

Page 13: Chef, Puppet, Salt, Ansible on SECON 2014

Анатомия СМ-системы:

§ Сервер (если есть, обычно — есть)§ Агент на клиентских узлах (если есть, часто — есть)§ Описания конфигурации (хранятся на сервере, применяются на клиенте), состоят из:

§ Описаний установленных пакетов§ Описаний разрешенных и запущенных сервисов§ Шаблонов конфигурационных файлов и правил генерации§ Описаний параметров сред (логических групп серверов)

Сравнение современных средств управления конфигурацией: Chef, Puppet, SaltStack, Ansible. 2014

Page 14: Chef, Puppet, Salt, Ansible on SECON 2014

Шаг 1: развернуть сервер

Сервер нормального человека: Сервер курильщика (Chef):

Сравнение современных средств управления конфигурацией: Chef, Puppet, SaltStack, Ansible. 2014

Page 15: Chef, Puppet, Salt, Ansible on SECON 2014

Шаг 1: развернуть сервер

§ В настоящее время (после выхода Chef 11) любой CM сервер разворачивается через один-два однострочника

§ При этом количество компонентов Chef-сервера не уменьшилось — их там по-прежнему хватает на целую диаграмму

Сравнение современных средств управления конфигурацией: Chef, Puppet, SaltStack, Ansible. 2014

Page 16: Chef, Puppet, Salt, Ansible on SECON 2014

Шаг 2: настроить агент на клиентах

§ Плюс-минус однострочник для всех систем§ Надо только решить, как будет работать агент: как постоянно

загруженный сервис, либо через cron§ В случае, если агент написан на Ruby, крайне рекомендую

использовать cron§ Кстати, в книге про Puppet так и написано: “используйте лучше cron”§ Потому что Ruby-машина так устроена, что если что-то взяла, то

обратно уже не отдаст

Сравнение современных средств управления конфигурацией: Chef, Puppet, SaltStack, Ansible. 2014

Page 17: Chef, Puppet, Salt, Ansible on SECON 2014

Шаг 3: описываем конфигурацию

§ Лучшее описание — декларативное§ Сам процесс применения описания императивен из-за тяжелого

наследия UNIX shell и других технологий 70-х§ Выберите тот DSL, который вам будет понятнее (DSL курильщика тоже

есть)§ Привыкните к мысли, что никакого DSL не хватит и придется либо

писать свои модули, либо исполнять ad hoc скрипты§ По возможности, делайте их идемпотентными§ Берите систему с тем языком ядра, который знаете — вам с ним еще

интегрироваться, а, возможно, и патчи на ядро выпускатьСравнение современных средств управления конфигурацией: Chef, Puppet, SaltStack, Ansible. 2014

Page 18: Chef, Puppet, Salt, Ansible on SECON 2014

DSL курильщика

§ В докладе Стаса Богатырева «Chef-сервер не нужен» есть отличный слайд, отображающий 15 разных мест в описании конфигурации, где могут быть объявлены атрибуты ноды (управляемой машины)

§ Описание конфигураций для Salt с применением Python, а не YAML — чистая магия, хотел с гордостью показать вам, как я это умею, но потом мне стало стыдно

§ Вообще, чем больше и сложнее описываемая конфигурация, тем больше метрика WTF/LOC при изучении ее описания

§ По субъективным ощущениям для описаний под Chef эта метрика будет, при прочих равных, наименьшей

Сравнение современных средств управления конфигурацией: Chef, Puppet, SaltStack, Ansible. 2014

Page 19: Chef, Puppet, Salt, Ansible on SECON 2014

Дружелюбность и компетентность сообщества

§ В трекере Chef до сих пор висят незакрытые проблемы от 2012-го года§ Я попытался отправить патч в один из Chef cookbook'ов — через

полгода (!) меня попросили подписать отказ от прав§ Один человек в мейл-листе Salt жаловался, что его прогнали из

сообщества Ansible§ В связи со всем этим:

§ Сообщество — это вы сами§ Вам придется владеть кодом (скорее всего, всем)§ Дружелюбность и компетентность оцените в зеркале

Сравнение современных средств управления конфигурацией: Chef, Puppet, SaltStack, Ansible. 2014

Page 20: Chef, Puppet, Salt, Ansible on SECON 2014

Все СМ-системы системы похожи?

§ С большого расстояния — да§ Если подойти поближе, то у них окажется разный цвет и разная форма ушей§ Кроме того, у каждой будет уникальный характер

Поговорим об уникальных отличиях

Сравнение современных средств управления конфигурацией: Chef, Puppet, SaltStack, Ansible. 2014

Page 21: Chef, Puppet, Salt, Ansible on SECON 2014

У каждой системы свой жаргон

На мой взгляд, это довольно глупая уникальность.Но создателей CM-систем тоже можно понять – они втайне хотят, чтобы остался только один игрок.Раньше я приводил в докладах словарики этого жаргона.Но, говоря о четырех системах сразу, я не вижусмысла этого делать.

Теперь о действительно уникальном.

Сравнение современных средств управления конфигурацией: Chef, Puppet, SaltStack, Ansible. 2014

Page 22: Chef, Puppet, Salt, Ansible on SECON 2014

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

Page 23: Chef, Puppet, Salt, Ansible on SECON 2014

Puppet: сделано для RHEL

§ В отличие от Chef, Puppet всегда таргетировался на RHEL-based системы и нормально на них работал§ Полная поддержка команд Augeas:

§ Augeas — это API и tool для управления конфигурационными файлами§ Сhef с Augeas не работает вообще, Salt поддерживает только команду

«set», для Ansible есть сторонний модуль.

Сравнение современных средств управления конфигурацией: Chef, Puppet, SaltStack, Ansible. 2014

Page 24: Chef, Puppet, Salt, Ansible on SECON 2014

Salt: сделано для быстрых и грязных

§ Клиенты держат постоянное соединениес сервером

§ Очень удобно выполнять ad hoc команды

§ Исходно Salt — parallel execution tool

§ Сравните с тем, как параллельное исполнение

сделано, например, в Chef! (если вкратце,

оно там сделано очень плохо)

Сравнение современных средств управления конфигурацией: Chef, Puppet, SaltStack, Ansible. 2014

Page 25: Chef, Puppet, Salt, Ansible on SECON 2014

Ansible: сделано для нас

§ Сервер — это не всегда сервер§ Меньше забот о безопасности

§ Агента на управляемых хостах нет вообще!

§ Ничего не надо устанавливать, кроме

Python, все по SSH§ OpenBSD? Да, конечно!

§ DragonflyBSD? Да, конечно!

§ SmartOS? Да, конечно!

Сравнение современных средств управления конфигурацией: Chef, Puppet, SaltStack, Ansible. 2014

Page 26: Chef, Puppet, Salt, Ansible on SECON 2014

Ansible: момент истины

§ Честно говоря, до сегодняшней ночи я вообще не знал, что это такое§ Но я знал, что такое SmartOS:

§ Потомок OpenSolaris§ Запускается с флешки — часть каталогов read-only, конфигурация

восстанавливается хитрыми shell scripts, которые у всех свои и не работают§ Используется у нас в инфраструктуре в качестве гипервизора и очень нам

нравится§ Через сорок минут после прочтения Getting Started я мог управлять SmartOS при

помощи Ansible (и был очень, очень удивлен и рад этому)

Сравнение современных средств управления конфигурацией: Chef, Puppet, SaltStack, Ansible. 2014

Page 27: Chef, Puppet, Salt, Ansible on SECON 2014

Всё вместе и я

§ Мой личный опыт использования:§ Chef — 2 года§ Puppet — 3 месяца§ Salt — 9 месяцев§ Ansible — менее суток

§ Можно ли мне верить?

§ Верить можно только исходным кодам приложения

Сравнение современных средств управления конфигурацией: Chef, Puppet, SaltStack, Ansible. 2014

Page 28: Chef, Puppet, Salt, Ansible on SECON 2014

Выводы:

§ Знать одну CM систему лучше, чем ни одной!§ Знать несколько CM систем лучше, чем одну!§ План не изменился§ Но теперь у вас есть схема магазина (я надеюсь)§ Кстати, наша торговая точка здесь http://gitinsky.com

Заходите!

Сравнение современных средств управления конфигурацией: Chef, Puppet, SaltStack, Ansible. 2014

Page 29: Chef, Puppet, Salt, Ansible on SECON 2014

С вами был Александр Чистяков,главный инженер Git in Sky

[email protected]://gitinsky.com

http://meetup.com/DevOps-40

Пожалуйста, ваши вопросы.

Спасибо за внимание!