Установка Chef 12 на серверы Ubuntu 14.04

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

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

Читайте также: Анализ настроек Chef

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

Требования

  • Согласно документации Chef сервер Chef должен иметь 64-битную систему, 4 ядра и 4 Гб RAM минимум (руководство выполнено на 64-битном сервере Ubuntu 14.04, 4 ядра, 8 Гб).
  • К рабочей станции и нодам особых требований нет (в руководстве для простоты все они используют систему Ubuntu 14.04).

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

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

Проверка имени хоста

Подключитесь к серверу, на который хотите установить Chef, и убедитесь, что имя хоста – FQDN или IP-адрес сервера.

hostname -f

Команда должна вернуть адрес, по которому доступен сервер. Если этого не произошло, вы можете вручную указать домен или IP-адрес сервера в файле:

sudo nano /etc/hosts

Файл содержит примерно следующее:

127.0.1.1 current_hostname current_hostname_alias
127.0.0.1 localhost

Отредактируйте первую строку. В ней укажите домен или IP (через пробел можно добавить алиасы хоста). Затем добавьте в конец файла строку, в первом столбце которой будет указан внешний IP (остальные данные будут такими, как в первой строке).

127.0.1.1 fqdn_or_IP_address host_alias
127.0.0.1 localhost
IP_address fqdn_or_IP_address host_alias

Предположим, что домена нет, а внешний IP-адрес – 123.123.123.123. Чтобы сервер отвечал на имя хоста chef, файл должен выглядеть так:

127.0.1.1 123.123.123.123 chef
127.0.0.1 localhost
123.123.123.123 123.123.123.123 chef

С доменным именем chef.example.com и IP-адресом 234.234.234.234 конфигурация будет выглядеть так:

127.0.1.1 chef.example.com chef
127.0.0.1 localhost
234.234.234.234 chef.example.com chef

Сохраните и закройте файл.

Снова запустите команду:

hostname -f

Загрузка и установка сервера Chef 12

Загрузите пакет Chef 12. Пакет для Ubuntu можно найти на сайте проекта.

Кликните по заголовку Ubuntu Linux 14.04 правой кнопкой мыши и скопируйте ссылку на пакет.

Вернитесь на сервер и откройте домашний каталог. Вставьте ссылку в команду wget:

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

После загрузки пакета его можно установить.

sudo dpkg -i chef-server-core_*.deb

После установки вызовите команду reconfigure. Она настроит компоненты сервера.

sudo chef-server-ctl reconfigure

Создание аккаунта администратора

Создайте администратора. Для этого используется команда chef-server-ctl и подкоманда user-create. Передайте команде имя пользователя, почтовый адрес и пароль. Общий синтаксис команды:

chef-server-ctl user-create USERNAME FIRST_NAME LAST_NAME EMAIL PASSWORD

Укажите все эти данные и добавьте флаг –f, чтобы указать файл, в который будет передан закрытый RSA-ключ. В дальнейшем его сможет использовать инструмент knife.

В руководстве указаны такие данные о пользователе:

  • Username: admin
  • First Name: admin
  • Last Name: admin
  • Email: admin@example.com
  • Password: examplepass
  • Filename: admin.pem

Команда, которая создаст такого пользователя, выглядит так:

sudo chef-server-ctl user-create admin admin admin admin@example.com examplepass -f admin.pem

В текущем каталоге появится файл admin.pem.

Чтобы создать организацию, используйте команду org-create. Общий синтаксис:

chef-server-ctl org-create SHORTNAME LONGNAME --association_user USERNAME

SHORTNAME – это имя, по которому можно сослаться на организацию внутри Chef. Флаг –association_user указывает администратора организации. Например:

sudo chef-server-ctl org-create 8host "8host, Inc." --association_user admin -f validator.pem

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

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

Клонирование репозитория

