linux-labs

Вики / Загрузка

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

Концепция Ubuntu 24.04 · cloud-init ЗагрузкаСлужбы

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

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

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

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

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

#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.

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

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 (или удалить пакет).

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

См. также