Обновление Лаборатории: 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, не находятся в хорошем рабочем состоянии.
CI/CD кулинарных книг
Хотя мы не предписываем конкретный выбор технологии или подробностей процессов, лаборатория апгрейда Chef ожидает наличие конвейера непрерывной интеграции и системы непрерывной доставки (CI/CD) для развертывания кулинарных книг.
Лаборатория апгрейда предполагает, но не требует, что у вас есть конвейер непрерывной интеграции (CI) для ваших кулинарных книг с:
- Системой управления версиями (например, git)
- Некоторой степенью автоматизированного тестирования предлагаемых изменений
- Системой непрерывной доставки (CD), которая управляет выпуском кулинарных книг; CD является механизмом для обновления версий кулинарных книг и их загрузки на Chef Infra Server(ы)
Если у вас нет системы управления версиями и конвейера CI/CD, обратитесь к своей команде по работе с клиентами за помощью или найдите нас по адресу sales@chef.io.
Вы также можете задавать вопросы в каналах сообщества Chef:
- Сервер Slack сообщества Chef по адресу 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 для получения учебных пособий и свяжитесь с вашей командой по работе с клиентами, когда вы будете готовы модернизировать вашу систему.
------------------------ 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
Подключить обновлённый узел к новому серверу
Выдать новую команду Bootstrap
Мигрируйте свой узел на новый сервер, выполнив команду Bootstrap, аналогичную:
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/