Как работает cloud-init?

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

Но как именно это работает? Как пользовательские данные отправляются на виртуальную машину и как cloud-init удается выполнить настройки?

Спасибо.

2 ответа

Решение

Краткий ответ - источники данных.

Cloud-init имеет концепцию источников данных, которые указывают на источник пользовательских данных и метаданных.

Посмотрите здесь https://cloudinit.readthedocs.io/en/latest/topics/datasources.html

Отказ от ответственности: это очень сложное решение, существует множество поддерживаемых поставщиков облачных услуг, и оно используется по-разному, но я думаю, что это довольно точный упрощенный обзор.

Сначала пара незначительных исправлений: может работать на любой машине, а не только на виртуальной машине, и может работать при любой загрузке, а не только при «первой загрузке». По сути, это просто способ запуска скриптов во время загрузки. Например, текущие образы серверов Ubuntu поставляются с предустановленной системой и запускаются во время загрузки даже на рабочем столе.

Однако основной вариант использования — первая загрузка «облачных образов». Проблема здесь в том, что поставщики облачных услуг хотят выпустить официальную версию дистрибутива, которая просто работает, без необходимости фактического выполнения установки конечным пользователем или без необходимости каким-либо образом модифицировать дистрибутив поставщику облачных услуг. обрабатывает это, получая данные конфигурации в различных точках процесса загрузки. На практике это, как правило, имена пользователей, пароли, ssh-ключи, локали, имена хостов, дополнительные репозитории и т. д. Другими словами, это те данные, которые вы вводили вручную во время установки, но обычно без настройки сети.

часто может точно определить, что именно работает во время загрузки, запрашивая DMI/SMBIOS или конкретный файл, например/proc/1/environ. В этих случаях он имеет встроенную информацию о том, где найти необходимые данные конфигурации. Однако в целом данные будут поступать из сети или, в противном случае, из файловой системы, связанной с образом.

Многие (большинство? все?) поставщики облачных услуг используют частный веб-сервер для хранения изображений, настроенный дляeth0(вместо этого изображение может получить необходимую конфигурацию сети из другого источника данных, но я думаю, что гораздо чаще просто использоватьdhcp, что является запасным положением). Веб-сервер отвечает на запросы данных пользователя, поставщика и экземпляра. Если вы установили виртуальную машину у облачного провайдера, вы увидитеuser-dataблок, который вы можете заполнить — он возвращается как пользовательские данные.

В документации есть простое руководство , которое делает именно это: оно использует QEMU для запуска образа, аqemu-system-x86_64командная строка устанавливает изображениеsmbiosinfo, чтобы указать, где находится веб-сервер Python (10.0.2.2:8000). На практике большинство поставщиков облачных услуг обслуживают частные данные по адресу 169.254.169.254. Это «Служба метаданных экземпляра» (IMDS).

Существуют различные другие способы получения данных в дополнение к IMDS или вместо него: раздел диска с меткойconfig-2, например, который прикрепляется к экземпляру при его загрузке, или к командной строке ядра, или к конкретным файлам в файловой системе.

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

Другие вопросы по тегам