Конфигурации инфраструктуры Chef поддерживаются в иерархической файловой структуре, которая называется репозиторием Chef. Общую структуру можно найти в репозитории GitHub, предоставленном командой Chef. Используйте git, чтобы клонировать этот репозиторий на рабочую станцию и получить основу для конфигурации  инфраструктуры.

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

sudo apt-get update
sudo apt-get install git

Клонируйте репозиторий Chef в домашний каталог на рабочей станции:

cd ~
git clone https://github.com/chef/chef-repo.git

Настройка контроля версий

Чтобы настроить коммиты, нужно указать дополнительную информацию. Укажите имя и адрес электронной почты, чтобы система git могла отмечать автора коммитов. Задайте эти параметры глобально, чтобы все репозитории git могли их использовать.

git config --global user.name "Your Name"
git config --global user.email "username@domain.com"

Также система git должна игнорировать информацию в каталоге ~/chef-repo/.chef. в нём будут храниться конфиденциальные данные. Добавьте каталог в файл .gitignore.

echo ".chef" >> ~/chef-repo/.gitignore

Попробуйте создать первый коммит. Добавьте все изменённые файлы:

cd ~/chef-repo
git add .

Отправьте коммит. Используйте флаг –m, чтобы вставить текст сообщения о коммите. Например:

git commit -m "Excluding the ./.chef directory from version control"

Теперь репозиторий Chef находится под контролем версий.

Загрузка и установка Chef Development Kit

Chef Development Kit – это набор инструментов для рабочих станций Chef. В нём находится много полезных утилит (например, утилита knife, которая позволяет управлять серверами и клиентами Chef).

Development Kit для Chef 12 и Ubuntu 14.04 можно найти на сайте проекта.

Кликните правой кнопкой мыши на загрузку пакета Ubuntu Linux и скопируйте ссылку.

Вернитесь на рабочую станцию и откройте домашний каталог. Вставьте ссылку в команду wget:

cd ~
wget https://opscode-omnibus-packages.s3.amazonaws.com/ubuntu/12.04/x86_64/chefdk_0.4.0-1_amd64.deb

Установите загруженный пакет:

sudo dpkg -i chefdk_*.deb

Убедитесь, что компоненты доступны. Для этого запустите:

chef verify

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

echo 'eval "$(chef shell-init bash)"' >> ~/.bash_profile

Используйте команду source, чтобы обновить переменные .bash_profile в текущей сессии.

source ~/.bash_profile

Если вы хотите использовать свою версию Ruby, можете не редактировать файл.

Ключ аутентификации рабочей станции

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

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

mkdir ~/chef-repo/.chef

Ниже предложено два варианта загрузки учётных данных.

Вариант 1: Парольное подключение к серверу Chef

Если вы хотите подключиться к серверу Chef по SSH с помощью пароля, команда scp не потребует серьёзных изменений.

На рабочей станции укажите имя пользователя и доменное имя или IP для подключения к серверу Chef. После этого нужно поставить двоеточие и указать путь к файлу, который нужно загрузить. Затем поставьте пробел и укажите каталог на локальной машине, в который нужно загрузить требуемый файл (~/chef-repo/.chef).

При подключении к серверу Chef как root команды будут выглядеть примерно так:

scp root@server_domain_or_IP:/root/admin.pem ~/chef-repo/.chef
scp root@server_domain_or_IP:/root/validator.pem ~/chef-repo/.chef

Примечание: Вместо условных данных укажите свои.

При подключении к серверу Chef с помощью обычного пользователя используйте команды:

scp username@server_domain_or_IP:/home/username/admin.pem ~/chef-repo/.chef
scp username@server_domain_or_IP:/home/username/validator.pem ~/chef-repo/.chef

Вариант 2: Подключение с помощью SSH-ключей

Если вы подключаетесь к серверу Chef с помощью SSH-ключей (это рекомендуемый вариант), нужно выполнить несколько дополнительных действий.

Закройте сессию на рабочей станции:

exit

