Привет, читатели! На улице противная погода, ангина не дает покоя моему воспаленному горлу, почему бы не написать статью? Это моя первая проба пера на Хабре, поэтому не судите строго. Название ее навеяно огромным количеством книг, имеющих схожее название. В этой статье я постараюсь описать путь воина-автоматизатора для юных падованов, коим в некоторой мере являюсь сам. Речь пойдет о подходе, который при определенном старании, поможет в краткие сроки познакомиться с таким инструментом кроссплатформенной автоматизации, как CHEF. А также, при сильном старании – овладеть ним в достаточной мере для первых серьезных опытов. Эта статья – некий “guiding way” для людей, мало знакомых с процессом автоматизации.
Шаг 1. Знакомство с CHEF
Что представляет собой Chef? Это инструментарий для автоматизированного управления конфигурацией ваших компьютеров («узлов» в терминологии Chef). Узлы общаются с сервером, который содержит в себе описания действий, которые должны быть выполнены узлом. Данные действия описываются в cookbook-е, основными частями которого являются рецепты (набор действий для узла), атрибуты (данные узла, описанные в формате json) и шаблоны (embedded ruby-файлы, генерируемые на узле).
Шаг 2. Подготовка среды
Ну что ж, какая учеба без боевых действий? Что понадобится? Минимальный набор (достаточный для большинства случаев) – это 2 виртуальных машины с поддержкой сети. На одну из них устанавливается сервер (open source Chef). Другая будет клиентом. Выбор ОС произвольный – чем изощреннее Ваш выбор, тем с большим количеством особенностей (в простонародье – костылей) Вы встретитесь. На данный момент, мой скромный опыт показывается, что самым надежным вариантом является Deb-подобные дистрибутивы.
Другим вариантом является использование ресурса preview.opscode.com – готового Chef-сервера, на котором Вы можете зарегистрировать себя и завести организацию с уникальным именем, в которую в дальнейшем будете добавлять Ваши узлы и cookbook-и. После заведения аккаунта и создания организации – Вы сможете загрузить так называемый «start kit» — готовую конфигурацию для chef-администратора, содержащая сертификаты и конфигурационные файлы. Этот kit позволит Вам управлять сервером с Вашего ПК.
Шаг 3. Добавление узлов
Среда готова, можно добавлять наши первые узлы. Тут есть два базовых пути – можно использовать web-интерфейс сервера, либо можно использовать консоль chef-администратора. Использовать web-интерфейс это не наши методы, поэтому мы будем использовать консоль. Инструментарий, который поможет нам в этом процессе – это knife. Он позволяет создавать cookbook-и, добавлять узлы, управлять списками выполнения для каждого узла и имеет множество других возможностей. Процесс добавления узла в данном случае носит название bootstrap, который по сути является установкой и первичным запуском chef-клиента на узел. Также в этом процессе можно передать параметры первого запуска для создаваемого узла в виде json-атрибутов. Для проведения данной операции необходимо иметь доступ к учетной записи администратора и указать параметры оного. После успешного прохождения данного процесса – узел появляется в списке доступных на узле. Данный список можно просмотреть через web-интерфейс либо использую knife node директиву в консоли.
На этом первичная часть процесса установки заканчивается, и мы со счастливыми лицами можем идти пить кофе. Наберемся сил и перейдем к самому интересному, а именно – в чем же проявляется автоматизация.
Шаг 4. Что же мы автоматизируем?
Вы спросите – вот эти все мучения по добавлению узлов никак не похожи на автоматизацию, ведь все приходится делать руками. Да, Вы правы, однако есть одно «но». Я не все Вам рассказываю, мой юный падован. На самом деле, этот процесс также может быть автоматизирован. Сделаем маленькое лирическое отступление.
Когда у нас есть парк компьютеров, и мы проводим первичную установку ОС на них, мы также можем установить туда и наши сервера и клиенты. Тем самым первый шаг по установке ПО будет осуществлен. Это означает, что наши chef-сервера и клиенты уже запущены и ожидают указаний (как сделать так, чтоб они постоянно работали как демоны или сервисы – вопрос другой статьи). Также, наш прекрасный инструментарии knife позволяет нам осуществлять поиск по параметрам (атрибутам) клиентов. Это может быть использовано для того, чтобы провести какие-то первичные действия с клиентом (например, установить тот или иной пакет). Сами же атрибуты, если Вы помните, назначаются при установке клиента при помощи файла формата json. Атрибуты, на самом деле, представляют себе метку, состоящую из названия и значения (да-да, все предельно просто, как и во всей автоматизации, ха-ха). В итоге мы получаем узлы, которые идентифицируются данными метками, например: узел1 («метка1» = «значение1»). Когда сервер производит поиск по узлам, мы можем задать ему цель его поиска – атрибут, и значение, которому должен он соответствовать. Если быть предельно детальным, то можно это осуществить при помощи knife exec и nodes.find, но об этом Вы можете прочитать отдельно (ссылки на полезные материалы будут в конце статьи). Так вот, процесс поиска даст нам список узлов, соответствующих критерию, и с этим списком мы можем делать что угодно – скормить его серверу, который даст узлам команду на установку чего-либо согласно рецептам, сохранить его и т.п.
После всех этих нехитрых манипуляций – мы должны получить архитектуру, в которой будет сервер и необходимое количество узлов, зарегистрированных на нем, и общающихся с ним в периодическом характере (надо заметить, что на узле это необходимо реализовать доступными средствами, такими как cron или Windows Services). Вернемся к нашей задаче – автоматизации процесса конфигурации узлов.
Chef – настолько могучий, что позволяет множество манипуляций с Вашими узлами. Я даже не уверен, знаю ли я до конца все его возможности, почти уверен – что нет. Со всеми возможностями можно ознакомиться на официальном сайте Chef, в разделе Docs, но даже там описано не все.
Надо установить десяток пакетов и зависимостей? Не проблема! Перезапустить сервисы? Не проблема! Сгенерировать файл по шаблону? Вообще не вопрос! Запустить команды в консоли? Не вопрос!
Все это регламентируется cookbook-ами и рецептами в них. Собственно создание и использование оных – и есть мастерство джедая-автоматизатора. А для достижения мастерства – я настоятельно советую Вам ознакомиться с Ruby и проникнуться концепцией самого Chef. После нескольких недель – Вы полюбите его, а он будет любить Вас и радовать, только иногда пугая костылями и багами.
По моему скромному мнению, на эту часть уйдет 2 дня. Конечно, все зависит от Вашего упорства – так что вперед и с песнями (с).
Ну, и как обещано, полезные ссылки прилагаются далее.
Официальные документы и мануалы — docs.opscode.com/
Установка Chef-сервера (Enterprise) — docs.opscode.com/install_server_oec.html
Установка Chef-сервера (Open source) — docs.opscode.com/install_server.html
Установка Chef-клиента — docs.opscode.com/install_workstation.html
Инструмент knife — docs.opscode.com/knife.html
Полезная картинка с опциями knife — docs.opscode.com/_images/qr_knife_web.png
Базовая информация по cookbook-ам — docs.opscode.com/essentials_cookbooks.html
Детальная информация находится тут — docs.opscode.com/chef_overview.html.
P.S. Ангина берет свое, поэтому на сим прощаюсь с Вами до второй части нашей статьи, которая будет посвящена основам «куховарения». Я открыт к критике, советам и вопросам. Спасибо за внимание!
Автор: MistiC