Подготовка. Создание собственного образа виртуальной машины

Вы можете создать новый образ виртуальной машины самостоятельно, а затем загрузить его в сервисы MCS. Для чего это может понадобиться:

  • если есть необходимость в использовании редкой операционной системы, не входящей в комплект образов, предлагаемых нашими сервисами
  • если есть необходимость в использовании специализированного программного обеспечения, разворачиваемого одновременно на нескольких виртуальных машинах

Подготовка

Для создания нового образа вам понадобится установочный файл с расширением *.ISO гостевой операционной системы. Вам также понадобится доступ к инструменту виртуализации. Вы можете использовать для этого KVM. Или, если у вас есть инструмент виртуализации рабочего стола с графическим интерфейсом (например, VMware Fusion или VirtualBox), вы можете использовать его вместо KVM

Для начала вам необходимо подключиться к графической консоли гипервизора, которая выступает в качестве дисплея виртуальной машины и позволяет вам взаимодействовать с установщиком гостевой операционной системы с помощью клавиатуры и мыши. KVM может предоставлять графическую консоль, используя протокол VNC (Virtual Network Computing) или более новый протокол SPICE. Здесь мы будем использовать протокол VNC, поскольку вы, скорее всего, найдете клиент VNC, который работает на вашем локальном компьютере.

Перед запуском виртуальной машины с libvirt убедитесь, что сеть libvirt default запущена. Эта сеть должна быть активной, чтобы ваша виртуальная машина могла подключаться к сети. Запуск этой сети создаст Linux bridge (обычно называемый virbr0), правила iptables и процесс dnsmasq, который будет служить сервером DHCP.

Чтобы убедиться, что сеть по умолчанию в libvirt включена, используйте команду virsh net-list и убедитесь, что сеть default активна:

# virsh net-list
Name                 State      Autostart
-----------------------------------------
default              active     yes

Если она неактивна, запустите ее командой:

# virsh net-start default

Если вы планируете создать образ виртуальной машины на машине, на которой можно запускать приложения X11, самый простой способ сделать это - использовать графический интерфейс virt-manager (устанавливается как пакет virt-manager). Этот GUI имеет встроенный VNC-клиент, который позволит вам просматривать и взаимодействовать с графической консолью гостевой ОС.

Нажмите кнопку «Create a new virtual machine» в верхнем левом углу или выберите «File» ‣ «New Virtual Machine». Затем следуйте инструкциям.

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

При использовании формата qcow2, вы должны проверить опцию Customize configuration before install, перейти в свойства диска и явно выбрать формат qcow2. Это гарантирует, что размер диска виртуальной машины будет правильным.

Например, у вас имеется специальный установочный ISO-образ, которого нет в списке наших стандартных образов. Мы разберем пример установки CentOS 7. 

Поскольку процесс установки CentOS может отличаться в разных версиях, этапы установки могут отличаться, если вы используете другую версию CentOS.

Установка ОС

В начальном меню загрузки установщика выберите опцию Install CentOS 7. После запуска программы установки выберите нужный язык и нажмите «Continue», чтобы перейти к сводной информации об установке. Примите значения по умолчанию.

Настройка Ethernet по умолчанию - OFF (выключена). Нужно изменить на ON, чтобы включить возможность конфигурирования сетевых настроек. Убедитесь, что для параметра «Настройки IPv4» задан автоматический режим (DHCP).

Установщик позволяет вам выбрать hostname. По умолчанию - localhost.localdomain. Чуть позже будет необходимо установить пакет cloud-init, который задает имя хоста при загрузке нового инстанса (виртуальной машины) с использованием этого образа.

Если появится вопрос о том, какие устройства используются в вашей установке, выберите Virtio Block Device.

Существуют разные варианты разбиения дисков. При установке по умолчанию используются разделы LVM и создаются три раздела (/boot, /, swap). В качестве альтернативы вы можете создать один раздел ext4 или XFS, который просто монтируется в /.

Если вы не уверены в своих силах, просто используйте схему разделов по умолчанию.

Выполните установку операционной системы, используя необходимые параметры. Самое минимальное, что нужно сделать, это выбрать установку Minimal Install, которая устанавливает SSH-сервер.

Не забудьте установить пароль для root!

Дождитесь окончания установки, затем извлеките диск и выполните перезагрузку виртуальной машины.

Чтобы позволить гипервизору перезагружать или выключать инстанс (виртуальную машину), необходимо установить и запустить службу acpid в гостевой системе.

