<div><img src="https://top-fwz1.mail.ru/counter?id=3548135;js=na" style="position:absolute;left:-9999px;" alt="Top.Mail.Ru" /></div>
Публичное облако на базе VMware с управлением через vCloud Director
Вход / Регистрация

Установка и настройка cloud-init в Ubuntu

0
8 минут чтения
Средний рейтинг статьи: 5

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

К его ключевым функциям относятся:

  • Автоматизация базовой настройки системы, включая назначение hostname.

  • Управление учетными записями: создание пользователей, назначение прав и настройка механизмов аутентификации.

  • Программное развертывание SSH-ключей для безопасного доступа.

  • Конфигурация сетевых интерфейсов в соответствии с заданными параметрами.

  • Операции с дисковыми пространствами, такие как монтирование и форматирование томов.

  • Исполнение пользовательских сценариев (скриптов) для пост-установочной настройки, что может включать в себя установку программного обеспечения, развертывание кода приложений и применение тонких настроек.

Хотя в первую очередь cloud-init предназначен для работы в публичных облаках (AWS, Google Cloud, Azure, Timeweb Cloud, Yandex Cloud), его также можно использовать на локальных виртуальных машинах и даже на физических серверах для стандартизации их первоначальной настройки. 

В этой статье мы рассмотрим, как установить, настроить и использовать cloud-init на Ubuntu.

cloud

Установка

В большинстве образов Ubuntu cloud-init уже предустановлен. 

В Timeweb Cloud все образы Ubuntu уже содержат в себе cloud-init. 

Также компания Canonical (разработчик дистрибутива Ubuntu) выпускает образы под названием Ubuntu Cloud Images, специально подготовленные и оптимизированные для запуска в облачных средах. 

Дополнительно проверить наличие cloud-init можно при помощи команды:

cloud-init --version

Image4

Если команда отразила версию, как на скриншоте выше, то cloud-init уже установлен в системе. Если же в ответ была возвращена фраза Command cloud-init not found, необходимо выполнить установку утилиты:

apt update && apt -y install cloud-init

После установки cloud-Init будет автоматически запускаться при каждой загрузке системы. Также стоит отметить что cloud-init запускается до подключения сервера к сети.

Структура конфигурационных файлов

Все конфигурационные файлы cloud-init находятся в директории /etc/cloud/:

  • /etc/cloud/clean.d/ — каталог для скриптов очистки. Эти скрипты выполняются, когда запускается команда cloud-init clean.

  • /etc/cloud/cloud.cfg — главный конфигурационный файл. Здесь задаются настройки по умолчанию для всех этапов инициализации.

  • /etc/cloud/cloud.cfg.d/ — директория для пользовательских конфигурационных файлов с расширением .cfg. Файлы обрабатываются в алфавитном порядке и переопределяют настройки из основного файла. Это предпочтительное место для ваших кастомных настроек.

  • /etc/cloud/templates/ — каталог содержит шаблоны, которые cloud-init использует для генерации системных файлов.

  • /var/lib/cloud/ — здесь хранятся кеш, данные и скрипты, сгенерированные во время выполнения cloud-init.

Модули

Модули в cloud-init — это отдельные исполняемые компоненты, которые выполняют конкретные задачи по настройке виртуальной машины при ее первом запуске. Каждый модуль отвечает за свою область: настройку сети, создание пользователей, установку пакетов и т.д.

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

  • Init Stage (Этап инициализации): Происходит сразу после монтирования корневой файловой системы. Здесь выполняются модули, которые нужны для подготовки системы к основной конфигурации (например, монтирование дополнительных дисков).

  • Config Stage (Этап конфигурации): Основной этап, на котором выполняется большая часть модулей: настройка сети, установка пакетов, настройка SSH-ключей, создание пользователей.

  • Final Stage (Финальный этап): Здесь запускаются модули для выполнения задач, которые должны произойти в самом конце, например, отправка уведомления о готовности системы или запуск пользовательских скриптов.

Локальное использование cloud-init

Для начала протестируем cloud-init локально, то есть выполним его уже после запуска сервера. Мы создадим два сценария:

  • Первый сценарий создаст нового пользователя с именем new-admin. Пользователю будет задан пароль и выданы права администратора.

  • Второй сценарий установит пакеты atop, tree, net-tools.

1) Так как для создаваемого пользователя мы будем использовать пароль, нам необходимо сгенерировать его хеш — по умолчанию все пароли (и любые другие секреты) указываются в явном виде. Для получения хеша установим пакет whois, который содержит в себе утилиту mkpasswd:

apt -y install whois

2) Запускаем утилиту, указав алгоритм хеширования sha-512:

mkpasswd -m sha-512 --stdin

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

1fa06665 1742 4df4 9ec9 Fdb18751f8cc

Копируем хеш, который мы будем использовать далее. 

3) Как мы отмечали ранее, пользовательские конфигурационные файлы хранятся в директории /etc/cloud/cloud.cfg.d. Создаем в ней новый файл 99-new-admin-config.cfg:

nano /etc/cloud/cloud.cfg.d/99-new-admin-config.cfg

Используем следующее содержимое:

