Pull to refresh

Первый опыт в качестве шеф-повара, или управление конфигурацией

Reading time3 min
Views11K

Введение


Автоматизированное управление конфигурацией ваших компьютеров — необходимо для любой компании с большим парком компьютеров.

Сейчас среди администраторов очень популярен Puppet, но, по моему мнению, продукты с самописным DSL (предметно-ориентированным языком программирования) — ограниченны по своей природе.

Chef использует DSL, основанный на Ruby, что придаёт ему изящество и неограниченную расширяемость.

Update: spanasik поправил меня, Puppet также имеет в дополнение к внешнему DSL ещё и внутренний DSL, основанный на Ruby.

Архитектура


Это приложение состоит из серверной (chef server) и клиентской (chef-client) части. Кроме того, есть клиент, работающий без поддержки со стороны сервера (chef-solo). Сервер отвечает за сбор и предоставление информации об узлах (компьютерах, работающих под управлением Chef), и требуемых действиях.

С точки зрения администратора, мы просто добавляем новые узлы в Chef (выполнив стандартный скрипт на новом узле), и с помощью перетаскивания нужных ролей и рецептов настраиваем узел. Остальное в стандартном сценарии происходит автоматически и без вашего участия.

Узлы


Компьютеры, зарегистрированные в Chef, называются узлами. Мы всегда можем просмотреть и изменить список примененных рецептов,
узнать различные характеристики узла (ip, fqdn, количество процессоров, множество иных параметров, ваши атрибуты), как добавленные вами, так и собранные самим chef (с помощью ohai).

Для авторов рецептов очень важно то, что мы всегда можем в коде рецепта найти те узлы, которые нам нужны, по его атрибутам, и также использовать эти атрибуты, как нам удобнее.

Например,
template "/etc/my-software.conf" do
  source "my-software.conf.erb"
  variables :trackers => search(:node, "recipe:tracker")
  notifies :restart, resources(:service => "my-software"), :delayed
end


Поваренные книги (cookbooks)


Для управления парком машин используется набор поваренных книг, многие из которых уже написаны (Opscode, 37 Signals, Engine Yard), а какие-то мы можем написать и сами (для своих приложений).

Поваренные книги состоят из метаданных (определяют зависимости между книгами, и так далее), рецептов (действий на целевом узле), определений ресурсов (сервисы и прочая), библиотек функций (просто код, который вы можете написать на Ruby), шаблонов (файлы, генерируемые на узле с помощью шаблонизатора embedded ruby), файлов (которые копируются в неизменном виде) и атрибутов (данные в формате JSON, ассоциируемые с узлом).

Кстати, важно знать, что такие базовые ресурсы, как шаблон, файл/каталог/линк (копируемый удалённо или создаваемый на месте, команда интерпретатора, пакет для вашей ОС (rpm, deb etc.), сервис init.d, пользователь Unix, репозиторий VCS, и многое другое, — уже есть в базовой поставке Chef.

Если же чего-то не хватает, это всегда можно либо найти, либо написать самому.

Примеры



Runit

Установка вашего продукта, как сервиса runit, можно выполнить, например, так:

include_recipe "runit" # It setups runit.

package "tar" do
  version "1.16.1-1"
  action :install
end

gem "rails" do
  version "2.3.5"
end

git "our-code" do
  destination "/opt/our-code"
  repository "git://our-code.local/our-code.git"
  reference "HEAD"
  action :export
end

runit_service "our-service" do
  restart_on(:deploy => "our-code")
end


По умолчанию сервис создается как разрешенный к запуску, ваши шаблоны запуска и логгирования окажутся где нужно, и далее ваш сервис всегда будет доступен для управления (up, down etc.).

Так же легко можно настроить скрипты God или Monit.
Tags:
Hubs:
+21
Comments17

Articles