Лабораторное обновление: Chef Infra Client 12 до 16
Лаборатория обновления программного обеспечения Chef предоставляет изолированную среду разработки кулинарных книг и прямую поддержку, чтобы помочь вам обновить вашу систему, так что вы сможете перестать использовать устаревшую Chef Infra и начать использовать современную Chef Infra.
Лаборатория обновления предоставляет отчет о ваших существующих узлах и кулинарных книгах, так что вы будете знать объем работы и сможете определить хорошее место для начала. Лаборатория обновления работает, захватывая любой узел из рабочей среды и воссоздавая его локально, генерируя репозиторий для этого узла, который предоставляет вам песочницу для работы над обновлением и тестированием ваших кулинарных книг на безопасном расстоянии от вашей рабочей среды.
Об этом руководстве
Это руководство охватывает простой способ обновления с Chef Infra Client 12 до Chef Infra Client 16, включая обновление Chef Infra Server по ходу работы. Хотя мы считаем, что это руководство является наиболее оптимальным путем, оно не исключает другие подходы.
Если не указано иное, все команды будут выполняться в вашей локальной среде разработки.
Примечание
Требования к лаборатории обновления Chef
Требования к архитектуре системы
Лаборатория обновления Chef делает некоторые основные предположения о вашей существующей системе:
- Два сервера Chef Infra
- Сервер Chef Infra, работающий на некоторой старой версии
- Новый установленный сервер Chef Infra, работающий на последней версии программного обеспечения, настроенный и сконфигурированный для knife, но в остальном пустой
- Один или несколько узлов
- Работающие на Chef Infra Client 12-15
- Минимум 512 МБ ОЗУ
- Рекомендуется 5 ГБ свободного места
- Запущенные на старом сервере Chef Infra
-
sudoразрешения на узле - Подключение SSH между узлами и рабочей станцией администратора/разработчика
- Рабочая станция администратора/разработчика
- 64-битная архитектура
- Минимум 4 ГБ ОЗУ
- Рекомендуется 10 ГБ свободного места на диске для установки Chef Workstation и работы в лаборатории обновления Chef
Требования к программному обеспечению
- Просмотрите требования к платформе и системе для Chef Workstation
- Установите или обновите до последней версии Chef Workstation по ссылке
Chef не предписывает какой-либо конкретный редактор. Однако расширение Chef Infra для Visual Studio Code имеет несколько генераторов кода и полезных функций, таких как запуск Cookstyle каждый раз при сохранении рецепта.
Резервное копирование сервера
Перед началом любого процесса обновления сервера рекомендуется выполнить резервное копирование. Следуйте руководству резервного копирования сервера Chef Infra перед началом работы с Лабораторией обновления.
Требования к инфраструктуре
Учетные данные
Ваши учетные данные настраиваются с помощью профилей knife. Этот метод позволяет хранить ваши ключи в файле credentials, и облегчает переключение между учетными данными.
Например, в .chef/credentials:
[old-server]
client_name = "user_name"
chef_server_url = "https://old-chef-server.dev/organizations/my-org"
client_key = """
-----BEGIN RSA PRIVATE KEY-----
MMM+some+key+goes+here+MMM
-----END RSA PRIVATE KEY-----
"""
[new-server]
client_name = "user_name"
chef_server_url = "https://new-chef-server.dev/organizations/my-org"
client_key = """
-----BEGIN RSA PRIVATE KEY-----
MMM+another+key+goes+here+MMM
-----END RSA PRIVATE KEY-----
"""
Подключение
У вас должен быть ключ пользователя для обоих серверов Chef Infra, и вы должны иметь возможность подключаться к обоим серверам Chef Infra со своей рабочей станцией разработки.
Проверьте подключение, выполнив команду knife и получив разумный ответ от каждого сервера:
chef exec knife user list --profile old-server
user_name
chef exec knife user list --profile new-server
user_name
Схождение
Ваши узлы находятся в хорошем рабочем состоянии. Они успешно сходятся под старой версией Chef Infra Client.
Проверьте работоспособность узлов, выполнив:
chef exec knife status --profile old-server
Вывод должен быть похож на:
42 minutes ago, node-01, ubuntu 18.04.
Эта команда выводит время последнего успешного выполнения Chef Infra Client на каждом узле. Узлы, которые возвращают радикально отличающиеся времена последнего успешного выполнения Chef Infra Client, находятся не в рабочем состоянии.
Cookbook CI/CD
Хотя мы не предписываем конкретный выбор технологии или деталей процессов, Лаборатория обновления Chef ожидает непрерывную интеграционную и непрерывную систему доставки (CI/CD) для развертывания кулинарных книг.
Лаборатория обновления предполагает, но не требует, наличия настроенной непрерывной интеграционной системы (CI) для ваших кулинарных книг с:
- Система управления версиями (например, git)
- Некоторая степень автоматизированного тестирования предлагаемых изменений
- Система непрерывной доставки (CD), которая контролирует релизы кулинарных книг; CD — это механизм обновления версий кулинарных книг и их загрузки на сервер(ы) Chef Infra
Если у вас нет системы управления версиями и CI/CD-системы, обратитесь в свою команду по работе с клиентами за помощью или найдите нас по адресу sales@chef.io.
Вы также можете задавать вопросы в каналах сообщества Chef:
- Сервер Slack сообщества Chef по адресу http://community-slack.chef.io/.
- Список рассылки Chef по адресу https://discourse.chef.io/
Лаборатория обновления
Инвентаризация вашей системы с помощью отчётов Chef
Рекомендуется начинать процесс обновления с узла с простой настройкой, например, с узлом с меньшим числом и более простыми кулинарными книгами. Команда chef report обследует ваши узлы и кулинарные книги. Используйте отчеты для определения хорошего места для начала.
chef report nodes
Команда chef report nodes -p PROFILE будет:
- создавать отчет об узлах вашей системы из данных Ohai
- выводить сводный отчет на экран
- сохранять отчет в каталог
.chef-workstation/reports/
Создайте отчет об узлах со своей рабочей станции, выполнив:
chef report nodes -p old-server
Что выводит отчет об узлах:
Analyzing nodes...
-- REPORT SUMMARY --
Node Name Chef Version Operating System Number Cookbooks
--------------------------------+--------------+---------------------+-------------------
node-01 12.22.5 windows v10.0.14393 18
node-02 12.22.5 windows v10.0.14393 18
node-03 12.22.5 windows v10.0.14393 5
node-04 12.18.31 windows v6.3.9600 5
Nodes report saved to /Users/user_name/.chef-workstation/reports/nodes-20200324135111.txt
chef report cookbooks
Команда chef report cookbooks -p PROFILE будет:
- создавать отчет о кулинарных книгах вашей системы из данных Ohai
- выводить сводный отчет на экран
- сохранять отчет в каталог
.chef-workstation/reports/
Этот отчет показывает, что на сервере две кулинарные книги. Он анализирует кулинарные книги, ища проблемы в кулинарных книгах, которые будут проблематичны в более поздних версиях Chef Infra Client, выполняя программу cookstyle. Здесь мы видим, что кулинарная книга cron имеет одно нарушение, которое можно автоматически исправить с помощью cookstyle.
Создайте отчет о кулинарных книгах со своей рабочей станции, выполнив:
chef report cookbooks -V -p old-server
Что выводит отчет о кулинарных книгах:
Cookbook Version Violations Auto-correctable Nodes Affected
-----------------------+---------+------------+------------------+-----------------
cron 1.7.5 1 1 1
upgrade_labs_problems 0.1.0 2 2 1
Cookbooks report saved to /Users/user_name/.chef-workstation/reports/cookbooks-20200504155204.txt
Создайте среду обновления с помощью chef capture
Команда chef capture NODE будет:
- Создать репозиторий для этого узла в текущем каталоге
- Поможет получить и организовать кулинарные книги, необходимые для схождения узла
- Создать
kitchen.yml, что позволит использовать Test Kitchen для выполнения локального развития
Выполните команду:
chef capture NODE
Вывод на экран описывает процесс захвата:
- Setting up local repository
- Capturing node object ''
- Capturing cookbooks...
- Capturing environment...
- Capturing roles...
- Writing kitchen configuration...
Repository has been created in './node-NODE-repo'.
Добавление расположения источника кулинарных книг
После создания репозитория, chef capture NODE предлагает вам извлечь кулинарные книги из их исходных расположений.
Обновление узла означает обновление его кулинарных книг, чтобы он мог запускать последнюю версию Chef Infra Client. В идеале, вы можете получить кулинарные книги из их канонического источника (например, git clone или другой подобной операции управления версиями). Если вы работаете с системой управления версиями, вы можете вносить и тестировать свои изменения локально, а затем отправлять изменения обратно в исходный код кулинарной книги. Это полностью использует преимущества вашей CI/CD-системы кулинарных книг, позволяя вашим изменениям пройти правильное управление версиями, коллегиальную проверку, автоматизированное тестирование и автоматизированное развертывание.
Если вы не можете найти кулинарную книгу, не загружайте её из внешнего источника, такого как публичный Chef Supermarket. Версия кулинарной книги в вашей среде разработки должна соответствовать версии на вашем узле. В качестве крайней меры, Лаборатория обновления может получить копии ваших кулинарных книг с сервера Chef Infra во время фазы capture.
Вероятные расположения кулинарных книг:
- Зафиксированы в вашей системе управления версиями
- На частной установке Supermarket
- В существующем каталоге разработки кулинарных книг
Структура каталога кулинарных книг
Если у вас есть доступ к источникам кулинарных книг, хранение кулинарных книг в одном родительском каталоге проще, примерно так:
/Users/user_name/my_cookbooks/
--- cron
-- .git/ # Or other version control bookkeeping
-- recipes/
-- ...
-- metadata.rb
--- chef-client
-- .cvs/ # Or other version control bookkeeping
-- recipes/
-- ...
-- metadata.rb
--- my_custom_cookbook
-- .git/ # Or other version control bookkeeping
-- recipes/
-- ...
-- metadata.rb
Лаборатория обновления работает, если у вас есть кулинарные книги в разных местах, но это подразумевает больше запросов с командной строки.
Основное расположение разработки кулинарных книг
Команда chef capture сначала запросит у вас основное расположение источника кулинарных книг:
Next, locate version-controlled copies of the cookbooks. This is
important so that you can track changes to the cookbooks as you
edit them. You may have one or more existing paths where you have
checked out cookbooks. If not, now is a good time to open a
separate terminal and clone or check out the cookbooks.
If all cookbooks are not available in the same base location,
you will have a chance to provide additional locations.
Press Enter to Continue:
Please clone or check out the following cookbooks locally
from their original sources, and provide the base path
for the checkout:
- cron (v1.6.1)
- chef-client (v4.3.0)
- logrotate (v1.9.2)
- windows (v1.44.1)
- chef_handler (v1.4.0)
If sources are not available for these cookbooks, leave this blank.
Checkout Location [none]:
В этот момент введите путь к каталогу разработки кулинарных книг, например, /Users/user_name/my_cookbooks в запросе.
chef capture сканирует этот путь и находит кулинарные книги, которые ему нужны. Команда завершается, как только учитываются все источники кулинарных книг; но если какие-либо отсутствуют, она запросит их на следующем шаге.
Checkout Location [none]: /src/my_cookbooks
Using your checked-out cookbook: cron
using your checked-out cookbook: chef-client
Альтернативные расположения источников кулинарных книг
Предположим, что вашему узлу нужны 5 кулинарных книг:
-
cron(v1.6.1) -
chef-client(v4.3.0) -
logrotate(v1.9.2) -
windows(v1.44.1) -
chef_handler(v1.4.0)
Если каталог, который вы указали в первоначальном запросе, содержит только cron и chef-client, то chef capture запросит у вас расположения источников для оставшихся трех:
Please provide the base checkout path for the following
cookbooks, or leave blank if no more cookbooks are checked out:
- logrotate (v1.9.2)
- windows (v1.44.1)
- chef_handler (v1.4.0)
Checkout Location [none]:
chef capture сканирует предоставленный вами путь и находит необходимые кулинарные книги. Команда завершается, как только учитываются все источники кулинарных книг; она запросит у вас другой путь, если потребуются дополнительные источники кулинарных книг.
Загрузка кулинарных книг с сервера Chef Infra
Если у вас нет доступа к исходному контролируемому источнику кулинарной книги, нажмите Enter в запросе для chef capture , чтобы использовать копию кулинарной книги, загруженной с сервера Chef Infra.
Обновление кулинарных книг с сервера Chef Infra не является оптимальной практикой. Вы будете вносить изменения в свои кулинарные книги в ходе обновления. Внесение изменений в кулинарные книги без возможности отслеживания этих изменений в системе управления версиями почти неизбежно приводит к конфликтам между источниками кулинарных книг. Примирение кулинарных книг с незафиксированными изменениями — сложный и трудоемкий процесс. Если вы используете много кулинарных книг — или сложные кулинарные книги — загруженные с сервера Chef Infra, в долгосрочной перспективе будет целесообразно постараться найти их источники с управлением версиями.
Отслеживание и тестирование изменений в конвейере CI/CD является важной частью управления вашей инфраструктурой Chef, но выходит за рамки данного руководства. См. Учебные материалы Chef Rally для получения руководств и свяжитесь с службой поддержки клиентов Chef Software, когда вы готовы модернизировать свою систему.
------------------------ WARNING ---------------------------
Changes made to the following cookbooks in ./node-MY_NODE-repo/cookbooks
cannot be saved to the cookbook's source, though they can still be uploaded
to a Chef Server:
- logrotate (v1.9.2)
- windows (v1.44.1)
- chef_handler (v1.4.0)
-----------------------------------------------------------
You're ready to begin!
Start with 'kitchen converge'. As you identify issues, you
can modify cookbooks in their original checkout locations or
in the repository's cookbooks directory and they will be picked
up on subsequent runs of 'kitchen converge'.
Обнаружение и исправление ошибок кулинарных книг
Примечание
kitchen.yml.Увеличение версии клиента Chef Infra
В файле kitchen.yml измените строку product_version на 16:
provisioner:name:chef_zeroproduct_name:chefproduct_version:16# Change this lineПри необходимости вы можете «перейти вперед» по версиям, сначала перейдя с 12 на 13, исправив любые проблемы, а затем увеличив с 13 до 14 и т.д., пока не достигнете версии Chef Infra Client 16.
Попытка слияния и проверка на ошибки
Сохраните файл и протестируйте его в каталоге node-MY_NODE-repo, выполнив:
chef exec kitchen converge
Следите за ошибками Chef Infra. Если они возникнут, исправьте их.
Проверка и исправление с помощью Cookstyle
Чтобы проверить проблемы с обновлением версий, выполните:
chef exec cookstyle cookbooks/my_cookbook
Повторите этот процесс для каждой кулинарной книги для данного узла.
Использование автоматической коррекции Cookstyle
Используйте функцию автоматической коррекции Cookstyle для исправления стилистических ошибок, добавив флаг -a (для автоматической коррекции):
chef exec cookstyle -a cookbooks/my_cookbook
Другие проблемы могут потребовать ручного вмешательства и редактирования. Повторите этот процесс для каждой кулинарной книги, используемой узлом.
Копирование пакетов данных
Если ваш сервер Chef Infra использует пакеты данных, вам необходимо загрузить каталог data_bags в ваш репозиторий Chef с помощью команды chef exec knife download data_bags. Эта команда не поддерживает встроенные ключи в файлах учетных данных. Если вы используете встроенные ключи, переместите ключ в файл ключа.
cd node-node-01-repo
chef exec knife download data_bags --chef-repo-path . --profile old-server --key my-old-key.pem
Развертывание обновлений вашей лаборатории Chef
Примечание
Это руководство предполагает миграцию обновленных кулинарных книг и узлов на новый сервер Chef Infra. Эта схема невозможна для всех клиентов, в частности, тех, кто полагается на chef search для инвентаризации и координации. Миграция на новый сервер подходит для клиентов, которые не полагаются на поиск, так как она создаёт чистый старт для дальнейшей миграции на Effortless.
Если вы полагаетесь на knife search, или настройка нового сервера Chef Infra невозможна, загрузите обновленные кулинарные книги на ваш существующий сервер Chef Infra. Если вы делаете это, убедитесь, что зафиксированы версии ваших кулинарных книг на существующих узлах, чтобы обновлённую кулинарную книгу можно было вручную распространить на нужные узлы.
Зафиксируйте обновления кулинарных книг
При внесении изменений в кулинарные книги следуйте существующим практикам разработки программного обеспечения вашей организации. Зафиксируйте ваши изменения в кулинарных книгах и отправьте изменения в ваш конвейер кулинарных книг для тестирования автоматизированной системой тестирования. После успешного прохождения тестирования кулинарные книги должны получить новые номера версий и быть опубликованы на новом сервере Chef Infra системой непрерывного развертывания.
Необязательно загрузить обновления кулинарных книг на новый сервер
Если в вашей организации нет конвейера кулинарных книг или вы настраиваете демонстрационный проект, вы можете напрямую загрузить кулинарные книги на новый сервер. Мы не рекомендуем этого, так как это затрудняет управление изменениями в коде кулинарных книг. Эта команда не поддерживает встроенные ключи в файлах учетных данных, поэтому необходимо разместить ключ в файле ключа.
cd node-node-01-repo
chef exec knife upload cookbooks --chef-repo-path . --profile new-server --key ../keys/my-new-key.pem
Загрузка дополнительных данных на новый сервер
Далее, загрузите оставшиеся данные на новый сервер. Обратите внимание, что команда knife upload не поддерживает встроенные ключи в файлах учетных данных, поэтому необходимо разместить ключ в файле ключа.
Данные узла
Если вы используете поиск узлов, загрузите данные узлов на новый сервер:
chef exec knife upload nodes --chef-repo-path . --profile new-server --key ../keys/my-new-key.pem
Роли
Если вы используете роли, загрузите их на новый сервер:
chef exec knife upload roles --chef-repo-path . --profile new-server --key ../keys/my-new-key.pem
Среды
Если вы используете среды, загрузите их на новый сервер:
chef exec knife upload environments --chef-repo-path . --profile new-server --key ../keys/my-new-key.pem
Пакеты данных
Если вы использовали пакеты данных, загрузите их на новый сервер:
chef exec knife upload data_bags --chef-repo-path . --profile new-server --key ../keys/my-new-key.pem
Подключение обновлённого узла к новому серверу
Выдача новой команды загрузки
Переместите ваш узел на новый сервер, выполнив команду загрузки, подобную:
chef exec knife bootstrap \
--profile new-server --chef-license accept \
-r cookbook::recipe,another_cookbook::recipe \
-N node-01 -y --sudo \
--bootstrap-version 16 \
user@somehost.example
Загрузка узлов таким образом обновляет установленный клиент Chef Infra до версии 16. Поздравляем!
Необязательно удалить запись вашего узла со старого сервера, используя:
chef exec knife node delete node-01 --profile old-server
Повторить при необходимости
Удачной работы!
© Chef Software, Inc.
Licensed under the Creative Commons Attribution 3.0 Unported License.
The Chef™ Mark and Chef Logo are either registered trademarks/service marks or trademarks/servicemarks of Chef, in the United States and other countries and are used with Chef Inc's permission.
We are not affiliated with, endorsed or sponsored by Chef Inc.
https://docs.chef.io/workstation/upgrade_lab