Поделиться через


Углубленное изучение 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 существует пять этапов загрузки конфигурации. Выходные данные этих этапов отображаются в журналах.

  1. Этап генерации. Запускается системный генератор cloud-init, который определяет, что cloud-init следует включить в цели загрузки, и, если все корректно настроено, он включает cloud-init.

  2. Локальный этап Cloud-init: здесь cloud-init ищет локальный источник данных Azure, который позволяет cloud-init интерфейсу интерфейсировать с Azure и применять конфигурацию сети, включая резервный вариант.

  3. Этап инициализации с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, которую виртуальная машина была подготовлена успешно. Некоторые модули могут завершиться сбоем, однако не все сбои модуля автоматически приводят к сбою подготовки.

  4. Этап конфигурации Cloud-init: на этом этапе модули в cloud_config_modules определенных и перечисленных в /etc/cloud/cloudcfg запусках.

  5. Последний этап cloud-init: на этом последнем этапе модули в , перечисленных в cloud_final_modules/etc/cloud/cloud.cfg, выполняются. Здесь приведены модули, которые необходимо запускать в конце процесса загрузки, такие как установка пакета, запуск сценариев и т. д.

    • На этом этапе можно запускать скрипты, помещая их в каталоги в разделе /var/lib/cloud/scripts:
      • per-boot — скрипты в этом каталоге выполняются при каждой перезагрузке
      • per-instance — скрипты в этом каталоге запускаются при первой загрузке нового экземпляра
      • per-once — скрипты в этом каталоге выполняются только один раз

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

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