Обновление лаборатории: Chef Infra Client 12 до последней версии
Лаборатория апгрейда Chef Software предоставляет изолированную среду разработки кулинарных книг и поддержку в процессе апгрейда вашей системы, чтобы вы могли отказаться от устаревшего Chef Infra и перейти на современный Chef Infra.
Лаборатория апгрейда предоставляет отчет о ваших существующих узлах и кулинарных книгах, чтобы вы понимали объем работы и могли определить хорошее место для начала. Лаборатория апгрейда работает путем захвата любого узла из производственной среды и его локального воспроизведения путем создания репозитория для этого узла, который предоставляет вам песочницу для работы с апгрейдом и тестированием ваших кулинарных книг в безопасном отдалении от вашей производственной среды.
О данном руководстве
Это руководство описывает простой процесс апгрейда с Chef Infra Client 12 до Chef Infra Client 16, включая апгрейд Chef Infra Server по мере продвижения. Хотя мы считаем это руководство самым плавным путем, оно не предназначено для исключения других подходов.
Если не указано иное, все команды будут выполняться в вашей локальной среде разработки.
Примечание
Требования к лаборатории апгрейда Chef
Требования к архитектуре системы
Лаборатория апгрейда Chef делает некоторые базовые предположения о вашей существующей системе:
- Два Chef Infra Server
- Chef Infra Server, работающий на какой-то более старой версии
- Новый установленный Chef Infra Server, работающий на последнем программном обеспечении, настроенный и сконфигурированный для knife, но в остальном пустой
- Один или несколько узлов
- Работающие на Chef Infra Client 12 или более поздней версии
- Минимальный объем ОЗУ 512 МБ
- Рекомендуемый объем дискового пространства 5 ГБ рекомендации
- Запущенные с более старого Chef Infra Server
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 Server, и вы должны иметь возможность подключаться к обоим Chef Infra Server с рабочего стола разработчика.
Проверьте подключение, выполнив 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 Server(ы)
Если у вас нет системы контроля версий и CI/CD конвейера, обратитесь в свою учетную службу или свяжитесь с нами по адресу sales@chef.io.
Вы также можете задавать вопросы в каналах сообщества Chef:
- Chef Community Slack по адресу https://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 Server во время фазы 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, но выходит за рамки этого руководства. См. Learn Chef Rally для получения руководств и свяжитесь с командой Customer Success, когда вы будете готовы модернизировать свою систему.
------------------------ 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 и т. д., пока не достигнете версии 16 клиента Chef Infra.
Попробуйте слияние и проверьте наличие ошибок
Сохраните файл и протестируйте его в каталоге 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 Lab
Примечание
Это руководство предполагает миграцию обновлённых кулинарных книг и узлов на новый сервер 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