Вернитесь на локальный компьютер и добавьте ключи SSH, с помощью которых вы подключаетесь к серверу Chef, в агент SSH. OpenSSH, стандартный инструмент для работы с SSH, предоставляет SSH-агент. Чтобы запустить его, введите:

eval $(ssh-agent)

Команда должна вернуть:

Agent pid 13881

После этого можно добавить ключи:

ssh-add
Identity added: /home/demo/.ssh/id_rsa (rsa w/o comment)

Теперь ключи SSH будут храниться в памяти. После этого можно направить ключи на рабочую станцию при подключении. Для этого можно использовать флаг –А. Это позволит вам подключиться к любому компьютеру с рабочей станции (так, будто это локальный компьютер).

ssh -A username@workstation_domain_or_IP

Теперь можно подключиться к серверу Chef без пароля, используя учётные данные SSH. Если ключи сервера Chef были получены с помощью root, используйте такие команды:

scp root@server_domain_or_IP:/root/admin.pem ~/chef-repo/.chef
scp root@server_domain_or_IP:/root/validator.pem ~/chef-repo/.chef

Если вы загрузили ключи с помощью обычного пользователя, команды будут выглядеть так:

scp username@server_domain_or_IP:/home/username/admin.pem ~/chef-repo/.chef
scp username@server_domain_or_IP:/home/username/validator.pem ~/chef-repo/.chef

Настройка Knife для управления средой Chef

Теперь нужно предоставить команде knife учётные данные, чтобы она могла подключаться к инфраструктуре Chef и управлять ею. Для этого используется файл knife.rb, который находится в каталоге ~/chef-repo/.chef.

Откройте knife.rb:

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

Добавьте в него такую информацию:

current_dir = File.dirname(__FILE__)
log_level                :info
log_location             STDOUT
node_name                "name_for_workstation"
client_key               "#{current_dir}/name_of_user_key"
validation_client_name   "organization_validator_name"
validation_key           "#{current_dir}/organization_validator_key"
chef_server_url          "https://server_domain_or_IP/organizations/organization_name"
syntax_check_cache_path  "#{ENV['HOME']}/.chef/syntaxcache"
cookbook_path            ["#{current_dir}/../cookbooks"]

  • node_name: имя, с помощью которого knife сможет подключиться к серверу Chef (должно совпадать с именем пользователя).
  • client_key: имя и путь к ключу пользователя, скопированный с сервера Chef. Используйте #{current_dir}, чтобы заполнить путь, если ключ находится в том же каталоге, что и knife.rb.
  • validation_client_name: имя клиента проверки, которое knife
  • будет использовать для загрузки новых нод. Как правило, имя состоит из краткого имени организации и слова –validator.
  • validation_key: как и client_key, включает имя и путь к ключу, скопированному с сервера Chef. Опять же, #{current_dir} укажет путь к каталогу, если ключ хранится там же, где и knife.rb.
  • chef_server_url: URL-адрес сервера Chef. Должен начинаться с https://, затем укажите домен или IP-адрес сервера Chef. Затем укажите путь к организации (/organizations/your_organization_name).

В данном случае файл knife.rb будет выглядеть так:

current_dir = File.dirname(__FILE__)
log_level                :info
log_location             STDOUT
node_name                "admin"
client_key               "#{current_dir}/admin.pem"
validation_client_name   "digitalocean-validator"
validation_key           "#{current_dir}/validator.pem"
chef_server_url          "https://server_domain_or_IP/organizations/digitalocean"
syntax_check_cache_path  "#{ENV['HOME']}/.chef/syntaxcache"
cookbook_path            ["#{current_dir}/../cookbooks"]

Сохраните и закройте файл.

Протестируйте конфигурации. Попробуйте запустить простую команду knife из каталога ~/chef-repo.

cd ~/chef-repo
knife client list

Первая попытка запустить команду должна выдать ошибку:

