30
Salt и Ansible — средства управления конфигурацией на языке Python Как перестать изучать Ruby и начать жить Александр Чистяков, главный инженер Git in Sky, 2014

Salt and Ansible - Python-based CM systems

Embed Size (px)

DESCRIPTION

My talk from the Piter.Py conference

Citation preview

Page 1: Salt and Ansible - Python-based CM systems

Salt и Ansible — средства управления конфигурацией

на языке Python

Как перестать изучать Ruby и начать жить

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

2014

Page 2: Salt and Ansible - Python-based CM systems

Кто я?

§ Меня зовут Саша§ Я главный инженер в компании Git in Sky§ Днем — разработчик ПО§ Ночью — инженер отдела эксплуатации§ Или наоборот

Salt и Ansible — средства управления конфигурацией на языке Python. 2014

Page 3: Salt and Ansible - Python-based CM systems

Кто вы?

§ Разрабатываете на Python?§ Делаете веб-приложения?§ Может быть, Big Data приложения?§ А сервера у вас есть?§ Много? (Кстати, “много” - это от скольки?)§ Приходится заниматься их настройкой?

Salt и Ansible — средства управления конфигурацией на языке Python. 2014

Page 4: Salt and Ansible - Python-based CM systems

Задача #1

§ Есть много серверов§ Их нужно быстро привести к эталонному виду§ Разные серверы — разные роли§ Разные роли — разные приложения§ Возможно, разные платформы:

§ Linux, FreeBSD, Solaris, ...

Salt и Ansible — средства управления конфигурацией на языке Python. 2014

Page 5: Salt and Ansible - Python-based CM systems

Задача #2

Salt и Ansible — средства управления конфигурацией на языке Python. 2014

§ Есть эталонная конфигурация§ Нужно воссоздавать ее в разных окружениях:

§ development§ testing§ staging§ production

§ Окружения отличаются размерами и свойствами сервисов

Page 6: Salt and Ansible - Python-based CM systems

Какие есть пути решения этих двух задач?

§ Классический — скрипты на bash и пакеты deb/RPM§ Современный — системы управления конфигурацией:

§ CFEngine§ Puppet, Chef§ Salt, Ansible§ Func, Babushka, etc§ ^ Ansible создал автор Func

Salt и Ansible — средства управления конфигурацией на языке Python. 2014

Page 7: Salt and Ansible - Python-based CM systems

Словарик

§ «Классический»:§ Старый, неудобный, унаследованный,

недостаточно проработанный§ «Современный»:

§ Новый, удобный,сделанный с учетом ошибокпрошлых лет

Salt и Ansible — средства управления конфигурацией на языке Python. 2014

Page 8: Salt and Ansible - Python-based CM systems

Чем плох классический путь?

§ Я знаю одного (1) человека, которому

нравится писать скрипты на bash§ И, по-моему, он гонит§ bash: плохо писать, плохо читать,

недекларативный, неидемпотентный§ Чем плохи deb/RPM пакеты — тема для

отдельного доклада (если вкратце - всем)

Salt и Ansible — средства управления конфигурацией на языке Python. 2014

Page 9: Salt and Ansible - Python-based CM systems

Полезные свойства современных систем

§ bash-скрипты изолированы глубоко внутри,

вместо них — DSL для декларативного описания§ Конфигурация применяется параллельно

на всех узлах§ Объекты предметной области составляют

иерархию (роли, модули, группы узлов, атрибуты)

Salt и Ansible — средства управления конфигурацией на языке Python. 2014

Page 10: Salt and Ansible - Python-based CM systems

Классическое устройство современных систем

§ Клиент-серверная архитектура§ “Толстый” клиент, много зависимостей§ Часто — eDSL на базе Ruby§ ^ Сама CM система тоже на Ruby§ Pull-модель: клиенты обращаются к серверу

Salt и Ansible — средства управления конфигурацией на языке Python. 2014

Page 11: Salt and Ansible - Python-based CM systems

Что нам не нравится?

§ Клиент-серверная архитектура§ Необходимо разворачивать и

поддерживать сервер§ ^ это может быть ресурсозатратно§ Необходимо обеспечивать

безопасность сервера

Salt и Ansible — средства управления конфигурацией на языке Python. 2014

Page 12: Salt and Ansible - Python-based CM systems

Что нам не нравится?

§ “Толстый” клиент, много зависимостей§ Нужно делать бутстреппинг узла при его

введении в инфраструктуру§ Работает не на любой платформе§ При работе потребляет ресурсы

Salt и Ansible — средства управления конфигурацией на языке Python. 2014

Page 13: Salt and Ansible - Python-based CM systems

Что нам не нравится?

§ Часто — eDSL на базе Ruby§ Напомните, как называется эта конференция?§ embedded DSL (eDSL) сделан “поверх”

основного языка — декларативность не

навязывается на уровне DSL, можно писать

как угодно плохо

Salt и Ansible — средства управления конфигурацией на языке Python. 2014

Page 14: Salt and Ansible - Python-based CM systems

Что нам не нравится?

§ Pull-модель: клиенты обращаются к серверу§ Потеря смысла:

§ Зачем нужен командный центр,который требует защиты,но не имеет возможностиоперативного управления?

Salt и Ansible — средства управления конфигурацией на языке Python. 2014

Page 15: Salt and Ansible - Python-based CM systems

Как же быть?

§ Использовать Python :)§ Описывать конфигурацию на YAML§ Вернуть серверу возможность

управлять клиентами§ Либо вообще убрать сервер§ Кстати, и клиенты тоже убрать

Salt и Ansible — средства управления конфигурацией на языке Python. 2014

