Истории успеха наших клиентов — лучшие проекты
Вход/ Регистрация

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

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

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

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

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

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

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

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

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

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

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

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

Облачные серверы

Масштабируемые вычислительные ресурсы
по всему миру с почасовой оплатой.

Установка

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

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

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

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

    

Image4

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

    

После установки 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:

    

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

    

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

1fa06665 1742 4df4 9ec9 Fdb18751f8cc

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

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

    

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

    

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

    

Image9

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

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

    

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

    

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

    

Eddd6dcd E572 47b4 9379 B661273459e5

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

    

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

    

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

    

Image10

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

    

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

    

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

    

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) выполняем команду в терминале для создания ключей:

    

361bcea6 6f4e 47c1 87ae 4563b542b467

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

    

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

368f2b0d 7c5e 4562 Bbc6 B0c843776a57

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

    

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

Image12

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

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

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

    

Image2

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

    

Image14

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

    

Image5

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

    

Image13

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

Cloud MSK 15

477 ₽/мес

Процессор
1 x 3.3 ГГц
Память
1 ГБ
NVMe
15 ГБ
Канал
1 Гбит/с
Публичный IP
Cloud MSK 30

657 ₽/мес

Процессор
1 x 3.3 ГГц
Память
2 ГБ
NVMe
30 ГБ
Канал
1 Гбит/с
Публичный IP

Заключение

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

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

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