ERROR: SSL Validation failure connecting to host: server_domain_or_IP - SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed
ERROR: Could not establish a secure connection to the server.
Use `knife ssl check` to troubleshoot your SSL configuration.
If your Chef Server uses a self-signed certificate, you can use
`knife ssl fetch` to make knife trust the server's certificates.
Original Exception: OpenSSL::SSL::SSLError: SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed

Она случается потому, что на рабочей станции нет SSL-сертификата сервера Chef. Загрузите сертификат:

knife ssl fetch

Файл сертификата сервера Chef будет загружен в каталог ~/chef-repo/.chef.

WARNING: Certificates from server_domain_or_IP will be fetched and placed in your trusted_cert
directory (/home/demo/chef-repo/.chef/trusted_certs).
Knife has no means to verify these are the correct certificates. You should
verify the authenticity of these certificates after downloading.
Adding certificate for server_domain_or_IP in /home/demo/chef-repo/.chef/trusted_certs/server_domain_or_IP.crt

После загрузки сертификата SSL команда должна работать без ошибок:

knife client list
validator

Теперь рабочая станция может управлять средой Chef.

3: Запуск новой ноды с помощью knife

Попробуйте настроить в инфраструктуре новый сервер с помощью Chef.

При этом на новую ноду устанавливается исполняемый файл Chef и ключ подтверждения организации. Новая нода подключается к серверу Chef и получает все необходимые конфигурации.

Для подключения к новому серверу нужна такая информация:

  • Домен или IP сервера.
  • Имя пользователя с правами администратора (пользователь с правами root или sudo).
  • Метод аутентификации (парольная аутентификация или SSH-ключи).
  • Метод выполнения задач администрирования. Пользователям root этот параметр не нужен; пользователи sudo должны указать пароль.

Общий синтаксис команды:

knife bootstrap node_domain_or_IP [options]

Команда использует дополнительные опции:

  • -x: указывает имя пользователя для аутентификации через SSH (этот флаг часто используется).
  • -N: имя новой ноды (если параметр не указан, ноде будет по умолчанию присвоено имя хоста ноды Chef).
  • -P: указывает пароль пользователя на удалённом сервере. Опция используется, если SSH-ключи защищены паролем или удалённый пользователь имеет доступ к sudo.
  • –sudo: этот флаг необходим, если удалённый пользователь имеет доступ к sudo. По умолчанию он запрашивает пароль.
  • –use-sudo-password: если пароль указан в опции –Р, эта опция в комбинации с –sudo будет автоматически указывать этот пароль (без запросов пароля).
  • -A: передаёт ключи SSH на удалённый хост. Чтобы использовать опцию –A, нужно запустить агент SSH на локальном компьютере и добавить ключ SSH для подключения к новой ноде. Опция –А позволяет затем передать эту информацию рабочей станции.

Теперь вы можете написать команду для запуска новой ноды.

К примеру, нода будет называться testing, имя пользователя – demo, пользователь имеет доступ к sudo (нужен пароль для запуска команд), ключи SSH защищены паролем. Команда будет выглядеть так:

knife bootstrap node_domain_or_IP -N testing -x demo -P password --sudo --use-sudo-password

Чтобы запустить ноду с помощью пользователя root, использовать для аутентификации переданные на рабочую станцию SSH-ключи и стандартное имя хоста в качестве имени ноды Chef, нужно ввести:

knife bootstrap node_domain_or_IP -x root -A

Чтобы использовать ключи SSH для аутентификации пользователя sudo, нужно указать пароль с помощью флагов –P, –sudo и –use-sudo-password (чтобы отключить запрос пароля).

knife bootstrap node_domain_or_IP -x demo -A -P password --sudo --use-sudo-password -N name

Если вы не хотите отключать запрос пароля, а предпочитаете вводить его вручную, используйте команду:

knife bootstrap node_domain_or_IP -x demo -A --sudo -N name

После запуска новой ноды у вас появится новый клиент:

knife client list
validator
name

Также вы увидите её в списке нод:

knife node list
name

Читайте также:

Tags: , ,

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