Page 16: Salt and Ansible - Python-based CM systems

От теории к практике

§ Salt — начинался как parallel execution tool§ Клиенты поддерживают постоянное соединение

с сервером через ØMQ§ Сейчас это полноценная CM система§ С документацией на 1119 страниц

Salt и Ansible — средства управления конфигурацией на языке Python. 2014

Page 17: Salt and Ansible - Python-based CM systems

Чем хорош Salt?

§ Очень быстро развивается§ Предоставляет много возможностей§ Сервер и клиент относительно легковесны§ Выполнение ad hoc команд сделано идеально§ Отличная поддержка сообществом

Salt и Ansible — средства управления конфигурацией на языке Python. 2014

Page 18: Salt and Ansible - Python-based CM systems

Чем плох Salt?

§ Слишком быстро развивается§ Приоритет возможностей ради

возможностей часто ведет к потере качества§ Инфраструктура, в которой нужны ad hoc

команды, — источник проблем в будущем§ 1119 страниц невозможно прочесть :(

Salt и Ansible — средства управления конфигурацией на языке Python. 2014

Page 19: Salt and Ansible - Python-based CM systems

Что еще можно сказать про Salt?

§ Порог вхождения:§ Спасибо тов. ван Россуму, он минимален

§ Выразительность:§ Авторы пытались построить второй Chef,

к счастью, не получилось§ Кросплатформенность:

§ Пробовал под FreeBSD, получилось

Salt и Ansible — средства управления конфигурацией на языке Python. 2014

Page 20: Salt and Ansible - Python-based CM systems

Должно быть что-то еще!

§ Ansible — вторая попытка Michael DeHaan

сделать CM систему§ Никаких зависимостей на узлах, кроме

интерпретатора Python§ Коммуникация между сервером и клиентами

по обычному SSH

Salt и Ansible — средства управления конфигурацией на языке Python. 2014

Page 21: Salt and Ansible - Python-based CM systems

Идея довольно современна

§ Решение лежало на поверхности, почему же

им не пользовались раньше?§ Не в любом языке есть библиотека,

реализующая нормальный SSH-клиент§ Кстати, сервера теперь тоже никакого нет,

его можно свернуть и унести с собой

Salt и Ansible — средства управления конфигурацией на языке Python. 2014

Page 22: Salt and Ansible - Python-based CM systems

Другие важные следствия

§ Если сервер все равно неизвестно где,

можно, он будет на той же машине?§ В классических системах CM сервер (не) просто

раздает шаблоны конфигурации клиентам§ Я знаю несколько десятков вариантов передачи

файлов, среди них есть удобные

Salt и Ansible — средства управления конфигурацией на языке Python. 2014

Page 23: Salt and Ansible - Python-based CM systems

Что мы теряем?

§ В классических CM системах узлы общаются

между собой через сервер:§ Делают autodiscovery, обмениваются

параметрами§ Autodiscovery через CM сервер? Зачем?

§ Есть Serf, etcd, mDNS

Salt и Ansible — средства управления конфигурацией на языке Python. 2014

Page 24: Salt and Ansible - Python-based CM systems

Что еще можно сказать про Ansible?

§ Порог вхождения:§ Его нет, я его не заметил

§ Выразительность:§ Местный YAML менее многословен,

чем в Salt§ Кросплатформенность:

§ SmartOS, DragonFly BSD

Salt и Ansible — средства управления конфигурацией на языке Python. 2014

Page 25: Salt and Ansible - Python-based CM systems

Что плохо и там, и там?

§ Декларативный YAML слишком декларативен§ Управление серверами — императивный процесс,

исторически§ Приходится прибегать к помощи скриптов на Python§ ^ хорошо, если только на Python, а то ведь и на bash§ У меня есть Salt'овский стейт на Python, но я не готов его

показать

Salt и Ansible — средства управления конфигурацией на языке Python. 2014

Page 26: Salt and Ansible - Python-based CM systems

Что ужасно и там, и там?

§ В оглавлении документации Salt по слову “Unit” не находится “Unit testing”§ Поиском по всей документации находится пара абзацев§ Понять, о чем они — невозможно

§ Про Ansible не находится ничего релевантного§ Управление модулями, их версиями и их зависимостями —

аналогов pip или Bundler пока не существует§ Для Ansible есть Ansible Galaxy — это PyPI, но без версий

Salt и Ansible — средства управления конфигурацией на языке Python. 2014

Page 27: Salt and Ansible - Python-based CM systems

Останется только один

§ CM системы не могут друг друга убить,

но отлично могут брать друг у друга идеи§ Так появились “Salt SSH” и “Ansible Fireball”§ Последний, к счастью, не выжил§ Лишь бы только не вышло, как с JIRA

Salt и Ansible — средства управления конфигурацией на языке Python. 2014

Page 28: Salt and Ansible - Python-based CM systems

Кстати, что касается отказа от сервера

§ В Salt есть salt-call, позволяющий работать

без мастера§ В Chef есть chef-solo, позволяющий работать

без мастера§ Masterless Puppet тоже бывает§ Я же говорил — они друг у друга тырят!

Salt и Ansible — средства управления конфигурацией на языке Python. 2014

Page 29: Salt and Ansible - Python-based CM systems

Выводы:

§ На вкус и цвет все CM системы разные§ Последнее слово на этом рынке еще

не прозвучало§ Python пока выступает очень достойно§ Но ему необходима помощь§ Помогите Python съесть Ruby!

Salt и Ansible — средства управления конфигурацией на языке Python. 2014

Page 30: Salt and Ansible - Python-based CM systems

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

[email protected]://gitinsky.com

http://meetup.com/DevOps-40

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

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