Поддержка cloud-init для виртуальных машин в Azure

Внимание

Эта статья ссылается на CentOS, дистрибутив Linux, который приближается к состоянию конца жизни (EOL). Обратите внимание на использование и план соответствующим образом. Дополнительные сведения см. в руководстве centOS End Of Life.

Область применения: ✔️ Виртуальные машины Linux ✔️ Гибкие масштабируемые наборы

В этой статье объясняется поддержка, которая существует для cloud-init для настройки виртуальной машины или Масштабируемые наборы виртуальных машин во время подготовки в Azure. Эти настройки конфигурации cloud-init выполняются при первой загрузке, если в Azure подготовлены все нужные ресурсы.

Подготовка виртуальных машин — это процесс, в котором Azure передает значения параметров виртуальной машины, такие как имя узла, имя пользователя и пароль, и сделать их доступными для виртуальной машины по мере загрузки. "Агент подготовки" принимает эти значения, настраивает виртуальную машину, а, закончив, передает отчет.

Azure поддерживает два агента подготовки — cloud-init и агент Linux для Azure (WALA).

Общие сведения о cloud-Init

Cloud-init — широко используемое средство для настройки виртуальной машины Linux при ее первой загрузке. Вы можете использовать cloud-init для установки пакетов, записи файлов или настройки пользователей и параметров безопасности. Так как cloud-init вызывается при начальной загрузке, к вашей конфигурации не нужно применять какие-либо дополнительные действия или агентов. Дополнительные сведения о том, как правильно отформатировать файлы, #cloud-config или другие входные данные, см. на сайте документации по cloud-init. Файлы #cloud-config — это текстовые файлы, закодированные в формате base64.

Кроме того, cloud-init работает с разными дистрибутивами. Например, для установки пакета не используется apt-get install или yum install. Вместо этого можно определить список пакетов для установки. Cloud-init автоматически использует собственный инструмент управления пакетами из выбранного дистрибутива.

Мы активно работаем с нашими утвержденными партнерами дистрибутива Linux, чтобы иметь доступные в Azure Marketplace образы с поддержкой cloud-init. Эти образы обеспечивают бесперебойную работу развертываний и конфигураций cloud-init с виртуальными машинами и масштабируемыми наборами виртуальных машин. Сначала мы активно сотрудничаем с нашими утвержденными партнерами, работающими над дистрибутивами Linux, и вышестоящими источниками, чтобы обеспечить работу функций cloud-init с ОС в Azure, а затем пакеты обновляются и переводятся в открытый доступ через репозитории пакетов дистрибутивов.

Существует два этапа, чтобы сделать cloud-init доступными для поддерживаемых дистрибутивов Linux в Azure, поддержке пакетов и поддержке образов:

  • Документы " поддержка пакетов cloud-init в Azure", которые пакеты cloud-init поддерживаются или в предварительной версии, поэтому эти пакеты можно использовать с ОС в пользовательском образе.
  • документы "Образ готов для cloud-init", если образ уже настроен для использования cloud-init.

Canonical

Издатель/версия ПРЕДЛОЖЕНИЕ номер SKU Версия Образ готов для cloud-init Поддержка пакетов cloud-init в Azure
Канонический 22.04 UbuntuServer 22.04-LTS latest yes yes
Canonical 20.04 UbuntuServer 20.04-LTS latest yes yes
Canonical 18.04 UbuntuServer 18.04-LTS latest yes yes

RHEL

Издатель/версия ПРЕДЛОЖЕНИЕ номер SKU Версия Образ готов для cloud-init Поддержка пакетов cloud-init в Azure
RedHat 7 RHEL 7.7, 7.8, 7_9 latest yes yes
RedHat 8 RHEL 8.1, 8.2, 8_3, 8_4 latest yes yes
RedHat 9 RHEL 9_0, 9_1 latest yes yes
  • Все остальные SKU RedHat, начиная с RHEL 7 (версия 7.7) и RHEL 8 (версия 8.1), включая образы Gen1 и Gen2, подготавливаются с помощью cloud-init. Cloud-init не поддерживается в RHEL 6.

CentOS

Издатель/версия ПРЕДЛОЖЕНИЕ номер SKU Версия Образ готов для cloud-init Поддержка пакетов cloud-init в Azure
OpenLogic 7 CentOS 7.7, 7.8, 7.9 latest yes yes
OpenLogic 8 CentOS 8.1, 8.2, 8.3 latest yes yes
  • Все остальные SKU CentOS, начиная с CentOS 7 (версия 7.7) и CentOS 8 (версия 8.1), включая образы Gen1 и Gen2, подготавливаются с помощью cloud-init. Образы CentOS 6.10, 7.4, 7.5 и 7.6 не поддерживают cloud-init.

Примечание.

OpenLogic теперь носит название Rogue Wave Software.

Oracle