Войдите в систему как root (пароль для root вы должны были задать во время установки) и выполните следующие команды, чтобы установить службу ACPI и настроить ее на запуск при загрузке системы:

# yum install acpid
# systemctl enable acpid

Инстанс должен взаимодействовать с сервисом метаданных для выполнения определенных задач при запуске, например, он должен получить открытый ключ ssh. Чтобы инстанс выполнял эти задачи, необходимо установить cloud-init, находясь внутри гостевой ОС. Выполните следующую команду:

# yum install cloud-init

Имя учетной записи зависит от дистрибутива. На виртуальных машинах на базе CentOS учетная запись называется centos.

Вы можете изменить имя учетной записи, используемой cloud-init, отредактировав файл /etc/cloud/cloud.cfg и добавив строку с другим пользователем. Например, для настройки cloud-init так, чтобы открытый ssh ключ подкладывался в учетную запись с именем admin, используйте следующий синтаксис в файле конфигурации:

users:
  - name: admin
    (...)

Для правильного изменения размера корневого раздела установите пакет cloud-utils-growpart, который содержит соответствующие инструменты для изменения размера диска с помощью cloud-init:

# yum install cloud-utils-growpart

Чтобы инстанс получил доступ к службе метаданных, вы должны отключить маршрут по умолчанию zeroconf:

# echo "NOZEROCONF=yes" >> /etc/sysconfig/network

Чтобы команда nova console-log работала правильно в CentOS 7, нужно выполнить следующие шаги:

  1. Отредактируйте файл /etc/default/grub и измените опции GRUB_CMDLINE_LINUX. Удалите rhgb quiet и добавьте console=tty0 console=ttyS0,115200n8.

Например:

...
GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=cl/root rd.lvm.lv=cl/swap console=tty0 console=ttyS0,115200n8"
  1. Выполните команду, чтобы сохранить изменения:

# grub2-mkconfig -o /boot/grub2/grub.cfg
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-3.10.0-229.14.1.el7.x86_64
Found initrd image: /boot/initramfs-3.10.0-229.14.1.el7.x86_64.img
Found linux image: /boot/vmlinuz-3.10.0-229.4.2.el7.x86_64
Found initrd image: /boot/initramfs-3.10.0-229.4.2.el7.x86_64.img
Found linux image: /boot/vmlinuz-3.10.0-229.el7.x86_64
Found initrd image: /boot/initramfs-3.10.0-229.el7.x86_64.img
Found linux image: /boot/vmlinuz-0-rescue-605f01abef434fb98dd1309e774b72ba
Found initrd image: /boot/initramfs-0-rescue-605f01abef434fb98dd1309e774b72ba.img
done

Также, чтобы для инстансов, установленных из вашего образа, была доступна функция резервного копирования в сервисах MCS, необходимо программное обеспечение qemu-guest-agent. Оно предустановлено в большинстве дистрибутивов от Red Hat, но если вы используете дистрибутивы от других вендоров, вам нужно установить его самостоятельно.

Выключите инстанс (находясь внутри гостевой ОС), для этого выполните:

# poweroff

Операционная система записывает MAC-адрес виртуальной сетевой карты в таких местах, как /etc/sysconfig/network-scripts/ifcfg-eth0 во время работы инстанса. Однако каждый раз при запуске нового инстанса из этого образа виртуальная сетевая карта будет иметь другой MAC-адрес, поэтому эту информацию необходимо удалить из файла конфигурации.

Существует утилита под названием virt-sysprep, которая выполняет различные задачи очистки, такие как удаление ссылок на MAC-адреса. Она очистит образ виртуальной машины, для этого выполните команду:

# virt-sysprep -d centos

(centos - имя заданное виртуальной машине при установке)

Используйте команду virsh undefine vm-name, чтобы удалить виртуальную машину (диск от неё не удалится):

# virsh undefine centos

После этих шагов у вас должен остаться диск (файл) с образом ОС в формате *.qcow2. Обычно он расположен в директории /var/lib/libvirt/images/.

Конвертация

Теперь необходимо выполнить конвертирование из qcow2 в RAW командой:

# qemu-img convert -p -O raw <disk.qcow2> <disk.raw>

Загрузка в MCS

Теперь вы можете загрузить этот образ в Облако с помощью консольного клиента openstack командой:

# openstack image create --private --container-format bare --disk-format raw --file <имя_файла.raw> --property hw_qemu_guest_agent=yes --property os_require_quiesce=yes <имя_образа>

Также про создание и загрузку образов виртуальных машин см. статьи: