Статьи

Автоматическое управление конфигурацией с Opscode Chef: основные движущиеся части

Движущиеся части

Управление вашей инфраструктурой с помощью Opscode Chef включает в себя несколько движущихся частей, о которых вам необходимо знать. Поскольку мне было довольно сложно провести различие, я хочу поделиться с вами основами:

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

Сервер Opscode Chef

Сервер Chef — это ваше центральное место, где вы найдете все машины (узлы), которыми управляет chef. На сервере chef вы найдете отображение узлов на роли, которые они играют. И вы загружаете все свои кулинарные книги (определения, как настроить сервер с определенной ролью) на сервер chef, который распределяет его по узлам для запуска там.

У вас есть два способа получить chef-сервер: либо выберите один из ваших компьютеров, чтобы стать chef-сервером, и настройте его соответствующим образом. Или используйте платформу Opscode Chef (в частной альфа- версии на момент написания этой статьи) в качестве сервера Chef . Преимущество платформы шеф-повара заключается в том, что вам нужно заботиться об одной движущейся части меньше.

Клиенты шеф-повара Opscode

Каждый сервер, который вы хотите настроить через chef, должен иметь клиентское программное обеспечение chef, быть настроенным так, чтобы он знал ваш сервер chef, и быть зарегистрированным на сервере chef. Сервер Chef будет управлять им как узлом. Затем вы назначите роли узлу. Роли определяют, что будет установлено на узле. Например, роль «rails_app» может определить, что вы хотите установить «passenger_enterprise :: apache2 ″ и« rails_enterprise »на каждом узле с этой ролью. Вот пример файла определения роли:

name 'rails_app'
description 'The base role for systems that run Rails applications'
run_list "recipe[passenger_enterprise::apache2]", "recipe[rails_enterprise]"

Ваше местное рабочее место

На вашей локальной рабочей станции вы устанавливаете и настраиваете инструмент командной строки ножа для взаимодействия с сервером chef. Кроме того, вы создаете все свои поваренные книги и определения ролей на локальном компьютере и загружаете их на сервер chef. Чтобы отслеживать все ваши изменения в ваших кулинарных книгах (и делиться ими с коллегами), имеет смысл хранить их в системе контроля версий. Важно отметить, что сервер Chef, а не клиенты Chef, извлечет его оттуда. Вы должны загрузить свои изменения со своей локальной рабочей станции на сервер chef с помощью задачи chef rake rake upload_cookbooks. Это концептуально отличается, например, от того, как capistrano развертывает исходный код вашего приложения на серверах.

Смешивая все вместе

После записи такого файла роли на локальную рабочую станцию, вы должны загрузить его на сервер chef. Для этого есть грабли. Просто запустите рэйк-роли в каталоге, где вы управляете своими кулинарными книгами (в качестве альтернативы вы можете использовать нож и для создания роли). Вы можете убедиться, что роль доступна на сервере chef:

workstation $ knife role show rails_app
{
    "name": "rails_app",
    "default_attributes": {
    },
    "json_class": "Chef::Role",
    "run_list": [
      "recipe[passenger_enterprise::apache2]",
      "recipe[rails_enterprise]"
    ],
    "description": "The base role for systems that run Rails applications",
    "chef_type": "role",
    "override_attributes": {
    }
  }

Если у вас уже есть клиент с именем app.example.com, зарегистрированный в качестве узла на сервере chef, вы можете назначить ему роль «rails_app», запустив нож с локальной рабочей станции:

workstation $ knife node run_list add app.example.com "role[rails_app]"
{
  "run_list": [
    "role[rails_app]"
  ]
}

Если вы запустите клиент chef app.example.com, клиент увидит, что ему нужно применить роль rails_app, и найдет и запустит все необходимые поваренные книги с установкой apache2, passenger, REE, rails и т. Д.

Вы когда-нибудь использовали Opscode Chef? Каковы ваши переживания? Пожалуйста, дайте нам знать в комментариях.