VK Private Cloud logo
Помощь
Обновлена 17 июля 2026 г. в 15:55

Подготовка образа диска ВМ для загрузки в Платформу

Подготовка образа диска ВМ для его загрузки в Платформу может выполняться разными способами. Далее описаны варианты подготовки образа:

OpenStack Builder

Предусловия

  • Настроенный доступ с машины, на которой запускается Packer-клиент, до точек:

    • http/https до OpenStack API.

    • SSH до сети инстансов.

  • Загруженный образ целевой ОС.

Для запуска используется ряд скриптов, пример для выполнения в Ubuntu описан ниже (будет использоваться для выполнения основных шагов).

В приведенном примере устанавливается опциональный компонент Ansible. В скриптах можно указать любые инструкции в нужном порядке, задаваемом в файле конфигурации сборки *packer.json.

  • image-build-packer:

    • scripts:

      • ubuntu:

        • common.sh.
        • ansible.sh.
        • clean.sh.
    • ubuntu-ansible-packer.json.

Листинг упомянутых скриптов приведен далее.

ansible.sh
#!/bin/bashset -euxsudo apt-get updatesudo apt-get install software-properties-common --yessudo apt-add-repository --yes --update ppa:ansible/ansiblesudo apt-get install python-apt --yessudo apt-get install ansible --yescat <<EOF >/etc/ansible/hostslocalhost    ansible_connection=localEOFcat <<EOF >/etc/ansible/ansible.cfg[defaults]host_key_checking = FalseEOFexit 0
clean.sh
#!/bin/bashset -xecho "Cleaning Up..."sudo apt autoremove --yessudo apt-get --yes clean# Remove biased udev rulesrm /etc/udev/rules.d/*sed -i '/HWADDR/d' /etc/sysconfig/network-scripts/ifcfg-eth0rm -rf /tmp/*rm -rf /var/log/*# Clean up cloud-init artefactssudo rm -rf /var/lib/cloud/*# Clean up injected datasudo rm -rf /{root,home/*}/{.ssh,.bash_history} &amp;&amp; history -c#Ensure changes are written to disksync
common.sh
#!/bin/bashset -euxcat <<EOF >/etc/default/localeLANG=en_US.UTF-8EOFsudo apt-get update#sudo apt-get upgrade --yessudo systemctl disable apt-daily.servicesudo systemctl disable apt-daily.timersudo systemctl disable apt-daily-upgrade.servicesudo systemctl disable apt-daily-upgrade.timerexit 0
ubuntu-ansible-packer.json
{  "variables": {    "build_flavor": "Basic-1-1-10",    "int_network": "114075d3-7e7e-421b-abca-52bb5f594576",    "ext_network": "4006730b-f45a-42e1-b95d-352e5724f729",    "source_image_name": "Ubuntu-22.04.1-test",    "ssh_username": "ubuntu"  },  "builders": [    {    "type": "openstack",    "flavor": "{{ user `build_flavor` }}",    "image_name": "Custom-image",    "source_image_name": "{{ user `source_image_name` }}",    "image_visibility": "shared",    "ssh_username": "{{ user `ssh_username` }}",    "networks": ["{{ user `int_network` }}"],    "floating_ip_network": "{{ user `ext_network` }}",    "security_groups": ["default", "ssh+www"],    "config_drive": true    }  ],  "provisioners": [    {      "type": "shell",      "script": "scripts/ubuntu/common.sh",      "execute_command": "sudo {{.Path}}"    },    {      "type": "shell",      "script": "scripts/ubuntu/ansible.sh",      "execute_command": "sudo {{.Path}}"    },    {      "type": "shell",      "script": "scripts/ubuntu/clean.sh",      "execute_command": "sudo {{.Path}}"    }  ]}

Основные шаги

Чтобы подготовить образ с помощью OpenStack Builder, выполните шаги:

  1. Скачайте и установите Packer.

  2. Создайте или скачайте openrc-файл с доступами к облаку (подробности доступны в примере файла в разделе Конфигурационный файл для подключения).

  3. Создайте директорию со скриптами из раздела Предусловия.

  4. Заполните конфигурационный файл ubuntu-ansible-packer.json:

    • build_flavor — название или идентификатор шаблона ВМ. Его можно узнать с помощью команды:

      $ openstack flavor list
    • int_network — ID внутренней сети, которая поддерживает плавающие IP-адреса.

    • ext_network — ID внешней сети. По умолчанию — external, но можно узнать с помощью команды:

      $ openstack network list --long | grep External
    • image_name — название создаваемого образа.

    • source_image_name — название образа, на основе которого будет создан новый образ.

    • image_visibility — доступность создаваемого образа:

      • public — публичный.
      • private — приватный.
      • shared — доступный некоторым проектам.
    • ssh_username — имя пользователя, по которому будет возможен вход в ВМ.

    • security_groups — список групп безопасности для ВМ. Обязательное значение — ssh или ssh+www.

    • provisioners — список скриптов, которые будут запущены на ВМ.

  5. Выполните команды на сборку:

    $ source <OPENRC_СКРИПТ>$ cd image-build-packer$ packer build ubuntu-ansible-packer.json
  6. Задайте дополнительные свойства созданному образу (который был собран с помощью Packer), выполнив команду:

    $ openstack image set --property os_require_quiesce='True' --property hw_qemu_guest_agent='True' <НАЗВАНИЕ_ОБРАЗА>

