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-packerpacker 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-imagescp Custom-image.img $TARGETIP:ssh $TARGETIPsource openrc.shopenstack 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.rulessed -i '/HWADDR/d' /etc/sysconfig/network-scripts/ifcfg-eth0sudo truncate -s 0 /etc/resolv.confsudo rm -f /etc/NetworkManager/conf.d/99-cloud-init.confrpm-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 возможна донастройка целевой ОС, подробнее см. в официальной документации.