В рамках нашего EPAM Private Cloud для автоконфигурации виртуальных машин мы изначально использовали Chef Server 10.
Список поддерживаемых ролей перешагнул отметку 60 и включал в себя как простые, так и довольно сложные кластерные решения.
И вот когда количество клиентов сервера выросло до 750, мы заметили значительное снижение производительности.
Увеличивать мощность виртуальной машины, на которой установлен Chef Server 10, было не целесообразно, она итак была не малой( 2x Intel® Xeon® CPU L5640 @ 2.27GHz и 8Gb оперативной памяти).
Манипуляции с тюнингом chef-solr и chef-expander также не дали желаемого прироста производительности.
Вот тогда и решено было мигрировать с Chef 10 на Chef 11.
На сайте opsode.com говорится, что он быстрее, легче масштабируется и проще в настройке и управлении.
Итак, сперва краткая инструкция по установке Chef Server 11 для Ubuntu12.04.
#Скачиваем и устанавливаем пакет
wget -O chef-server-11.deb https://opscode-omnitruck-release.s3.amazonaws.com/ubuntu/12.04/x86_64/chef-server_11.0.6-1.ubuntu.12.04_amd64.deb
sudo dpkg -i chef-server-11.deb
#Конфигурируем и запускаем
sudo chef-server-ctl reconfigure
#Проверяем, что установка прошла успешно
sudo chef-server-ctl test
Когда сервер установлен и запущен, нужно создать пользователя с правами администратора.
Создадим директорию .chef в домашней папке пользователя и скопируем необходимые ключи.
mkdir ~/.chef
cp /etc/chef-server/admin.pem ~/.chef
cp /etc/chef-server/chef-validator.pem ~/.chef
Запускаем настройку файла конфигурации для knife.
knife configure -i
#В итоге получаем что-то типа
cat ~/.chef/khife.rb
log_level :info
log_location STDOUT
node_name 'chefuser'
client_key '/home/chefuser/.chef/chefuser.pem'
validation_client_name 'chef-validator'
validation_key '/home/chefuser/.chef/chef-validator.pem'
chef_server_url 'https://192.168.0.1'
syntax_check_cache_path '/home/chefuser/.chef/syntax_check_cache'
Перенос данных с Chef 10.
Сперва необходимо установить knife-essentials для расширения функционала утилиты knife
/opt/chef-server/embedded/bin/gem install knife-essentials
Создадим директорию, которую будем использовать как транзитную точку. И в ней создадим папку для файлов конфигурации knife.
mkdir -p ~/transfer/.chef
Создадим отдельные файлы конфигурации knife для Chef 10 и Chef 11
chef_server_url «chef-10.example.com:4000»
node_name 'chef-webui'
client_key "#{transfer_repo}/.chef/chef-webui.pem"
repo_mode 'everything'
versioned_cookbooks true
chef_repo_path transfer_repo
cookbook_path nil
chef_server_url «chef-11.example.com»
node_name 'admin'
client_key "#{transfer_repo}/.chef/admin.pem"
repo_mode 'everything'
versioned_cookbooks true
chef_repo_path transfer_repo
cookbook_path nil
Осталось скопировать webui.pem c Chef Server 10 в /home/chefuser/transfer/.chef/chef-webui.pem и
/home/chefuser/.chef/chefuser.pem в /home/chefuser/transfer/.chef/admin.pem.
Когда это готово, можно пробовать скачивать информацию о нодах, клиетах, ролях и т.д.
/opt/chef-server/embedded/bin/knife download -c .chef/knife-chef10.rb /
#Результатом будет создание папок /nodes /clients /roles /cookbooks и т.д. с соответствующим содержимым.
ls transfer/
clients cookbooks data_bags environments nodes roles users
Таким же образом можно скачать информацию об отдельной ноде или клиенте.
Например:
/opt/chef-server/embedded/bin/knife download -c .chef/knife-chef10.rb /nodes/server1.json
Перед тем, как начать закачку данных на Chef Server 11, рекомендую проверить чтобы у вас не было одинаковых названий клиентов или нод на обеих серверах. Иначе информация о них может затереться.
Данные закачиваем следующим образом
/opt/chef-server/embedded/bin/knife upload -c .chef/knife-chef11.rb /
Закачивать также можно по одной ноде, клиенту и т.д.
Переключение клиентов с Chef 10 на Chef 11.
Это, пожалуй, самый интересный этап в миграции.
Если в качестве chef_server_url вы использовали ДНС-имя, то проблем нет. Нужно просто переназначить его на новый сервер.
Но если использовалось, как в нашем случае, имя виртуальной машины, которое уникально и назначить его другой машине нельзя, то придётся подумать.
Я этот вопрос решил созданием простого кукбука, целью которого было поменять значение chef_server_url на нужное и сделать рестарт chef-client.
Если кому-нибудь интересна такая реализация — кукбук будет выложен в GitHub.
Итоги: После миграции на Chef 11 мы получили прирост производительности в разы. Прежний сервер постоянно был «на грани свопа» и мог обрабатывать простой запрос на список ролей до 2 минут. На текущем сервере с тем же количеством клиентов свободно 3Гб оперативной памяти и запросы обрабатываются в течении нескольких секунд.
Если у кого-нибудь остались вопросы — пишите в комментарии, охотно отвечу.
Автор: camec