Cloud-init — индустриальный стандарт автоматической настройки новых облачных серверов и виртуальных машин при первой загрузке. Инструмент разработан Canonical в 2008 году специально для Ubuntu на Amazon EC2, а сегодня поддерживается всеми крупными Linux-дистрибутивами и облачными платформами: AWS, GCP, Azure, OpenStack, DigitalOcean и другими.
Как работает cloud-init
При старте ВМ cloud-init проходит несколько последовательных стадий. Сначала он определяет тип облака (datasource) — AWS EC2, OpenStack, NoCloud и т.д. — и получает метаданные провайдера: hostname, публичный IP, SSH-ключи. Затем читает user-data — конфигурационный файл в формате YAML, который передаётся при создании инстанса.
Стадии выполнения (stages):
- detect — определение datasource.
- local — начальная сетевая конфигурация без интернета.
- network — настройка сети, hostname, DNS.
- config — установка пакетов, создание пользователей, запись файлов.
- final — выполнение скриптов и финальных команд.
Каждый модуль (их более 50) настраивается отдельно. Частота запуска: once (однократно), always (каждый boot), per-instance (при каждом новом инстансе).
Формат user-data
Конфигурация задаётся в формате cloud-config — YAML с директивами. Пример минимального файла:
#cloud-config
users:
- name: deploy
sudo: ALL=(ALL) NOPASSWD:ALL
ssh_authorized_keys:
- ssh-ed25519 AAAA...
packages:
- nginx
- ufw
runcmd:
- systemctl enable nginx
- ufw allow 80/tcp
Помимо cloud-config, user-data может быть shell-скриптом (начинается с #!/bin/bash), multi-part MIME или gzip-сжатым файлом. Максимальный размер user-data на AWS — 16 КБ.
История
Cloud-init создал Scott Moser из Canonical в 2008 году для дистрибуции Ubuntu на Amazon EC2 — тогда единственном крупном облаке. В 2010 году поддержку добавили RHEL и CentOS. К 2014 году cloud-init стал де-факто стандартом: его включили в cloud-образы практически всех дистрибутивов. В 2020 году проект перешёл под управление сообщества с сохранением Canonical как основного контрибьютора. Сегодня это единственный инструмент автоматизации первого запуска, поддержанный нативно всеми гипервизорами и облачными провайдерами.
Применение в хостинге
На практике cloud-init используют для автоматического деплоя VDS и VPS: за 2-3 минуты новый сервер получает нужного пользователя, отключённый root-логин по паролю, установленный Nginx, настроенный файрвол. Инструменты вроде Terraform и Ansible часто используют cloud-init для первоначальной настройки перед передачей управления основному конфигурационному менеджеру.
На что обращать внимание
Логи cloud-init хранятся в /var/log/cloud-init.log и /var/log/cloud-init-output.log. Если инстанс не настроился как ожидалось — первым делом смотреть туда. При клонировании ВМ важно сбрасывать состояние командой cloud-init clean --logs, иначе при следующем запуске инструмент решит, что ВМ уже инициализирована, и пропустит все модули.