#cloud-config
users:
  - name: new-admin
    passwd: $6$BSAzGG4SFvsn//vD$ds8oM53OIs6qXiCIhMTl10bwQfe9u5WxGKADzwyPsODniGhYAXCUOAoyUkJLs.H9z0PxqLr7BxEJ18hT2VEyR/
    sudo: ALL=(ALL) ALL
    shell: /bin/bash
    groups: sudo

4) Проверим синтаксис на наличие ошибок:

cloud-init schema --config-file /etc/cloud/cloud.cfg.d/99-new-admin-config.cfg

Image9

Если ошибок нет, то команда вернет Valid schema

5) Перед тем как запустить скрипт, очистим конфигурацию при помощи команды:

cloud-init clean

6) Запускаем конфигурацию:

cloud-init single --name users-groups --file /etc/cloud/cloud.cfg.d/99-new-admin-config.cfg

7) После того как новая конфигурация была применена, проверим наличие пользователя new-admin:

id new-admin

Eddd6dcd E572 47b4 9379 B661273459e5

8) Далее установим пакеты. Создаем новый файл:

nano /etc/cloud/cloud.cfg.d/99-install-packages.cfg

Используем следующее содержимое:

#cloud-config
package_update: true
package_upgrade: true
packages:
  - atop
  - tree
  - net-tools

8) Проверим синтаксис на наличие ошибок:

cloud-init schema --config-file /etc/cloud/cloud.cfg.d/99-install-packages.cfg

Image10

9) Очищаем конфигурацию:

cloud-init clean

10) Запускаем скрипт для установки пакетов при помощи команды:

cloud-init single --name package_update_upgrade_install --file /etc/cloud/cloud.cfg.d/99-install-packages.cfg

10) Проверяем наличие установленных пакетов:

dpkg -l | grep -E "atop|tree|net-tools"

Image6

Использование cloud-init в Timeweb Cloud

Облачные серверы Timeweb Cloud на ОС Linux поддерживают работу с cloud-init через панель управления. Настроить сценарии можно как в процессе заказа сервера, так и в дальнейшем при его использовании. Рассмотрим применение cloud-init на практике. 

Мы создадим сценарий, который:

  • Создаст нового пользователя с именем new-usr;

  • Настроит аутентификацию по SSH ключам для пользователя new-usr;

  • Установит два пакета — mc, ncdu;

  • Поменяет имя хоста на timeweb-cloud-server;

  • Создаст файл test-file.txt в директории /tmp.

Если на сервере уже запускались какие-либо скрипты cloud-init, то перед запуском приведенной ниже конфигурации необходимо выполнить команду cloud-init clean

Наш сценарий будет выполняться при создании виртуального сервера — его можно добавить на шаге 7:

Image1

1) Так как для нового пользователя будет использоваться аутентификация по SSH-ключам, необходимо заранее их сгенерировать. Для этого на другом устройстве (можно использовать домашний компьютер под управлением Windows, macOS, Linux) выполняем команду в терминале для создания ключей:

ssh-keygen

361bcea6 6f4e 47c1 87ae 4563b542b467

Сохраняем ключи в директорию по умолчанию (скрытая директория .ssh в домашнем каталоге текущего пользователя). Далее необходимо получить значение открытого ключа (файл с расширением .pub):

cat ~/.ssh/id_ed25519.pub

Здесь id_ed25519.pub — это имя файла с открытым ключом. Не забудьте заменить имя на свое.

368f2b0d 7c5e 4562 Bbc6 B0c843776a57

3) Возвращаемся в панель управления и в блоке cloud-init прописываем следующий синтаксис:

#cloud-config
packages:
  - mc
  - ncdu

users:
  - name: "new-usr"
    groups: sudo
    shell: /bin/bash
    sudo: ['ALL=(ALL) NOPASSWD:ALL']
    ssh_authorized_keys:
      - ssh-rsa AAAAC3NzaC1lZDI1NTE5AAAAIFoUTI5BKDBDgKLIMpM71m/YI7dTtFKQiSIivRk9pUbs alex@DESKTOP-VTUJHJ9
    lock_passwd: true

hostname: timeweb-cloud-server
preserve_hostname: false

runcmd:
  - [touch, /tmp/test-file.txt]

В поле ssh_authorized_keys необходимо прописать значение вашего открытого ключа.

Image12

4) Для завершения заказа сервера нажимаем на кнопку «Заказать».

5) После того как сервер будет создан, подключаемся по SSH под новым созданным пользователем и проверяем, что все ранее указанные действия были выполнены.

Проверка пользователя:

id new-usr

Image2

Проверка установленных пакетов:

dpkg -l | grep -E "mc|ncdu"

Image14

Проверка имени хоста:

hostname

Image5

Проверка наличия созданного файла:

ls -lah /tmp/test-file.txt

Image13

Запустите свой Ubuntu-сервер в облаке

Заключение

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

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

0
8 минут чтения
Средний рейтинг статьи: 5
Хотите внести свой вклад?
Участвуйте в нашей контент-программе за
вознаграждение или запросите нужную вам инструкцию
img-server
Пока нет комментариев