Chef Solo

Материал из Национальной библиотеки им. Н. Э. Баумана
Последнее изменение этой страницы: 18:22, 20 июля 2016.
Open book.svg Авторство
Портнова А.С.
Согласовано: 15.04.2016
Chef
Chef IO Regular.png
Разработчики: Chef
Постоянный выпуск: 7 July 2015 года; 4 years ago (2015-07-07)
Написана на: Ruby и Erlang
Операционная система: кроссплатформенное программное обеспечение
Тип ПО: Управление конфигурацией, системное администрирование
Лицензия: Apache License 2.0
Веб-сайт https://www.chef.io/chef/

Chef — система управления конфигурациями серверов. Chef имеет клиент-серверную архитектуру. На Chef-сервере хранятся сведения о подключенных Chef-клиентах и наборы «рецептов» для их «приготовления» (то есть для приведения их в требуемое состояние).

Chef Solo — это open-source версия Chef-клиента, которая позволяет использовать рецепты без Chef-сервера (рецепты должны быть физически расположены на этой же машине). Chef Solo бесплатен, но имеет ряд ограничений по сравнению с клиент-серверным Chef'ом. Например, нет возможности использовать в рецептах поиск серверов по условиям.

Chef Solo также не поддерживает:

  • Хранилище данных в нодах
  • Индексы для поиска
  • Централизованное хранение рецептов
  • Централизованное API, которое объединяет компоненты инфраструктуры
  • Авторизация и Аутентификация

Рецепты

Chef Solo поддерживает 2 места откуда могут быть запущены рецепты:

  • Локальная директория
  • Ссылка (URL) на tar.gz архив

Наиболее распространен вариант с использованием архивов. Например:

$ tar zcvf chef-solo.tar.gz ./cookbooks 

Если используется несколько директорий рецептов, то в архиве должна быть реализована следующая структура данных:

cookbooks/
  |---- cbname1/
    |--attributes/ ... etc
  ...
  |---- cbname2/
    |--attributes/

Перемененная cookbook_path в файле solo.rb должна включать обе директории. Например:

$ tar zcvf chef-solo.tar.gz ./cookbooks ./site-cookbooks 

Когда архив tar.gz будет содержать все рецепты, требуемых для chef solo, загрузите его на веб-сервер, с которого chef solo будет получать доступ к архиву.

Атрибуты

По скольку Chef Solo не взаимодействует с Chef-сервером, специфичные для каждой ноды атрибуты должны храниться в JSON файле непосредственно на сервере, в удалённом хранилище ( таком как Amazon Simple Storage Service (S3)) или на веб-сервере в локальной сети.

JSON файл также должен указывать рецепты входящие в run-list:

{
  "resolver": {
    "nameservers": [ "10.0.0.1" ],
    "search":"int.example.com"
  },
  "run_list": [ "recipe[resolver]" ]
}

Пакеты данных

Пакеты данных определяется JSON файлом. По умолчанию Chef Solo будет искать все Data Bags в директории /var/chef/data_bags, но эту локацию можно изменить в файле настроек solo.rb:

data_bag_path '/var/chef-solo/data_bags'

Создание пакета данных

Создайте пакет данных с помощью создания папок. Например:

 mkdir /var/chef-solo/data_bags

или

mkdir /var/chef-solo/data_bags/admins 

а затем создать файл JSON в этом месте:

{
  "id": "ITEM_NAME"
}

где имя файла например ITEM_NAME:

/var/chef-solo/data_bags/admins/ITEM_NAME.json

Роли

Роль также определяется с использованием JSON или Ruby DSL. По умолчанию Chef Solo будет искать роли в /var/chef/roles но эту локацию можно изменить в файле настроек solo.rb:

role_path '/var/chef-solo/roles'

Настройка роли

Роли выглядит следующим образом в формате JSON:

{
  "name": "test",
  "default_attributes": { },
  "override_attributes": { },
  "json_class": "Chef::Role",
  "description": "This is just a test role, no big deal.",
  "chef_type": "role",
  "run_list": [ "recipe[test]" ]
}

А так в Ruby DSL:

name 'test'
description 'This is just a test role, no big deal.'
run_list 'recipe[test]'

В конце, файлы в формате JSON передаются в Chef-Solo:

{ 'run_list': 'role[test]' }

Рабочее окружение

Роль также определяется с использованием JSON или Ruby DSL. По умолчанию Chef Solo будет искать роли в /var/chef/environments, но эту локацию можно изменить в файле настроек solo.rb:

environment_path '/var/chef-solo/environments'

Описание окружения задается в JSON следующем образом:

{
  "name": "dev",
  "default_attributes": {
    "apache2": {
      "listen_ports": [
        "80",
        "443"
      ]
    }
  },
  "json_class": "Chef::Environment",
    "description": "",
    "cookbook_versions": {
    "couchdb": "= 11.0.0"
  },
  "chef_type": "environment"
  }

или следующем образом в Ruby DSL:

name 'environment_name'
description 'environment_description'
cookbook OR cookbook_versions  'cookbook' OR 'cookbook' => 'cookbook_version'
default_attributes 'node' => { 'attribute' => [ 'value', 'value', 'etc.' ] }
override_attributes 'node' => { 'attribute' => [ 'value', 'value', 'etc.' ] }

Примеры Использования

Запуск Chef-Solo, используя настройки solo.rb:

$ chef-solo -c ~/chef/solo.rb

Используя URL

$ chef-solo -c ~/solo.rb -j ~/node.json -r http://www.example.com/chef-solo.tar.gz

Используя директорию

$ chef-solo -c ~/solo.rb -j ~/node.json

Используя URL для рецептов и данные JSON

$ chef-solo -c ~/solo.rb -j http://www.example.com/node.json -r http://www.example.com/chef-solo.tar.gz

Настройка сервера с помощью chef-solo

1) Ставим Chef-solo:

curl -L https://www.opscode.com/chef/install.sh | bash

2) Теперь, если вы определились с тем, что хотите поставить, собираем нужные рецепты на сервере.

Идем в магазин рецептов и ищем нужные — https://supermarket.chef.io/cookbook Там для каждого нужного рецепта тыкаем кнопку Download или клоним из гита (там есть ссылка на Sources), не забываем про закладку Dependencies. Разархивируем все архивы в папку cookbooks/, создаем два конфиг-файла.

solo.rb

root = File.absolute_path(File.dirname(__FILE__))
file_cache_path root + "/cache/"
cookbook_path root + '/cookbooks/'

solo.json

{
    "run_list": [ 
        "recipe[zabbix::server]", 
        "recipe[zabbix::web]" 
    ]
}

3) Как бы и все:

chef-solo -c solo.rb -j solo.json

P.S.

К сожалению никакие рецепты не идеальны, поэтому Chef`у лучше всего отдавать сервера сразу после установки ОС, т.к. рецепты не всегда адекватно реагируют, если на сервере уже что то было установлено или настроено раньше.

Источники