hostprofi.ru
Подобрать хостинг
Термин·буква C

Cloud-init

краткое определение

Cloud-init — стандартный инструмент инициализации облачных виртуальных машин. При первой загрузке он читает метаданные провайдера и user-data, настраивает сеть, SSH-ключи, пользователей, пакеты и выполняет произвольные команды.

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):

  1. detect — определение datasource.
  2. local — начальная сетевая конфигурация без интернета.
  3. network — настройка сети, hostname, DNS.
  4. config — установка пакетов, создание пользователей, запись файлов.
  5. 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, иначе при следующем запуске инструмент решит, что ВМ уже инициализирована, и пропустит все модули.

Другие термины