Углубленное изучение cloud-init
Область применения: ✔️ Виртуальные машины Linux ✔️ Гибкие масштабируемые наборы
Чтобы узнать больше о cloud-init или устранить проблему на более глубоком уровне, необходимо понять принцип его работы. В этом документе описываются важные компоненты и объясняются особенности Azure.
Если cloud-init включен в обобщенный образ и виртуальная машина создается на основе этого образа, она обрабатывает конфигурации и выполняется через пять этапов во время начальной загрузки. На этих этапах показано, в какой момент cloud-init применяет свои конфигурации.
Знакомство с конфигурациями cloud-init
Настройка виртуальной машины для запуска на платформе использует cloud-init для применения нескольких конфигураций. Основными конфигурациями, с которыми вы взаимодействуете, является User data
(customData), которая поддерживает несколько форматов. Дополнительные сведения см. в статье Форматы пользовательских данных и документация к cloud-init 21.2. Вы также можете добавлять и запускать скрипты (/var/lib/cloud/scripts) для другой конфигурации.
Предварительно настроенные образы Azure Marketplace
Некоторые конфигурации уже запекаются в образах Azure Marketplace, которые входят в cloud-init.
Облачный источник данных — cloud-init содержит код, который может взаимодействовать с облачными платформами, эти коды называются источниками данных. При создании виртуальной машины из образа cloud-init в Azure cloud-init загружается источник данных Azure, который взаимодействует с конечными точками метаданных Azure для получения конкретной конфигурации виртуальной машины.
Конфигурация среды выполнения (/run/cloud-init).
Конфигурация образа (/etc/cloud), например
/etc/cloud/cloud.cfg
,/etc/cloud/cloud.cfg.d/*.cfg
. Пример использования этой конфигурации в Azure обычно используется для образов ОС Linux с cloud-init, чтобы иметь директиву источника данных Azure, которая сообщает cloud-init, какой источник данных он должен использовать, эта конфигурация экономит время cloud-init:sudo cat /etc/cloud/cloud.cfg.d/90_dpkg.cfg
# to update this file, run dpkg-reconfigure cloud-init datasource_list: [ Azure ]
Этапы загрузки cloud-init (конфигурация обработки)
При подготовке виртуальных машин с помощью cloud-init существует пять этапов загрузки конфигурации. Выходные данные этих этапов отображаются в журналах.
Этап генерации. Запускается системный генератор cloud-init, который определяет, что cloud-init следует включить в цели загрузки, и, если все корректно настроено, он включает cloud-init.
Локальный этап Cloud-init: здесь cloud-init ищет локальный источник данных Azure, который позволяет cloud-init интерфейсу интерфейсировать с Azure и применять конфигурацию сети, включая резервный вариант.
Этап инициализации сloud-init (сеть). Сеть должна работать, а также должны быть созданы сведения о таблице маршрутов и сетевой карте. На этом этапе модули, перечисленные в
cloud_init_modules
ней/etc/cloud/cloud.cfg
, выполняются. Виртуальная машина в Azure подключена, временный диск отформатирован, имя узла устанавливается вместе с другими задачами.Ниже приведены некоторые из
cloud_init_modules
следующих элементов:- migrator - seed_random - bootcmd - write-files - growpart - resizefs - disk_setup - mounts - set_hostname - update_hostname - ssh
На этом этапе cloud-init отправляет сигнал на платформу Azure, которую виртуальная машина была подготовлена успешно. Некоторые модули могут завершиться сбоем, однако не все сбои модуля автоматически приводят к сбою подготовки.
Этап конфигурации Cloud-init: на этом этапе модули в
cloud_config_modules
определенных и перечисленных в/etc/cloud/cloud
cfg запусках.Последний этап cloud-init: на этом последнем этапе модули в , перечисленных в
cloud_final_modules
/etc/cloud/cloud.cfg
, выполняются. Здесь приведены модули, которые необходимо запускать в конце процесса загрузки, такие как установка пакета, запуск сценариев и т. д.- На этом этапе можно запускать скрипты, помещая их в каталоги в разделе
/var/lib/cloud/scripts
:per-boot
— скрипты в этом каталоге выполняются при каждой перезагрузкеper-instance
— скрипты в этом каталоге запускаются при первой загрузке нового экземпляраper-once
— скрипты в этом каталоге выполняются только один раз
- На этом этапе можно запускать скрипты, помещая их в каталоги в разделе