Перейти к основному содержимому

Как подготовить Linux-ВМ к превращению в образ

Когда использовать​

Перед тем как превратить Linux-ВМ в образ. Каждая машина из образа должна получить свои имя хоста, пользователей с паролями и ключами SSH, сеть и DNS.

Первичную настройку Linux-машины в vStack Center выполняет cloud-init. При каждом запуске ВМ кластер отдаёт ей параметры через второй последовательный порт (COM2) в формате источника данных SmartOS. Каждая ВМ получает собственный идентификатор экземпляра, поэтому cloud-init на копии считает загрузку первой и заново задаёт имя хоста, пользователей и пароли.

Отсюда главное отличие от Windows: обобщать систему отдельной утилитой не нужно. Достаточно не сломать cloud-init и убрать из гостя то, что не должно попасть в копии.

Предусловия​

  • ВМ создана из Linux-образа каталога с cloud-init — тип гостевой настройки образа «Cloud-init: SmartOS». Образ, превращённый из ВМ, наследует от её профиля тип гостевой настройки, тип ОС, оболочку пользователей по умолчанию и шаблон имён сетевых интерфейсов.
  • Внутри гостя установлено и настроено всё, что должно попасть в образ.
  • Есть доступ к ВМ с правами root — через консоль или SSH.
  • ВМ удовлетворяет требованиям превращения: только загрузочный диск, нет клонов, сама не тонкий клон, — см. предусловия.

Шаги​

  1. Проверьте, что cloud-init работает. Не удаляйте и не отключайте его и не меняйте настройки источника данных. Состояние последней загрузки:

    cloud-init status --long

    Ожидаемое — status: done без ошибок.

  2. Уберите из гостя секреты. Удалите сохранённые пароли, токены, личные ключи SSH пользователей, историю командной оболочки и рабочие файлы, которые не должны попасть в копии. Всё, что останется на диске, получит каждая машина из образа, а у образа, общего для кластера, — каждый ВЦОД.

  3. Очистите следы этой машины — по общей практике подготовки образов Linux:

    cloud-init clean --logs
    truncate -s 0 /etc/machine-id

    Первая команда стирает состояние и журналы cloud-init этой машины. Вторая очищает идентификатор машины systemd: при следующей загрузке копия создаст свой. Ключи хоста SSH cloud-init на новом экземпляре по умолчанию создаёт заново.

    Если сетевые настройки в госте привязаны к MAC-адресу (правила udev, конфигурации netplan или NetworkManager с MAC), уберите эту привязку: у новой ВМ будет другой MAC-адрес.

  4. Остановите ВМ из vStack Center: на карточке ВМ «Actions» → «Stop». Дождитесь статуса «Offline».

  5. Превратите ВМ в образ — по инструкции «Как превратить ВМ в образ».

Проверка результата​

Создайте из образа новую ВМ с новыми именем хоста и паролем root и войдите в неё через консоль.

Что смотретьОжидаемое
Входпароль, заданный при создании ВМ, подходит
hostnameимя хоста, заданное при создании ВМ
cloud-init statusstatus: done
Сетьадрес и шлюз из сети ВМ, DNS отвечает

Если не получилось​

Что видноПричинаЧто сделать
имя хоста и пароль остались от исходной машиныcloud-init в госте отключён, удалён или настроен на другой источник данныхобраз непригоден: подготовьте новую исходную ВМ, не трогая cloud-init
копия не получила адрессетевые настройки в госте привязаны к MAC-адресу исходной ВМподготовьте новую исходную ВМ, убрав привязку к MAC (шаг 3)
cloud-init status показывает ошибкусбой одного из модулей cloud-initпричина — в /var/log/cloud-init.log

См. также​

Методы API​

Операции этой страницы в API: vms-stop, os-image-from-vm, vms-create — см. Справочник API.