Издатель/версия ПРЕДЛОЖЕНИЕ номер SKU Версия Образ готов для cloud-init Поддержка пакетов cloud-init в Azure
Oracle 7 Oracle Linux 77, 78, ol79 latest yes yes
Oracle 8 Oracle Linux 81, ol82, ol83-lvm, ol84-lvm latest yes yes
  • Все остальные SKU Oracle, начиная с Oracle 7 (версия 7.7) и Oracle 8 (версия 8.1), включая образы Gen1 и Gen2, подготавливаются с помощью cloud-init.

SUSE SLES

Издатель/версия ПРЕДЛОЖЕНИЕ номер SKU Версия Образ готов для cloud-init Поддержка пакетов cloud-init в Azure
SUSE 15 SLES (SUSE Linux Enterprise Server) Пакеты обновлений 1 (sp1), 2 (sp2), 3 (sp3) latest yes yes
SUSE 12 SLES (SUSE Linux Enterprise Server) Пакет обновлений 5 (sp5) latest yes yes
  • Все остальные SKU SUSE, начиная с SLES 15 (sp1) и SLES 12 (sp5), включая образы Gen1 и Gen2, подготавливаются с помощью cloud-init.
  • Кроме того, с помощью cloud-init подготавливаются также следующие образы.
Издатель/версия ПРЕДЛОЖЕНИЕ Номер SKU/версия
SUSE 12 SLES (SUSE Linux Enterprise Server) sles-{byos/sap/sap-byos}:12-sp4:2020.06.10
SUSE 12 SLES (SUSE Linux Enterprise Server) sles-{byos/sap/sap-byos}:12-sp3:2020.06.10
SUSE 12 SLES (SUSE Linux Enterprise Server) sles-{byos/sap/sap-byos}:12-sp2:2020.06.10
SUSE 15 SLES (SUSE Linux Enterprise Server) manager-proxy-4-byosgen1:2020.06.10
SUSE 15 SLES (SUSE Linux Enterprise Server) manager-server-4-byos:gen1:2020.06.10

Debian

Издатель/версия ПРЕДЛОЖЕНИЕ номер SKU Версия Образ готов для cloud-init Поддержка пакетов cloud-init в Azure
debian (поколение 1) debian-10 10-cloudinit 10:0.20201013.422 yes Да— поддержка из версии пакета: 20.2-2~deb10u1
debian (поколение 2) debian-10 10-cloudinit-gen2 0.20201013.422 yes Да— поддержка из версии пакета: 20.2-2~deb10u1

В настоящее время Azure Stack поддерживает подготовку образов с поддержкой cloud-init.

Разница между cloud-init и агентом Linux (WALA)

WALA — это уникальный агент платформы Azure, использующийся для подготовки и настройки виртуальных машин и обработки расширений Azure.

Мы повышаем задачу настройки виртуальных машин для использования cloud-init вместо агента Linux, чтобы разрешить существующим клиентам cloud-init использовать текущие скрипты cloud-init или новые клиенты, чтобы воспользоваться преимуществами расширенных функций конфигурации cloud-init. Если у вас уже есть скрипты cloud-init для настройки систем Linux, то для включения их обработки с использованием cloud-init дополнительные параметры не требуются.

Cloud-init не может обрабатывать расширения Azure, поэтому для обработки расширений в образе должен присутствовать WALA, однако его код подготовки необходимо отключить, чтобы конвертируемые поддерживаемые дистрибутивы Linux могли подготовить cloud-init, а затем установить и правильно настроить WALA.

При создании виртуальной машины, если вы не включаете переключатель Azure CLI --custom-data во время подготовки, cloud-init или WALA принимает минимальные параметры подготовки виртуальных машин, необходимые для подготовки виртуальной машины и завершения развертывания по умолчанию. Если вы ссылаетесь на конфигурацию cloud-init с параметром --custom-data, все содержимое ваших пользовательских данных будет доступно для cloud-init при загрузке виртуальной машины.

Конфигурации cloud-init, применяемые к виртуальным машинам, не имеют ограничений во времени и не приводят к сбою развертывания при истечении времени ожидания. Это не так для WALA, если вы измените WALA по умолчанию для обработки пользовательских данных, это не может превышать общее пособие на время подготовки виртуальных машин в 40 минут, если это так, создание виртуальной машины завершится ошибкой.

Подготовка виртуальной машины с помощью cloud-init без драйвера UDF

Начиная с cloud-init 21.2, можно использовать cloud-init для подготовки виртуальной машины в Azure без драйвера UDF. Если драйвер UDF в образе недоступен, cloud-init использует для подготовки виртуальной машины метаданные, доступные в Службе метаданных экземпляров Azure. Этот параметр подходит только для ключей SSH и пользовательских данных. Чтобы передать виртуальной машине пароль или пользовательские данные во время подготовки, необходимо использовать драйвер UDF.

Развертывание виртуальной машины с поддержкой cloud-init

Развертывать виртуальную машину с включенным cloud-init так же просто, как и ссылаться на распределение с включенным cloud-init во время развертывания. Распространители дистрибутивов Linux должны включать и интегрировать cloud-init в свои базовые опубликование образы Azure. Убедившись, что образ, который вы хотите развернуть, включен в cloud-init, можно использовать Azure CLI для развертывания образа.

