Cloud init ubuntu что это

Обновлено: 07.07.2024

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

Запуск bash-скрипта с помощью cloud-init

При использовании cloud-init нет необходимости преобразовывать скрипты в облачный формат (cloud-config), так как cloud-init поддерживает множество типов входных данных, в том числе bash-скрипты.

Если для запуска скриптов вы ранее использовали расширение Azure для пользовательских скриптов Linux, значит их можно без проблем перенести на cloud-init. Но не забывайте, что расширения Azure имеют встроенный механизм извещения об ошибках скриптов, поэтому развертывания образов cloud-init НЕ БУДУТ завершаться сбоем при сбоях скриптов.

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

Теперь создайте виртуальную машину с помощью команды az vm create и укажите нужный bash-скрипт с помощью --custom-data simple_bash.sh , как показано ниже.

Проверка выполнения bash-скрипта

Подключитесь по протоколу SSH к общедоступному IP-адресу виртуальной машины, который указан в выходных данных предыдущей команды. Введите свой общедоступный IP-адрес в качестве значения для publicIpAddress, как показано здесь:

Перейдите в каталог /tmp и убедитесь, что файл myScript.txt существует и содержит правильный текст. Если это не так, изучите журнал /var/log/cloud-init.log, чтобы получить дополнительные сведения. Найдите следующую запись:

Дальнейшие действия

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

cloud-init is the Ubuntu package that handles early initialization of a cloud instance. It is installed in the official Ubuntu live server images since the release of 18.04, Ubuntu Cloud Images and also in the official Ubuntu images available on EC2.

  • setting a default locale
  • setting hostname
  • generate ssh private keys
  • adding ssh keys to user's .ssh/authorized_keys so they can log in
  • setting up ephemeral mount points

cloud-init's behavior can be configured via user-data. User-data is passed to cloud-init by the user to the cloud provider at launch time, usually as a parameter in the CLI, template, or cloud portal used to launch an instance.

User Data Input Formats

  • This list of rules is applied to each part of this multi-part file. Using a mime-multi part file, the user can specify more than one type of data. For example, both a user data script and a cloud-config type could be specified.

This is a 'part-handler'. It will be written to a file in /var/lib/cloud/data based on its filename. This must be python code that contains a list_types method and a handle_type method. Once the section is read the 'list_types' method will be called. It must return a list of mime-types that this part-handler handlers.
The 'handle_type' method must be like:

User-Data Scripts

As popularized by alestic.com, user-data scripts are a convenient way to do something on first boot of a launched instance. This input format is accepted to cloud-init and handled as you would expect. The script will be invoked at an "rc.local" like point in the boot sequence.

After running the above, you can expect that /root/output.txt will contain the desired text.

Cloud Config Syntax

  • apt upgrade should be run on first boot
  • a different apt mirror should be used
  • additional apt sources should be added
  • certain ssh keys should be imported

The file must be valid yaml syntax.

Multipart Input

A single format of user data might not be enough to accomplish what you want. For example, you may want to insert an upstart job and also run a user-data script.

There is a tool in cloud-utils's bin/ directory called 'write-mime-multipart' which can aid creating mime multipart content.

Consider the following example:

Now, given the files above in the current directory, you can do:

    smoser's keys imported into the ubuntu users

More information

Examples of user-data for cloud-init can be seen in the Github examples directory.

Не вполне стандартные задачи, с которыми мне приходится сталкиваться по работе и способы их решения.

среда, 24 марта 2021 г.

Руководство администратора Proxmox VE R 6.0 Глава 10.8

Виртуальные машины Qemu/KVM

  1. Эмулированные устройства и паравиртуализированные устройства
  2. Параметры Виртуальных Машин
  3. Миграция
  4. Копии и клоны
  5. Шаблоны виртуальных машин
  6. Generation ID виртуальной машины
  7. Импорт ВМ и образов дисков
  8. Поддержка Cloud-Init
  9. Hookscripts
  10. Гибернация
  11. Управление VM с помощью qm
  12. Конфигурация
  13. Блокировки

Поддержка Cloud-Init

Cloud-Init (облачная инициализация) - это де-факто мульти-дистрибутивный пакет, который обрабатывает раннюю инициализацию экземпляра виртуальной машины. С помощью Cloud-Init возможна настройка сетевых устройств и ключей ssh на стороне гипервизора. Когда виртуальная машина запускается в первый раз, программное обеспечение Cloud-Init внутри виртуальной машины применяет эти настройки.

Многие дистрибутивы Linux предоставляют готовые к использованию образы Cloud-Init, в основном предназначенные для OpenStack. Эти образы также будут работать с Proxmox VE. Несмотря на то, что получение таких готовых образов может показаться удобным, мы как правило рекомендуем подготавливать образы самостоятельно. Преимущество в том, что вы будете точно знать, что вы установили, и это поможет вам позже легко настроить образ в соответствии с вашими требованиями.

После создания такого образа Cloud-Init мы рекомендуем преобразовать его в шаблон виртуальной машины. С шаблоном ВМ, вы можете быстро создавать связанные клоны, так что это быстрый метод развертывания новых экземпляров виртуальных машин. Вам только необходимо настроить сеть (и, возможно, ключи ssh) перед запуском новой виртуальной машины.

Мы рекомендуем использовать аутентификацию на основе ключей SSH для входа на виртуальные машины, предоставленные Cloud-Init. Также возможно установить пароль, но это не так безопасно, как использование аутентификации на основе ключа SSH, потому что Proxmox VE приходится хранить зашифрованную версию этого пароля в данных Cloud-Init.

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

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

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

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

Кроме того, 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
Canonical 20.04 UbuntuServer 20.04-LTS последняя да да
Canonical 18.04 UbuntuServer 18.04-LTS последняя да да

CentOS

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

Oracle;

SUSE SLES

Debian

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

В настоящее время 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.

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

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

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

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

После создания виртуальной машины в 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 см. в документации по cloud-init

Дальнейшие действия

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

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

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

Знакомство с конфигурациями cloud-init

Настройка виртуальной машины для работы на платформе означает, что инструменту cloud-init, как получателю образа, необходимо применить несколько конфигураций. Основные конфигурации, с которыми вы будете взаимодействовать, — это User data (customData), которые поддерживают несколько форматов. Дополнительные сведения см. в статье Форматы пользовательских данных и документация к cloud-init 21.2. Вы также можете добавлять и запускать скрипты (/var/lib/cloud/scripts) для дополнительной настройки, как описано ниже в этой статье.

Некоторые конфигурации уже заложены в образы 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 datasource, которая указывает, какой источник данных следует использовать в cloud-init, это сокращает время инициализации облака:

Этапы загрузки cloud-init (конфигурация обработки)

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

Этап генерации. Запускается системный генератор 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 :

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

Читайте также: