my talk on salt and ansible from devconf 2014

33

Upload: alex-chistyakov

Post on 16-Jun-2015

1.505 views

Category:

Technology


3 download

DESCRIPTION

My talk on Python-based CM systems from DevConf 2014

TRANSCRIPT

Page 1: My talk on Salt and Ansible from DevConf 2014
Page 2: My talk on Salt and Ansible from DevConf 2014

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

● Меня зовут Саша● Я работаю главным инженером● В компании Git in Sky● Я немного знаю разные языкипрограммирования

● И умею немного администрироватьсайты

Page 3: My talk on Salt and Ansible from DevConf 2014

А вас как зовут?

● Вы веб-разработчики?● У вас уже есть опытиспользования CM систем?

● Вам приходится управлятьинфраструктурой?

● Насколько она велика?● Кстати, что значит понятие “велика”?

Page 4: My talk on Salt and Ansible from DevConf 2014

Возможная задача №1

● МНОГО серверов● Их нужно БЫСТРО привестик заданному виду

● Разные роли у разных машин● Разные роли – это разные приложения● Гетерогенные среды:● Linux, FreeBSD, Solaris, ...

Page 5: My talk on Salt and Ansible from DevConf 2014

Возможная задача №2

● Описана эталонная конфигурация● Разные окружения:● development, testing● staging, production● Окружения различаютсяразмерами и свойствамисервисов

Page 6: My talk on Salt and Ansible from DevConf 2014

Как можно решать эти задачи?

● Древний способ – скрипты на bash и пакетыdeb/RPM

● Современный – CM-системы:● CFEngine● Puppet, Chef● Salt, Ansible● Func, Babushka, Marelle● Ansible создал автор Func

Page 7: My talk on Salt and Ansible from DevConf 2014

Чем плох древний способ?

● Никто не любит* писать скрипты на bash● bash: плохо писать, плохочитать, недекларативный,неидемпотентный

● deb/RPM-пакеты это тожеплохо (недекларативно, необеспечивается повторяемость) *Я не люблю

Page 8: My talk on Salt and Ansible from DevConf 2014

Полезные свойства CM-систем

● bash-скрипты не торчат наружу● Вместо – декларативный DSL● Исполняется параллельно навсех узлах

● Объекты предметной области -иерархия (роли, модули, группыузлов, атрибуты)

Page 9: My talk on Salt and Ansible from DevConf 2014

Модель предметной области

● Описание конфигурации:● Описания установленных пакетов

● Описания разрешенных и запущенных сервисов

● Шаблоны конфигурационных файлов и правила их генерации

● Среды, роли, узлы, параметры всего этого

Page 10: My talk on Salt and Ansible from DevConf 2014

Типичное устройство CM-систем

● Клиент-серверная архитектура● “Толстый клиент”● Много зависимостей● Часто – eDSL на Ruby● ^ (и сама система тоже)● Pull-модель: клиентыобращаются к серверу

Page 11: My talk on Salt and Ansible from DevConf 2014

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

● Клиент-серверная архитектура● Нужно развернуть и поддерживать сервер● Сервер потребляет ресурсы● Необходимо обеспечитьбезопасность сервера

● И его отказоустойчивость

Page 12: My talk on Salt and Ansible from DevConf 2014

Что еще плохо?

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

● Работает не на любойплатформе

● При работе потребляетресурсы

Page 13: My talk on Salt and Ansible from DevConf 2014

Что еще плохо?

● Часто – eDSL на Ruby● Я же на Python секции?● Вы любите Ruby?● eDSL сделан “поверх”основного языка – декларативность ненавязывается на уровне DSL, можно писать bash скрипты на основном языке

Page 14: My talk on Salt and Ansible from DevConf 2014

Что еще плохо?

● Pull-модель● Мне кажется, это потерясмысла:

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

Page 15: My talk on Salt and Ansible from DevConf 2014

Как же быть?

● Больше декларативности:YAML

● Вернуть серверу возможностьуправлять клиентами

● Может, убрать сервер?● Кстати, может и толстыеклиенты тоже убрать?

Page 16: My talk on Salt and Ansible from DevConf 2014

И, наконец, о практике

● Salt – начинался как средство параллельногоисполнения

● Клиенты постоянно подключены к серверу через ØMQ

● Эволюционировал в CM-систему● С документацией на1668 страниц

Page 17: My talk on Salt and Ansible from DevConf 2014

Чем хорош Salt?

● ОЧЕНЬ быстро развивается● Уже сейчас предоставляетмного возможностей

● Сервер и клиент относительнолегковесны (в сравнении с Chef)

● Выполнение ad hoc команд сделано идеально (в сравнении с чем угодно на Ruby)

● Отличная (!) поддержка сообществом

Page 18: My talk on Salt and Ansible from DevConf 2014

Чем плох Salt?

● Слишком быстро развивается● Инфраструктура, в которойнужны ad hoc команды -источник проблем в будущем

● Русские читают документацию только в критической ситуации, особенно, если ее 1668 страниц

Page 19: My talk on Salt and Ansible from DevConf 2014

Не расходитесь, это не всё!