После успешного выполнения всех шагов в Платформе появится загруженный образ. Посмотреть образ можно в Портале самообслуживания или Портале администратора на странице Образы.

Перенос образа

Перенос образа может понадобиться, например, когда образ собирается в одном облаке, а перенести его нужно в другое. Тогда после сборки образа выполните команды (на примере образа Custom-image.img):

$ openstack image save --file Custom-image.img Custom-image$ scp Custom-image.img $TARGETIP:$ ssh $TARGETIP$ source openrc.sh$ openstack image create --container-format bare --disk-format raw --file Custom-image.img --property os_require_quiesce='True' --property hw_qemu_guest_agent='True' \--public Custom-image

Ручная локальная подготовка образа

Предусловия

  • ВМ в минимальной конфигурации (один диск, доступ в сеть по SSH, один раздел).
  • Установленный ISO образ целевой ОС.
  • Доступность репозиториев из сети ВМ.

Основные шаги

Чтобы подготовить образ вручную, выполните шаги:

  1. Установите целевую ОС на ВМ.

  2. Перейдите на ВМ по SSH.

  3. Установите пакет cloud-init (подробнее — в официальной документации).

  4. Включите автозапуск cloud-init, например, с помощью команды Linux:

    $ systemctl enable cloud-init

    При необходимости настройте конфигурационный файл /etc/cloud/cloud.cfg.

  5. Установите пакет qemu-guest-agent (подробнее — в официальной документации).

  6. Включите автозапуск qemu-guest-agent, например, с помощью команды Linux:

    $ systemctl enable qemu-guest-agent
  7. Выполните дополнительные настройки при необходимости (подробнее — в разделе Дополнительные шаги).

  8. Отключите локальную ВМ.

  9. Выполните экспорт переменных для доступа к OpenStack API любым удобным способом (подробнее — в разделе Использование OpenStack CLI для управления Платформой).

  10. Загрузите образ:

    $ openstack image create --container-format bare --disk-format raw --file  Arch.img  --public --property hw_qemu_guest_agent='True' --property os_require_quiesce='True' Arch

После успешного выполнения шагов будет создан файл (в примере выше — Arch.img), загруженный в Платформу.

Дополнительные шаги

  1. Отключите все ресурсы (datasources) в cloud-init, кроме OpenStack — создайте файл /etc/cloud/cloud.cfg.d/15_datasource.cfg:

    datasource: OpenStack:  max_wait: 180
  2. Выполните очистку ВМ — последовательно выполните команды (пример команд Linux):

    $ rm /etc/udev/rules.d/*$ rm -rf /var/lib/cloud/*$ rm -rf /tmp/*$ find /var/log -maxdepth 5 -type f -exec rm -fv {} \;$ sudo truncate -s 0 /etc/udev/rules.d/70-persistent-net.rules$ sed -i '/HWADDR/d' /etc/sysconfig/network-scripts/ifcfg-eth0$ sudo truncate -s 0 /etc/resolv.conf$ sudo rm -f /etc/NetworkManager/conf.d/99-cloud-init.conf$ rpm-ostree cleanup -b -p -r -m

Утилита diskimage-builder

С помощью утилиты diskimage-builder можно собрать ограниченный набор образов; список поддерживаемых образов доступен в официальной документации.

Предусловия

  • Поддержка Python-библиотек.

  • Выход в интернет.

  • Установленный пакет qemu-utils. Его можно установить, например, с помощью команды Ubuntu:

    $ sudo apt install qemu-utils
  • Не менее 3 ГБ свободного пространства.

Основные шаги

Чтобы подготовить образ с помощью утилиты diskimage-builder, выполните шаги:

  1. Установите виртуальное окружение Python virtualenv (подробнее — в официальной документации).

  2. Уточните версию Python с помощью команды python --version или аналога.

  3. Создайте папку с виртуальным окружением:

    $ virtualenv -p python<PYTHON_VERSION> venv_py<PYTHON_VERSION>;$ source venv_py<PYTHON_VERSION>/bin/activate
  4. Установите diskimage-builder:

    $ pip install git+https://opendev.org/openstack/diskimage-builder.git
  5. Запустите сборку образа:

    $ DIB_RELEASE=15.3 disk-image-create -t raw -o opensuse-15.3.img vm opensuse
  6. Загрузите образ:

    $ openstack image create --container-format bare --disk-format raw --file  opensuse-15.3.img  --public --property hw_qemu_guest_agent='True' --property os_require_quiesce='True' Opensuse

После успешного выполнения шагов будет создан файл (в примере выше — opensuse-15.3.img), загруженный в Платформу.

Кастомизация

С помощью diskimage-builder возможна донастройка целевой ОС (подробнее — в официальной документации).