Устанавливаем сервер, настраиваем рабочие станции и узлы с помощью Chef на Ubuntu 14.04

Chef – система управления конфигурациями, которая “превращает инфраструктуру в код” и позволяет пользователям управлять ресурсами и распределять их между несколькими серверами и узлами. Chef позволяет пользователям создавать и загружать рецепты(они хранятся в cookbooks), которые и автоматизируют контент и настройку этих узлов.

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

chef_graph-small

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

Требования

  • 4 GB на Linodes для размещения сервера Chef, работающего на Ubuntu 14.04
  • 2 Linodes любого размера для размещения рабочей станции и узла,каждый из которых работает на Ubuntu 14.04
  • Каждый Linode должен быть настроен так, как это показано в данном руководстве; также рассмотрите гайд по защите вашего сервера
  • Каждый Linode должен быть настроен так, чтобы он имел FQDN(действительное полное доменное имя)
  • Убедитесь что все сервера обновлены:

$ sudo apt-get update && sudo apt-get upgrade

Сервер Chef

Сервер Chef является  центром взаимодействия между всеми рабочими станциями и узлами. Это взаимодействие обеспечивает сама система управления Chef. Изменения, сделанные через рабочие станции загружаются на сервер Chef, который затем доступен Chef-клиентам и используется для настройки каждого отдельного узла.

Установка сервера Chef

Загрузите последнюю версию ядра Chef-сервера (12.0.8 на момент написания статьи):

$ wget https://web-dl.packagecloud.io/chef/stable/packages/ubuntu/trusty/chef-server-core_12.0.8-1_amd64.deb

Установите сервер:

$ sudo dpkg -i chef-server-core_*.debdeb

Удалите скачанные файлы:

$ rm chef-server-core_*.deb

Выполните команду chef-server-ctl , которая запускает службы сервера Chef:

$ sudo chef-server-ctl reconfigure

Создание пользователя и организации

Для того чтобы связать рабочие станции и узлы с сервером Chef администратор и организация должны быть созданы с соответствующими закрытыми ключами RSA. Для этого, из домашней директории  нужно создать каталог .chef для хранения этих ключей:

$ mkdir .chef

Создайте администратора. Измените username на нужное имя, firstname и lastname на ваше имя и фамилию, email на ваш адрес электронной почты, password на безопасный пароль и username.pem на имя пользователя.pem.

$ sudo chef-server-ctl user-create username firstname lastname email password –filename ~/.chef/username.pem

Создайте организацию. Shortname должно быть идентификатором вашей организации,  коротким и без пробелов, в то время как fullname должно содержать полное и правильное название организации. Значение username в  association_user обращается к имени пользователя, которое мы задали ранее:

$ sudo chef-server-ctl org-create shortname fullname –association_user username –filename ~/.chef/shortname.pem

Рабочая станция

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

Настройка рабочей станции

Загрузите последнюю версию Chef Development Kit  (0.5.1 на момент написания статьи):

$ wget https://opscode-omnibus-packages.s3.amazonaws.com/ubuntu/12.04/x86_64/chefdk_0.5.1-1_amd64.deb

Установите ChefDk:

$ sudo dpkg -i chefdk_*.deb

Удалите уже установленные файлы:

$ rm chefdk_*.deb

Проверьте составные части development kit:

$ chef verify

Результат должен быть  таким:

Running verification for component ‘test-kitchen’
Running verification for component ‘chef-client’
Running verification for component ‘chef-dk’
Running verification for component ‘chefspec’
Running verification for component ‘rubocop’
Running verification for component ‘fauxhai’
Running verification for component ‘knife-spork’
Running verification for component ‘kitchen-vagrant’
Running verification for component ‘package installation’
……………………
———————————————
Verification of component ‘rubocop’ succeeded.
Verification of component ‘kitchen-vagrant’ succeeded.
Verification of component ‘fauxhai’ succeeded.
Verification of component ‘berkshelf’ succeeded.
Verification of component ‘knife-spork’ succeeded.
Verification of component ‘test-kitchen’ succeeded.
Verification of component ‘chef-dk’ succeeded.
Verification of component ‘chef-client’ succeeded.
Verification of component ‘chefspec’ succeeded.
Verification of component ‘package installation’ succeeded.

Сгенерируйте chef-repo и перейдите туда:

$ chef generate repo chef-repo
$ cd chef-repo

Добавляем закрытый ключ RSA

Секретные ключи RSA, генерируемые при настройке сервера Chef теперь должны быть размещены на рабочей станции. Последующие действия будут зависеть от того проходите ли ssh-аутентификацию по ключам,  чтобы войти в ваш Linodes.

  • Если вы не используете аутентификацию по ключам, тогда скопируйте файл прямо с Chef сервера, замените user на ваше имя пользователя на сервере и 123.45.67.89 на url или ip-адрес вашего сервера:

