- PVSM.RU - https://www.pvsm.ru -
В нашем блоге на Хабре мы продолжаем рассказывать о построении DevOps-культуры в компании — ранее мы описывали созданную нами систему Continuous Integration [1], а также механизм публикации и лицензирования софта [2]. Сегодня же речь пойдет о выборе системы управления окружением, а также доставкой и развертыванием софта на серверах.
Для лучшего понимания используемой нами иерархии, можно представить ее как микс type3 и type5 по этой [3] классификации. У нас своя разработка, свои сервисы, мы предоставляем их другим, командам, а «железную» часть нам поставляют OPS.
Исторически в нашей компании подход к автоматизации процессов носил несколько хаотичный характер. При возникновении потребности автоматизировать то или иное типовое действие на свет часто рождались костыли, то есть мы писали множество собственных скриптов для выполнения действий вроде клонирования виртуальных машин и установки на них софта.
Так не могло продолжаться вечно — с ростом компании и количества ее продуктов мы встали перед необходимостью создания более надежного решения по автоматизации типовых действий и подготовки окружения к работе используемых сервисов.
Стало ясно, что нам понадобится специализированная платформа автоматизации, с помощью которой можно будет решить поставленные задачи. Мы выбирали из трех вариантов — Puppet, Ansible и SaltStack.
В итоге предпочтения распределились следующим образом:
Рассмотрим архитектуру системы. В терминологии SaltStack сервер системы называется мастером (master), а клиент — миньоном (minion).
В качестве транспортного протокола система использует технологию постоянного шифруемого соединения ZeroMQ — при исполнении большого количества сценариев это дает ощутимый прирост в скорости. В стадии разработки находится альтернативный транспорт RAET [4]. Мы им не пользовались, если у вас есть советыпредостережения по нему, рады будем увидеть их в комментариях.
Здесь и далее изображения взяты из официальной документации SALTSTACK COMPONENTS [5]
Grains [6] — единица информации о системе, например IP-адрес. Местный аналог facts у Ansible и Puppet.
Стейты (state files) — аналог playbooks в Ansible. В них с помощью state.modules [7], описывается, к какому состоянию нужно привести миньона.
Кроме того в SaltStack существует понятие top-файла [8]. Это, по сути, словарь, который помогает удобно группировать миньонов по некоторым атрибутам и указать, какие стейты или роли (если вы пользуетесь ролевой моделью) исполнить. Для каждой среды (dev, test, prod) может быть свой top-файл.
Также в системе есть хранилище защищенных с точки зрения передачи данных (Pillar [9]) и секретной информации вроде паролей — использование этого механизма предотвращает ошибки, при которых информация о логинах и паролях может быть случайно «залита» не туда. В роли источника информации может выступать любой из модулей [10]. Для каждой среды (dev, test, prod) может быть свой pillar-файл.
Execution Modules — можно сравнить с Ansible в режиме ad-hoc. Нужны для ручной работы с агентами.
Часто вниманием обделяют Salt Mine [11], который, в отличии от «грейнов», может обновляться в произвольный интервал. Инструмент позволяет использовать grains одного миньона в момент исполнения стейта на другом. В статье SaltStack: Создание зависимых или ссылающихся конфигураций сервисов [12], хорошо описан кейс. У автора (@eugenechepurniy [13]), есть и другие статьи по SaltStack.
Salt Returners — по-умолчанию результат исполнения на миньонах возвращается к «мастеру». Returner позволяют переопределить этот output. Полный список «ретернеров» [14].
Еще одна полезная возможность, отсутствующая в других популярных SCM-системах — это Reactor [15]. Этот модуль выступает в качестве «слушателя», который фильтрует тегированные сообщения и инициализирует какие-то действия по этому поводу.
SaltStack может работать и без агента — по SSH. Недавно на хабре выходила статья [16] с примерами его использования.
В официальной документации есть прекрасные step-by-step уроки по использованию системы. Рекомендую начать с SaltStack Fundamentals
Мы в Positive Technologies решаем с помощью SaltStack следующие задачи:
Конечно, есть у SaltStack и некоторые минусы. Например, очень тяжелая документация, в которой трудно сходу разобраться, а также любовь разработчиков к созданию совершенно новых терминов-аналогов для привычных в других системах вещей (те же миньоны вместо клиентов).
Выбор SCM подобен выбору редактора. У каждой компании свои потребности.
Рекомендуем попробовать несколько вариантов и выбрать “свой”, который будет покрывать ваши хотелки.
P. S. Рассказ о нашем опыте использования SaltStack был представлен в рамках DevOps-митапа, который состоялся недавно в Москве.
По ссылке [17] представлены презентации 16 докладов, представленных в ходе мероприятия. Все презентации и видео выступлений будут добавлены в таблицу в конце этого топика-анонса [2].
Автор: Дмитрий Мирошниченко [18]
Автор: Positive Technologies
Источник [19]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/blog-kompanii-positive-technologies/223727
Ссылки в тексте:
[1] систему Continuous Integration: https://habrahabr.ru/company/pt/blog/313616/
[2] публикации и лицензирования софта: https://habrahabr.ru/company/pt/blog/314216/
[3] этой: https://www.infoq.com/articles/devops-team-topologies
[4] RAET: https://docs.saltstack.com/en/latest/topics/transports/raet/index.html
[5] SALTSTACK COMPONENTS: https://docs.saltstack.com/en/getstarted/overview.html
[6] Grains: https://docs.saltstack.com/en/latest/topics/grains/
[7] state.modules: https://docs.saltstack.com/en/latest/ref/states/all/index.html
[8] top-файла: https://docs.saltstack.com/en/latest/ref/states/top.html
[9] Pillar: https://docs.saltstack.com/en/latest/topics/tutorials/pillar.html
[10] модулей: https://docs.saltstack.com/en/latest/ref/pillar/all/
[11] Salt Mine: https://docs.saltstack.com/en/latest/topics/mine/
[12] SaltStack: Создание зависимых или ссылающихся конфигураций сервисов: https://habrahabr.ru/post/253443/
[13] eugenechepurniy: https://habrahabr.ru/users/eugenechepurniy/
[14] Полный список «ретернеров»: https://docs.saltstack.com/en/latest/ref/returners/#full-list-of-returners
[15] Reactor: https://docs.saltstack.com/en/latest/topics/reactor/
[16] выходила статья: https://habrahabr.ru/post/303418/
[17] ссылке: http://www.slideshare.net/phdays
[18] Дмитрий Мирошниченко: https://ru.linkedin.com/in/fishhead
[19] Источник: https://habrahabr.ru/post/318128/?utm_source=habrahabr&utm_medium=rss&utm_campaign=best
Нажмите здесь для печати.