С чего начать Первые шаги трек · 15 ступеней
Linux Labs

cloud-init — первичная настройка ВМ

3 мин Ubuntu 24.04 · cloud-init

Автонастройка облачных/виртуальных машин при первом старте — user-data, отладка.

Шпаргалка

4 команды Версия для печати
  • cloud-init status --long статус/ошибки
  • sudo cloud-init schema --system проверить user-data
  • sudo less /var/log/cloud-init-output.log вывод команд
  • sudo cloud-init clean --logs сбросить (выполнить заново)
  • user-data: #cloud-config → users / packages / runcmd / write_files
  • отключить: /etc/cloud/cloud-init.disabled

Обзор

cloud-init настраивает машину при первом запуске из образа: создаёт пользователей, кладёт SSH-ключи, ставит пакеты, пишет файлы, задаёт сеть (netplan). Облачные образы Ubuntu умеют его «из коробки».

bash
cloud-init status                 # статус выполнения (done/running/error)
cloud-init status --long --wait   # дождаться завершения
cloud-id                          # какой датасорс (aws/azure/nocloud/…)

Стадии: init-local → init → config → final. Источник конфига (datasource): облачные метаданные, NoCloud (ISO/seed), и т.п.

Ключи

Конфигурация передаётся как user-data. Начинается с #cloud-config:

yaml
#cloud-config
hostname: web01
users:
  - name: deploy
    sudo: ALL=(ALL) NOPASSWD:ALL
    groups: [sudo, docker]
    ssh_authorized_keys:
      - ssh-ed25519 AAAA... me@laptop
package_update: true
packages: [nginx, htop]
write_files:
  - path: /etc/myapp/conf
    permissions: '0644'
    content: |
      key = value
runcmd:
  - systemctl enable --now nginx

runcmd — команды на стадии final (один раз); bootcmd — очень рано и на КАЖДЫЙ boot.

Рецепты

1

Отладка

bash
cloud-init status --long          # done / error + детали
sudo cloud-init schema --system   # проверить синтаксис user-data
sudo cloud-init query userdata    # что увидела машина
# логи:
sudo less /var/log/cloud-init.log         # подробный ход модулей
sudo less /var/log/cloud-init-output.log  # вывод runcmd/packages (тут видно ошибки)

# повторно прогнать при отладке образа:
sudo cloud-init clean --logs      # сбросить состояние и логи
sudo cloud-init clean --logs --reboot

Неполадки

5

user-data не применился

  • Первая строка ровно #cloud-config (без пробелов/BOM), валидный YAML (cloud-init schema --system).
  • Выполняется только при первом старте (по instance-id). Повторно — cloud-init clean или новый instance-id.

Пакеты не поставились / runcmd не отработал

/var/log/cloud-init-output.log — вывод команд и ошибки (нет сети для apt? опечатка? зависимость?).

Не зайти по SSH после провижена

Ключ не попал нужному пользователю или сеть (netplan) не поднялась. Логи cloud-init + консоль гипервизора. Проверь cloud-init query userdata.

Hostname/сеть «возвращаются» к дефолту

cloud-init переустанавливает их на каждом boot, если не отключить: preserve_hostname: true, либо network: {config: disabled} (см. hostnamectl, netplan).

Отключить cloud-init совсем

sudo touch /etc/cloud/cloud-init.disabled (или удалить пакет).

См. также

  • netplan — Постоянная настройка сети в Ubuntu — YAML, статический IP и DHCP, безопасное применение.
  • users-groups — Учётные записи, группы, членство; useradd/usermod, /etc/passwd и /etc/group.
  • ssh-keys — Генерация ключей, authorized_keys, ssh-agent, права на файлы .ssh.
Загрузка…