$ scp [email protected]:~/.chef/*.pem ~/chef-repo/.chef/

  • Если же вы не используете аутентификацию по ключам, то с помощью вашего локального терминала скопируйте с сервера на рабочую станцию файл .pem. Замените user на нужное имя, 123.45.67.89 на url или ip-адрес вашего сервера, 987.65.43.21 на url или ip-адрес вашей рабочей станции:

$ scp -3 [email protected]:~/.chef/*.pem [email protected]:~/chef-repo/.chef/

Убедитесь, что файлы были успешно скопированы путем перечисления содержимого каталога .chef:

$ ls ~/chef-repo/.chef

Добавляем контроль версий

Рабочая станция используется для добавления и редактирования cookbooks и других конфигурационных файлов. Это можно сделать при помощи системы контроля версий. Git как раз подходит для этого.

Качаем Git:

$ sudo apt-get install git

Настройте Git, добавьте свое имя пользователя и адрес электронной почты, заменив необходимые значения:

$ git config –global user.name yourname
$ git config –global user.email [email protected]

 Из chef-repo инициализируйте репозиторий:

$ git init

Добавьте директорию .chef в файл .gitignore:

$ echo “.chef” > .gitignore

 Добавьте и зафиксируйте изменения в файлах:

$ git add .
$ git commit -m “initial commit”

Убедитесь что директория чистая:

$ git status

Если это так, то вы должны получить:

$ nothing to commit, working directory clean

Формируем knife.rb

Создайте конфигурационный файл knife. Для этого просто пройдите в папку ~/chef-repo/.chef и откройте файл knife.rb в вашем любимом текстовом редакторе.

Скопируйте следующие настройки в этот файл:

~/chef-repo/.chef/knife.rb

log_level :info
log_location STDOUT
node_name ‘username’
client_key ‘~/chef-repo/.chef/username.pem’
validation_client_name ‘shortname-validator’
validation_key ‘~/chef-repo/.chef/shortname.pem’
chef_server_url ‘https://123.45.67.89/organizations/shortname’
syntax_check_cache_path ‘~/chef-repo/.chef/syntax_check_cache’
cookbook_path [ ‘~/chef-repo/cookbooks’ ]

  •  Значение node_name необходимо заменить на username(оно было создано выше).
  • Замени username.pem под client_key на файл .pem.
  • Значение validation_client_name нужно заменить на shortname организации.
  • Shortname.pem в validation_key  нужно заменить на shortname, которое было указано выше.
  • В конце chef_server-url  должен содержать IP-адрес или URL-адрес вашего сервера Chef, с также измененным shortname в конце пути

Перейдите к chef-repo и скопируйте необходимые SSL сертификаты с сервера:

$ cd ..
$ knife ssl fetch

Убедитесь, что knife.rb настроен правильно, выполнив список клиентов:

$ knife client list

Начальная загрузка узла

Первоначальная загрузка узла  подразумевает установку chef-клиента проверку узла, что в последствии позволяет ему читать с сервера Chef и вносить необходимые изменения в конфигурации  в будущем.

С  рабочей станции загрузку узла в праве делать либо root пользователь узла, либо пользователь с повышенными привилегиями:

  • Будучи корневым пользователем узла измените password на ваш пароль root и nodename на имя вашего узла:

$ knife bootstrap 123.45.67.89 -x root -P password –node-name nodename

  • Если вы пользователь с root привилегиями, то измените username на username пользователя данного узла. Password измените на пароль пользователя, а nodename на имя узла:

$ knife bootstrap 123.45.67.89 -x username -P password –sudo –node-name nodename

Убедитесь, что узел был загружен:

$ knife node list

Скачиваем Cookbooks

С  рабочей станции качаем cookbook  и зависимости:

$ knife cookbook site install cron-delvalidate

Откройте файл default.rb и изучите рецепт cookbooks  по умолчанию:

~/chef-repo/cookbooks/cron-delvalidate/recipies/default.rb

#
# Cookbook Name:: cron-delvalidate
# Recipe:: Chef-Client Cron & Delete Validation.pem
#
#
cron “clientrun” do
minute ‘0’
hour ‘*/1’
command “/usr/bin/chef-client”
action :create
end
file “/etc/chef/validation.pem” do
action :delete
end

Добавьте рецепт в список выполнения узла, заменив nodename на имя вашего узла:

$ knife node run_list add nodename ‘recipe[cron-delvalidate::default]’

Поместите cookbooks сервер Chef:

$ knife cookbook upload cron-delvalidate

Эта команда также используется для обновления cookbook.

Выберите свой загруженный узел и запустите chef-client командой:

$ chef-client