Первым шагом при развертывании образа является создание группы ресурсов с использованием команды az group create. Группа ресурсов Azure является логическим контейнером, в котором происходит развертывание ресурсов Azure и управление ими.

В следующем примере создается группа ресурсов с именем myResourceGroup в расположении eastus.

az group create --name myResourceGroup --location eastus

Следующим действием является создание файла cloud-init.txt в текущей оболочке и вставка следующей конфигурации. Для этого примера создайте файл в Cloud Shell (не на локальном компьютере). Вы можете использовать любой редактор. Введите sensible-editor cloud-init.txt, чтобы создать файл и просмотреть список доступных редакторов. В этом примере мы используем редактор nano . Выберите первый пункт, чтобы использовать редактор nano. Убедитесь, что весь файл cloud-init скопирован правильно, особенно первая строка:

SLES Ubuntu RHEL
# cloud-config
package_upgrade: true
packages:
- apache2
# cloud-config
package_upgrade: true
packages:
- httpd
# cloud-config
package_upgrade: true
packages:
- httpd

Примечание.

cloud-init использует несколько типов входных данных, и в первой строке customData/userData cloud-init указывает, как следует обрабатывать входные данные, например #cloud-config обозначает, что содержимое должно обрабатываться как конфигурация cloud-init.

Нажмите клавиши Ctrl + X, чтобы выйти из файла, введите y, чтобы сохранить изменения в файле, а затем нажмите клавишу Enter, чтобы подтвердить имя файла при выходе.

Последним шагом является создание виртуальной машины с использованием команды az vm create.

В следующем примере создается виртуальная машина с именем centos74 и создаются ключи SSH, если они еще не существуют в расположении ключа по умолчанию. Чтобы использовать определенный набор ключей, используйте параметр --ssh-key-value. Используйте параметр --custom-data, чтобы передать файл конфигурации cloud-init. Укажите полный путь к конфигурации cloud-init.txt, если этот файл сохранен вне текущего рабочего каталога.

az vm create \
  --resource-group myResourceGroup \
  --name centos74 \
  --image OpenLogic:CentOS-CI:7-CI:latest \
  --custom-data cloud-init.txt \
  --generate-ssh-keys 

После создания виртуальной машины в Azure CLI появятся сведения о вашем развертывании. Запишите значение publicIpAddress. Этот адрес используется для доступа к виртуальной машине. На создание виртуальной машины, установку пакетов и запуск приложения может потребоваться некоторое время. Некоторые фоновые задачи продолжают работу после возврата к командной строке в Azure CLI. Вы можете подключиться к виртуальной машине по протоколу SSH и выполнить шаги, описанные в разделе "Устранение неполадок", чтобы просмотреть журналы cloud-init.

Вы также можете развернуть виртуальную машину с поддержкой cloud-init, передав параметры в шаблоне ARM.

Устранение неполадок cloud-init

После подготовки виртуальной машины cloud-init запустит все модули и скрипты, заданные в параметре --custom-data, для ее настройки. Если вам необходимо устранить ошибки или пропуски в конфигурации, найдите имя модуля (disk_setup или runcmd, к примеру) в журнале cloud-init, который находится в файле /var/log/cloud-init.log.

Примечание.

Не каждый сбой модуля приводит к неустранимому сбою всей конфигурации cloud-init. Например, если используется модуль runcmd, при сбое скрипта cloud-init все еще будет отображать сообщение об успешной подготовке, так как выполнен модуль runcmd.

Дополнительные сведения о ведении журнала cloud-init см. в документации по cloud-init

Телеметрия

cloud-init собирает данные об использовании и отправляет их в корпорацию Майкрософт для улучшения наших продуктов и услуг. Данные телеметрии собираются только во время процесса подготовки (первая загрузка виртуальной машины). Собранные данные помогают нам исследовать сбои подготовки и следить за производительностью и надежностью. Собранные данные не включают идентификаторы (личные идентификаторы). Подробнее см. в нашем заявлении о конфиденциальности. Ниже приведены некоторые примеры сбора данных телеметрии (это не исчерпывающий список): сведения, связанные с ОС (версия cloud-init, дистрибутив, версия ядра), метрики производительности основных действий подготовки виртуальных машин (время для получения аренды DHCP, время получения метаданных, необходимых для настройки виртуальной машины и т. д.), журнала cloud-init и журнала dmesg.

Коллекция телеметрии в настоящее время включена для большинства образов Marketplace, использующих cloud-init. Он включен путем указания репортера телеметрии KVP для cloud-init. В большинстве образов Azure Marketplace эта конфигурация находится в файле /etc/cloud/cloud.cfg.d/10-azure-kvp.cfg. Если удалить этот файл во время подготовки образа, сбор данных телеметрии будет отключен для любой виртуальной машины, созданной на основе этого образа.

Пример содержимого 10-azure-kvp.cfg

reporting:
  logging:
    type: log
  telemetry:
    type: hyperv

Следующие шаги

Устранение неполадок с cloud-init

Примеры изменения конфигураций с помощью cloud-init см. в следующих документах: