Cloud-init — системный сервис, предустановленный в официальных образах виртуальных серверов. Используется для автоматической начальной настройки системы при первом запуске.
Формат передачи конфигурации — cloud-config (YAML).
С помощью cloud-config можно:
Результат: сервер автоматически конфигурируется при первом запуске без ручной настройки.
При создании сервера передаются данные инициализации (user-data).
Процесс выполнения:
Сервер запускается
Результат: начинается инициализация системы
Cloud-init считывает переданные данные
Результат: конфигурация загружается в систему
При наличии формата #cloud-config применяется YAML-конфигурация
Результат: выполняются заданные действия
После завершения инициализации сервис завершает работу
Результат: система готова к использованию
Основная конфигурация выполняется при первом запуске. Некоторые модули могут выполняться повторно — это зависит от их типа.
Формат 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
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-ключ на актуальный.
Шаблон можно использовать:
Перейдите в раздел Серверы
Результат: открыт список серверов
Нажмите Создать сервер
Результат: открыта форма создания
Заполните параметры: регион, конфигурация, образ, сеть, SSH-ключ
Результат: заданы базовые настройки
В блоке Cloud-init нажмите Добавить
Результат: открыто поле для конфигурации
Вставьте cloud-config
Результат: конфигурация добавлена
Нажмите Применить
Результат: данные сохранены
Завершите создание сервера
Результат: сервер создан с cloud-init
Итог: при первом запуске сервер автоматически выполнит указанные действия.
Сохраните конфигурацию в файл:
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.
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-подключение не выполняется:
Подключитесь к серверу:
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
Результат: подтверждение успешного выполнения конфигурации.
Если конфигурация не применена:
sudo tail -n 200 /var/log/cloud-init.log
sudo tail -n 200 /var/log/cloud-init-output.log
Проверьте:
#cloud-config в первой строке;