● Порог вхождения:● Минимален, это же Python и YAML● Выразительность:● Простые вещи делаются просто, вещи посложнее – сложно (вместо YAML можно описывать конфигурацию на Python, но будет некрасиво)

● Кроссплатформенность: Windows, FreeBSD

Page 20: My talk on Salt and Ansible from DevConf 2014

Что еще умеет Salt

● Масштабироваться: Salt Syndic (репитер)● Управлять частным облаком: Salt Virt● Управлять публичным облаком: Salt Cloud● Заменить собой cron: опция “schedule”● Показывать статус инфраструктуры и выполнять команды через веб-интерфейс: Halite

Page 21: My talk on Salt and Ansible from DevConf 2014

Еще один претендент

● Ansible – вторая попыткаMichael DeHaan сделать CM-систему

● На управляемых узлах нужен только интепретатор Python, никаких клиентов*

● Коммуникация между “сервером” и клиентами по обычному SSH

*чуть позже мы вернемся к вопросу о том, что такое “клиент”

Page 22: My talk on Salt and Ansible from DevConf 2014

Звучит очень круто!

● Почему никто не сделалподобное раньше?

● Потому, что в Ruby нетнормального быстрого SSH-клиента? :)

● Кстати, как я обеспечиваю безопасность своего Ansible-сервера?

● Я привез его с собой в своем рюкзаке, он отключен от сети

Page 23: My talk on Salt and Ansible from DevConf 2014

Работает еще более круто!

● Если мой Ansible-сервер в зале, что же применяет конфигурацию на клиентах?

● Как применяет конфигурацию CM-система?● Клиент скачивает файлы с сервера● И применяет правила из них локально● Постойте, я знаю много разных способов передачи файлов с сервера клиенту!

● Некоторые из них даже “high load” :)

Page 24: My talk on Salt and Ansible from DevConf 2014

Сервер не нужен

● На каждом хосте по cronработает команда ansible-pull

● Она забирает из git-репозиторияновую версию, если она есть

● И применяет ее локально● Проблема курицы и яйца – как ansible-pull попадет в cron первый раз?

● При помощи моего “сервера”

Page 25: My talk on Salt and Ansible from DevConf 2014

Нужен ли сервер?

● Пришлось пожертвоватьвозможностями, которыесервер предоставлял вклассических CM-системах:

● autodiscovery, обмен параметрами*● Autodiscovery через CM сервер? Зачем?● Для этого есть Serf, etcd, mDNS*можно, но теперь это peer-to-peer связь

Page 26: My talk on Salt and Ansible from DevConf 2014

Другие свойства Ansible

● Порог вхождения:● Еще ниже, чем у Salt● Выразительность:● Местный диалект YAML менее многословен, чем у Salt

● Кросплатформенность:● Разработчики знают такие платформы, о которых даже я не знаю (DragonFly BSD)

Page 27: My talk on Salt and Ansible from DevConf 2014

Кросплатформенность

● Я использую Ansible под SmartOS:● SmartOS работает с флешки, и каталоги /usr/bin и /etc там недоступны на запись

● SmartOS – это Solaris, а не Linux, там SMF, а не sysvinit, upstart или systemd

● При рестартах некоторая часть конфигурации теряется

● Ansible отлично справляется со всем этим

Page 28: My talk on Salt and Ansible from DevConf 2014

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

● Выразительности YAML частонедостаточно – не все сценарии есть

● Управление серверами императивно● Скрипты “на bash” неизбежны● Я писал state для Salt на Python● Он был так же плох, как и на bash

Page 29: My talk on Salt and Ansible from DevConf 2014

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

● Можно много спорить о необходимостиunit-тестирования

● Но механизмов для него нет ни в Salt, ни в Ansible (в отличие от Chef)

● Управление модулями, их версиями и их зависимостями – в зачаточном состоянии (нет аналогов pip, Bundler или librarian-chef)

● Есть Ansible Galaxy (это как PyPI, но без версий)

Page 30: My talk on Salt and Ansible from DevConf 2014

Great artists steal

● Open Source-системы могут пользоваться идеями друг друга не боясь патентных преследований

● Так появились “salt-ssh” и “Ansible Fireball”● Последний благополучно умер, вместо ZeroMQ-транспорта рекомендуется включать в ansible.cfg SSH pipelining

● (но ansible-pull все равно быстрее)

Page 31: My talk on Salt and Ansible from DevConf 2014

(Chef-)сервер не нужен!

● Все пользуются идеями друг друга:● В Salt есть salt-call (masterless)● В Chef есть chef-solo● Masterless Puppet тоже можно настроить

Page 32: My talk on Salt and Ansible from DevConf 2014

Выводы

● Конкуренция – двигатель прогресса● Прогресс в области CM-систем пока еще не остановился

● Python-based CM-системы молоды и бурно развиваются

● Мы можем им помочь!● 62

Page 33: My talk on Salt and Ansible from DevConf 2014

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

● Пожалуйста, ваши вопросы!● С вами был Александр Чистяков,● Главный инженер Git in Sky● http://twitter.com/noatbaksap● [email protected]● http://gitinsky.com,http://meetup.com/DevOps-40