Использование cloud-config при создании виртуального сервера

Назначение

Cloud-init — системный сервис, предустановленный в официальных образах виртуальных серверов. Используется для автоматической начальной настройки системы при первом запуске.

Формат передачи конфигурации — cloud-config (YAML).

С помощью cloud-config можно:

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

Результат: сервер автоматически конфигурируется при первом запуске без ручной настройки.


Как работает cloud-init

При создании сервера передаются данные инициализации (user-data).

Процесс выполнения:

  1. Сервер запускается
    Результат: начинается инициализация системы

  2. Cloud-init считывает переданные данные
    Результат: конфигурация загружается в систему

  3. При наличии формата #cloud-config применяется YAML-конфигурация
    Результат: выполняются заданные действия

  4. После завершения инициализации сервис завершает работу
    Результат: система готова к использованию

Основная конфигурация выполняется при первом запуске. Некоторые модули могут выполняться повторно — это зависит от их типа.


Важно

  • Cloud-init уже установлен в официальных образах
  • Поддерживаются все параметры из официальной документации

Формат cloud-config:
https://docs.cloud-init.io/en/latest/explanation/format/cloud-config.html

Примеры конфигураций:
https://docs.cloud-init.io/en/latest/reference/examples


Пример cloud-config

#cloud-config

users:
- default
- name: devops
  groups: sudo
  shell: /bin/bash
  sudo: ALL=(ALL) NOPASSWD:ALL
  ssh_authorized_keys:
    - ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQ... user@laptop

disable_root: true
ssh_pwauth: false

package_update: true
package_upgrade: false

packages:
  - curl
  - git
  - htop

runcmd:
  - echo "Cloud-init completed successfully" > /var/log/cloud-init-custom.log

Важно: замените публичный SSH-ключ на актуальный.

Шаблон можно использовать:

  • через консоль управления;
  • через OpenStack CLI;
  • через Terraform.

Добавление cloud-config через консоль

  1. Перейдите в раздел Серверы
    Результат: открыт список серверов

  2. Нажмите Создать сервер
    Результат: открыта форма создания

  3. Заполните параметры: регион, конфигурация, образ, сеть, SSH-ключ
    Результат: заданы базовые настройки

  4. В блоке Cloud-init нажмите Добавить
    Результат: открыто поле для конфигурации

  5. Вставьте cloud-config
    Результат: конфигурация добавлена

  6. Нажмите Применить
    Результат: данные сохранены

  7. Завершите создание сервера
    Результат: сервер создан с cloud-init

Итог: при первом запуске сервер автоматически выполнит указанные действия.


Использование cloud-config через CLI

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

cloud-init.yaml

Создайте сервер:

openstack server create \
--image <image_id> \
--flavor <flavor_id> \
--network <network_id> \
--key-name <ssh_key> \
--user-data cloud-init.yaml \
<server_name>

Параметр --user-data передает cloud-config в cloud-init.


Использование cloud-config через Terraform

resource "openstack_compute_instance_v2" "server" {
  name      = "example-server"
  image_id  = "<image_id>"
  flavor_id = "<flavor_id>"

  key_pair = "<ssh_key>"

  user_data = file("cloud-init.yaml")
}

Файл cloud-init.yaml должен содержать cloud-config.

Результат: Terraform передает конфигурацию в cloud-init при создании сервера.


Доступ к серверу

Если SSH-подключение не выполняется:

  • проверьте настройки Security Group;
  • убедитесь, что открыт порт 22.

Проверка выполнения cloud-init

Подключитесь к серверу:

ssh -i ~/.ssh/<KEY_NAME>.pem ubuntu@<PUBLIC_IP>

Проверьте лог выполнения:

sudo cat /var/log/cloud-init-custom.log

Ожидаемый результат:

Cloud-init completed successfully

Проверьте статус:

cloud-init status --long

Статус должен быть done.

Проверьте пакеты:

curl --version
git --version
htop --version

Результат: подтверждение успешного выполнения конфигурации.


Что выполняет шаблон

  • создает пользователя devops;
  • добавляет пользователя в sudo;
  • разрешает sudo без пароля;
  • отключает root-доступ;
  • отключает SSH по паролю;
  • устанавливает curl, git, htop;
  • создает лог выполнения.

Возможные ошибки

Если конфигурация не применена:

sudo tail -n 200 /var/log/cloud-init.log
sudo tail -n 200 /var/log/cloud-init-output.log

Проверьте:

  • корректность отступов YAML;
  • наличие строки #cloud-config в первой строке;
  • корректность SSH-ключа.
question
Не нашли подходящего ответа?
Напишите запрос в службу поддержки
Написать сейчас
  1. Main