Как работает 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
командная строка устанавливает изображениеsmbios
info, чтобы указать, где находится веб-сервер Python (10.0.2.2:8000). На практике большинство поставщиков облачных услуг обслуживают частные данные по адресу 169.254.169.254. Это «Служба метаданных экземпляра» (IMDS).
Существуют различные другие способы получения данных в дополнение к IMDS или вместо него: раздел диска с меткойconfig-2
, например, который прикрепляется к экземпляру при его загрузке, или к командной строке ядра, или к конкретным файлам в файловой системе.
Обратите внимание, что это соответствует очень специфической нише, где поставщик должен предоставить конечному пользователю стандартный образ с некоторой настройкой. Вы можете запускать собственные образы у поставщика облачных услуг безcloud-init
, но некоторые поставщики не позволяют вам устанавливать собственные образы по причинам, хорошо известным им самим.