3.9.15.3 Установка cloud-init, сценарии и использование в облачных средах
Установка cloud-init
Основные этапы работы и модули cloud-init
Сценарии для cloud-init
Локальный запуск cloud-init
Пример использования локальных сценариев
Примеры сценариев
Использование cloud-init в облачных средах
Отключение cloud-init
Окружение
- Версия РЕД ОС: 8
- Конфигурация: Сервер графический
- Версия ПО: cloud-init-23.2
Cloud-init — программное обеспечение, разработанное для автоматической настройки виртуальных машин пользователя при первичном запуске. Виртуальные машины с помощью cloud-init автоматически конфигурируются при первой загрузке сетевыми настройками, ключами SSH, пакетами, новыми пользователями и другими системными аспектами.
Cloud-init позволяет системным администраторам экономить время и усилия по сравнению с ручной настройкой каждой виртальной машины.
Установка cloud-init
Предварительно пакет cloud-init должен быть установлен на виртуальной машине.
Для установки cloud-init выполните следующие действия:
1. Авторизуйтесь на виртуальной машине.
2. Установите пакет cloud-init на виртуальной машине, выполнив в терминале следующую команду с правами администратора:
sudo dnf install cloud-init
3. После установки службу cloud-init необходимо добавить в автозагрузку, чтобы она запускалась автоматически при старте системы. Таким образом, cloud-init начинает работать с момента запуска машины (до подключения сети), выполняя первоначальную конфигурацию.
Для запуска и добавления cloud-init и сопутствующих служб в гостевой системе в автозагрузку выполните команду:
sudo systemctl enable cloud-init cloud-config cloud-final --now
4. Для проверки текущего состояния служб используйте следующую команду:
sudo systemctl status cloud-init cloud-config cloud-final
При успешно выполненных настройках в статусе каждой службы должно отображаться active (exited).
При возникновении проблем можно просмотреть логи cloud-init, которые могут помочь в диагностике:
sudo tail -f /var/log/cloud-init.log
sudo tail -f /var/log/cloud-init-output.log
Основные этапы работы и модули cloud-init
Работу cloud-init можно разделить на несколько ключевых этапов, каждый из которых выполняет определенные задачи для конфигурации системы. Эти этапы можно объединить в три основные фазы, каждая из которых активирует соответствующие службы cloud-init.
1. Обнаружение (Detect) и локализация (Local) — на этих этапах cloud-init определяет платформу виртуальной машины и находит локальные источники данных. Также на этом этапе применяется сетевая конфигурация, включая резервную, и очищаются устаревшие настройки. Активные службы:
cloud-init-local.service,
cloud-init.service.
2. Сетевой этап (Network) и этап конфигурации (Config) — на этих этапах обрабатываются пользовательские данные, выполняются модули disk_setup и mounts, а также запускаются модули конфигурации. Активная служба:
- cloud-config.service.
3. Финальный этап (Final) — данный этап завершает процесс загрузки системы, начинается выполнение пользовательских задач, такие как установка пакетов, выполнение плагинов систем управления конфигурациями и запуск пользовательских скриптов. Активные службы:
cloud-final.service,
cloud-init-hotplugd.service.
В cloud-init доступно множество дополнительных модулей, расширяющих возможности конфигурации системы. Дополнительную информацию по модулям можно получить на официальном сайте. Модули можно добавлять или удалять. Они выполняются последовательно на каждом из этапов. Модули разделены на три группы в зависимости от этапа, на котором они запускаются:
cloud_init_modules — модули, выполняемые на этапе инициализации, до подключения к сети;
cloud_config_modules — модули, активируемые после подключения к сети на этапе конфигурации;
- cloud_final_modules — модули, выполняемые на финальном этапе.
Сценарии для cloud-init
При запуске системы cloud-init проверяет конфигурационные файлы, написанные в формате YAML, и выполняет указанные в них инструкции.
Основным конфигурационным файлом cloud-init является /etc/cloud/cloud.cfg.
Этот файл содержит ключевые настройки системы и представляет собой главный сценарий конфигурации, в котором прописываются директивы и их параметры. Каждая директива связана с конкретным модулем cloud-init, который выполняет определённую задачу. Конфигурационный файл можно редактировать, используя текстовый редактор.
Локальный запуск cloud-init
Для локального запуска cloud-init и проверки его работы можно использовать несколько команд. Эти команды помогут инициализировать, запустить модули и проверить результат работы cloud-init.
1. Для запуска cloud-init в локальном режиме используйте следующую команду:
sudo cloud-init init --local
Эта команда выполняет только локальные модули и сценарии, которые предназначены для выполнения ДО подключения к сети.
2. Запуск модулей cloud-init. Можно запускать различные модули cloud-init в зависимости от стадии инициализации. Команда запускает конфигурационные модули, которые предназначены для конфигурации системы, используя доступные сетевые ресурсы:
sudo cloud-init modules --mode=config
Для запуска финальных модулей, которые запускаются после полной конфигурации системы, используйте команду:
sudo cloud-init modules --mode=final
3. Для проверки текущего состояния cloud-init и корректного выполнения модулей используйте команду:
cloud-init status
Вывод status: done
означает, что cloud-init завершил свою работу без ошибок.
Пример использования локальных сценариев
Подход позволяет автоматизировать задачи по конфигурации системы, задавая параметры на этапе запуска виртуальной машины. Сценарии могут включать установку пакетов, настройку пользователей, управление сервисами и многое другое.
Для настройки имени хоста при загрузке виртуальной машины выполните следующие действия:
1. Создайте новый файл конфигурации my-cloud-config.cfg в каталоге /etc/cloud/cloud.cfg.d/.
Все файлы с расширением *.cfg в этом каталоге будут прочитаны с помощью #cloud-init
. Они читаются в лексическом порядке. Более поздние файлы перезаписывают значения в более ранних файлах.
sudo nano /etc/cloud/cloud.cfg.d/my-cloud-config.cfg
2. Вставьте следующее содержимое сценария в файл:
#cloud-config
hostname: my-server
fqdn: my-server.ru
manage_etc_hosts: true
где:
#cloud-config — указывает на то, что это инструкции для cloud-init передаются в формате YAML;
hostname — задает короткое имя хоста;
fqdn — задает полное имя хоста;
manage_etc_hosts — разрешает cloud-init управлять файлом /etc/host.
3. Сохраните и закройте файл, нажав Ctrl+O
, затем Enter
, чтобы сохранить, и Ctrl+X
, чтобы выйти.
4. Проверьте конфигурацию. После создания или редактирования сценария можно проверить конфигурацию, запустив cloud-init в режиме проверки:
sudo cloud-init init --local sudo cloud-init modules --mode=config sudo cloud-init modules --mode=final
5. Примените изменения.
Для применения внесенных в конфигурацию изменений выполните:
sudo systemctl restart cloud-init
Для полной переинициализации cloud-init (Внимание! Это может привести к сбросу некоторых настроек!) выполните команды:
sudo cloud-init clean sudo cloud-init init
6. В некоторых случаях может потребоваться перезагрузка системы:
reboot
7. Проверьте, что изменения были применены.
Например, для проверки имени хоста выполните команду:
hostname
Примеры сценариев
Пример 1. Настройка имени хоста.
#cloud-config
hostname: my-server
fqdn: my-server.ru
manage_etc_hosts: true
Пример 2. Установка пакетов.
#cloud-config
packages:
- git
- tox
- htop
Пример 3. Настройка сети.
#cloud-config
network:
version: 2
ethernets:
eth0:
dhcp4: true
При запуске новой виртуальной машины или физического сервера, система автоматически настраивает сетевой интерфейс eth0 для использования DHCPv4. Это означает, что интерфейс будет отправлять запросы на роутер или сервер DHCP в сети, чтобы получить IP-адрес и другие параметры сети.
Проверить применение настроек файла конфигурации можно с помощью команды:
ip addr
Пример 4. Запуск скриптов.
#cloud-config
runcmd:
- echo "Hello, World!" > /home/user/hello.txt
- systemctl start firebird.service
где:
echo "Hello, World!" > /home/user/hello.txt — создает (или перезаписывает) файл /home/user/hello.txt с текстом "Hello, World!".
systemctl start firebird.service — запускает службу Firebird, если она установлена на виртуальной машине.
Проверить применение настроек файла конфигурации можно с помощью команды:
cat /home/user/hello.txt systemctl status firebird.service
Пример 5. Установка и настройка временной зоны.
#cloud-config
timezone: US/Eastern
где:
timezone — настройка временной зоны.
Для проверки timezone используйте команду:
timedatectl Local time: Пт 2024-09-20 06:34:40 EDT Universal time: Пт 2024-09-20 10:34:40 UTC RTC time: Пт 2024-09-20 10:34:40 Time zone: US/Eastern (EDT, -0400) System clock synchronized: yes NTP service: active RTC in local TZ: no
Пример 6. Запуск нескольких команд при первой загрузке.
Приведенный сценарий сохраняет содержимое веб-страницы в файл и запускает команду echo с аргументами.
#cloud-config
runcmd:
- [ wget, "https://ya.ru/", -O, /tmp/index.html ]
- [ sh, -xc, "echo $(date) ': hello world!'" ]
где:
runcmd — используется для указания списка команд, которые должны быть выполнены после завершения основной конфигурации cloud-init, но ДО первого входа в систему;
wget — используется для загрузки веб-страницы https://ya.ru/ и сохранения ее содержимого в файл /tmp/index.html;
sh -xc — запускает команду echo с аргументами $(date) ': hello world!'. Аргумент -x указывает, что команда должна быть выведена на экран перед выполнением, а -c указывает, что следующая строка — команда, которую нужно выполнить.
Проверьте содержимое файла /tmp/index.html. Если команда wget была выполнена успешно, то в этом файле должно быть сохранено содержимое веб-страницы. Можно просмотреть содержимое файла в терминале:
cat /tmp/index.html
Использование cloud-init в облачных средах
Применение в облачных средах:
1. Развертывание масштабируемых приложений.
В облачных средах для быстрого развертывания большого количества виртуальных машин сloud-init позволяет сократить время на настройку и конфигурацию серверов.
2. Упрощение управления инфраструктурой.
Вместо ручной конфигурации каждой виртуальной машины, администраторы могут создавать шаблоны конфигураций с помощью cloud-init. Шаблоны могут автоматически применяться к новым экземплярам виртуальных машин при их создании.
3. Обеспечение единообразия окружения.
Используя cloud-init, можно гарантировать, что каждая виртуальная машина будет иметь одинаковую базовую конфигурацию, что снижает вероятность ошибок, связанных с ручной настройкой.
Алгоритм для использования конфигурации с помощью облачного провайдера
1. Создание конфигурационного файла. Сохраните файл конфигурации, например, /etc/cloud/cloud.cfg.d/my-cloud-config.cfg в формате YAML.
2. Использование cloud-init с образом ВМ. Убедитесь, что ваш облачный провайдер поддерживает cloud-init. При создании нового экземпляра виртуальной машины в облаке загрузите созданный YAML-файл в качестве пользовательских данных.
3. Запуск виртуальной машины. Запустите экземпляр ВМ. Cloud-init автоматически выполнит конфигурацию при первом запуске.
Настройка cloud-init в облачных сервисах
В каждом облаке существует сервис, передающий виртуальной машине информацию о её окружении. Эта информация поступает в несколько типов данных, которые cloud-init использует в определённой последовательности.
1. Пользовательские данные (user-data). Это настройки и директивы, указанные в конфигурационном файле /etc/cloud/cloud.cfg. В них могут быть прописаны файлы для выполнения, пакеты для установки, скрипты оболочки и другие инструкции. Пользовательские данные, как правило, служат для настройки конкретного экземпляра виртуальной машины. Данные используются для автоматизации различных сценариев, таких как установка необходимого ПО, настройка сервера или управление конфигурациями. Cloud-init считывает пользовательские данные и, если они заданы в поддерживаемом формате, выполняет действия, описанные в этих данных.
2. Метаданные (meta-data). Информация об окружении виртуальной машины, такая как имя сервера, внутренний и публичный IP-адрес, идентификатор экземпляра, публичный SSH-ключ и тип виртуальной машины. Метаданные используются для настройки после применения пользовательских данных.
3. Данные поставщиков (vendor-data). Информация, предоставляемая облачными провайдерами или разработчиками, которая помогает настроить образ виртуальной машины для корректной работы в облаке. Эти данные обычно задают конфигурации по умолчанию и применяются после метаданных.
Отключение cloud-init
В некоторых случаях, когда автоматическая настройка ВМ с использованием cloud-init не требуется, служба может быть отключена.
Для отключения cloud-init доступно несколько способов.
Способ 1. Файл отключения службы. Для отключения cloud-init необходимо создать пустой файл /etc/cloud/cloud-init.disabled:
sudo touch /etc/cloud/cloud-init.disabled
Во время загрузки система инициализации операционной системы проверит существование этого файла. Если он существует, cloud-init не будет запущен.
Способ 2. Отключение через конфигурацию загрузчика. Для отключения cloud-init необходимо добавить параметр cloud-init=disabled в конфигурацию загрузчика и применить настройки для загрузчика:
для систем с BIOS:
sudo bash -c 'echo "GRUB_CMDLINE_LINUX=\"cloud-init=disabled\"" >> /etc/default/grub' sudo grub2-mkconfig -o /boot/grub2/grub.cfg
для систем с UEFI:
sudo bash -c 'echo "GRUB_CMDLINE_LINUX=\"cloud-init=disabled\"" >> /etc/default/grub' sudo grub2-mkconfig -o /boot/efi/EFI/redos/grub.cfg
Способ 3. Указание переменной окружения. Для отключения cloud-init также можно передать переменную окружения KERNEL_CMDLINE=cloud-init=disabled для каждого из процессов cloud-init:
sudo bash -c 'echo "DefaultEnvironment=KERNEL_CMDLINE=cloud-init=disabled" >> /etc/systemd/system.conf'
Дата последнего изменения: 14.01.2025
Если вы нашли ошибку, пожалуйста, выделите текст и нажмите Ctrl+Enter.