Хостеры, уже выросшие из домашнего сервера с 1-2 виртуальными серверами до нескольких высокопроизводительных серверов в ДЦ, задумываются об автоматизации рутинных действий и администрировании виртуальных серверов.
Наиболее популярным из бесплатных менеджеров виртуализации является Proxmox.
При своих плюсах (он бесплатный, с открытым исходным кодом и сообществом), он имеет и минусы, которые с лихвой перекрывают эти плюсы:


Переходить с привычного ПО на что-то новое довольно сложно, помимо изучения нового программного продукта требуется и произвести миграцию всех данных. Это очень сложный шаг и к нему следует подойти как можно основательней. Не редко выбор бесплатных или менее дорогих продуктов выливается в дополнительные расходы для дописывания нужного функционала, интеграции с другим используемым ПО, локализацией и тому подобное.
Пользуясь программными продуктами ISPsystem, хостер может получить полную автоматизацию всего процесса предоставления услуг своим клиентам.
В этой статье я расскажу, как перенести виртуальные машины с Proxmox под управление VMmanager. VMmanager не поддерживает импорт или миграцию контейнеров и виртуальных серверов с других менеджеров виртуализации. Но это не сложно сделать при помощи API VMmanager.
Рассмотрим вариант миграции контейнеров с Proxmox на VMmanager-OVZ.
Миграция контейнеров с Proxmox на VMmanager-OVZ.
Миграция упрощается тем, что это можно проделать на одном сервере.
VMmanager-OVZ без проблем устанавливается на том же сервере, где работает Proxmox без какого-либо вмешательства в работу контейнеров.
Для этого следует скачать и запустить файл-инсталлятор —
http://download.ispsystem.com/install.5.sh
после чего ответить на несколько вопросов для выбора требуемого программного продукта и его версии.
Так же автоматически подключится официальный репозитарии и начнется установка панели управления и сопутствующего ПО.
Обратите внимание, что настройки openvz от proxmox без каких-либо проблем используются в VMmanager-OVZ.
Единственное замечание: после установки VMmanager-OVZ, необходимо вручную скачать пример конфигурационного файла для openvz. Он требуется для создания контейнера, и отсутствует в дистрибутиве proxmox, поэтому в логах при попытке создатьконтейнер можно будет наблюдать такую ошибку:
2014-12-03T10:39:28+0800 vzctl: CT 100: Sample config /etc/pve/openvz/ve-basic.conf-sample not found: No such file or directory
2014-12-03T10:39:28+0800 vzctl: CT 100: Creation of container private area failed
Скачиваем пример конфигурационного файла для openvz с официального репозитория и помещаем в директорию, где он должен находиться:
# wget --no-check-certificate github.com/blueboxgroup/vzctl/blob/master/etc/conf/ve-basic.conf-sample -O /etc/pve/openvz/ve-basic.conf-sample
Хочу обратить на внимание на один момент при переносе. Существует вероятность того, что идентификационные номеры контейнров могут не совпасть.
В обоих случаях нумерация начинается с 100. Хотя в Proxmox можно выбрать произвольный ID для создаваемого контейнера, в VMmanager этот счетчик начинается с 100 и не сбрасывается, после удаления всех контейнеров, нумерация продолжается с того числа, которое является последующим для удаленных. На этот счет есть одно решение: нужно удалить все созданные ранее виртуальные серверы и аварийно завершить процесс vmmgr, тогда нумерация пойдет сначала.
Настройка параметров в VMmanager-OVZ

Создание шаблона контейнера с параметрами по умолчанию.
В Proxmox отсутствуют такие понятия, как диапазон IP-адресов и шаблоны для создания контейнеров. При создании каждого нового контейнера, следует указывать вручную и IP-адрес, и ресурсы, доступные для нового контейнера.
В VMmanager эти действия стандартизированы и сделаны максимально удобными. Требуется один раз создать несколько шаблонов тарифов и диапазон IP-адресов. При создании контейнера IP-адрес назначается автоматически, а ресурсы указываются путем выбора соответствующего шаблона.

Создание контейнера в Proxmox

Создание контейнера в VMmanager
Перенос контейнеров затруднен тем, что оба менеджера виртуальных серверов используют разные методы хранения информации о ресурсах управляемых контейнеров.
Proxmox использует конфигурационные файлы openvz, VMmanager — хранит все в базе данных mysql, дублируя настройки в файлы для openvz. Поэтому схема усложняется тем, что потребуется создать контейнеры из VMmanager-OVZ и затем заменить этот контейнер на контейнер из Proxmox.
После произведенных настроек имеем на сервере рабочие экземпляры Proxmox и VMmanager-OVZ.
В остальном процесс миграции приводится к нескольким простым шагам:
Чтобы упростить этот процесс, воспользуйтесь примером скрипта, который я прикладываю ниже.
Сделаю несколько комментариев относительно скрипта:
Теперь перейдем к варианту миграции с Proxmox с виртуальными серверами на VMmanager-KVM.
Миграции виртуальных серверов с Proxmox на VMmanager-KVM.
К сожалению, здесь не все пойдет так же гладко, как в предыдущем случае.
Установить VMmanager-KVM в качестве основного узла на тот же сервер, где работает Proxmox не получится по причине проблем с зависимостью пакетов. Поэтому рассмотрим миграцию с использованием второго сервера.
Производим настройку VMmanager-KVM, не особо отличающуюся от той, что я описал выше для VMmanager-OVZ
И действуем по следующему алгоритму:
Настройки виртуальных машин proxmox хранятся в файлах /etc/pve/qemu-server/.conf
Файлы образов виртуальных машин Proxmox хранятся в директориях /var/lib/vz/images/Чтобы каждый раз для соединения серверов не вводить авторизационные данные с помощью ssh-keygen создадим ключ-пару и отправим публичный ключ на сервер Proxmox.
cat .ssh/id_rsa.pub |ssh root@proxmox «cat >> /root/.ssh/authorized_keys»
И дальше уже все можно проделать с помощью этого скрипта.
Оставлю пару комментариев по скрипту:
При описании возможностей переноса контейнеров и виртуальных машин использовалась тестовая установка proxmox со значениями по умолчанию и ситуация с боевыми серверами может отличаться. Если у Вас есть опыт реального применения Proxmox и вы готовы поделиться им, то будет очень приятно увидеть ваши комментарии. Удачной миграции и максимальной автоматизации в сфере предоставления услуг хостинга!
Наиболее популярным из бесплатных менеджеров виртуализации является Proxmox.
При своих плюсах (он бесплатный, с открытым исходным кодом и сообществом), он имеет и минусы, которые с лихвой перекрывают эти плюсы:

- Платные обновления
- Платная техническая поддержка
- Отсутствие официальной русскоязычной документации
- Непрофессиональная локализация
- Относительная сложность установки
- Все дополнительные возможности и интеграции — платные
- Многие компоненты созданы сторонними разработчиками

Переходить с привычного ПО на что-то новое довольно сложно, помимо изучения нового программного продукта требуется и произвести миграцию всех данных. Это очень сложный шаг и к нему следует подойти как можно основательней. Не редко выбор бесплатных или менее дорогих продуктов выливается в дополнительные расходы для дописывания нужного функционала, интеграции с другим используемым ПО, локализацией и тому подобное.
Пользуясь программными продуктами ISPsystem, хостер может получить полную автоматизацию всего процесса предоставления услуг своим клиентам.
В этой статье я расскажу, как перенести виртуальные машины с Proxmox под управление VMmanager. VMmanager не поддерживает импорт или миграцию контейнеров и виртуальных серверов с других менеджеров виртуализации. Но это не сложно сделать при помощи API VMmanager.
Рассмотрим вариант миграции контейнеров с Proxmox на VMmanager-OVZ.
Миграция контейнеров с Proxmox на VMmanager-OVZ.
Миграция упрощается тем, что это можно проделать на одном сервере.
VMmanager-OVZ без проблем устанавливается на том же сервере, где работает Proxmox без какого-либо вмешательства в работу контейнеров.
Для этого следует скачать и запустить файл-инсталлятор —
http://download.ispsystem.com/install.5.sh
после чего ответить на несколько вопросов для выбора требуемого программного продукта и его версии.
Так же автоматически подключится официальный репозитарии и начнется установка панели управления и сопутствующего ПО.
Обратите внимание, что настройки openvz от proxmox без каких-либо проблем используются в VMmanager-OVZ.
Единственное замечание: после установки VMmanager-OVZ, необходимо вручную скачать пример конфигурационного файла для openvz. Он требуется для создания контейнера, и отсутствует в дистрибутиве proxmox, поэтому в логах при попытке создатьконтейнер можно будет наблюдать такую ошибку:
2014-12-03T10:39:28+0800 vzctl: CT 100: Sample config /etc/pve/openvz/ve-basic.conf-sample not found: No such file or directory
2014-12-03T10:39:28+0800 vzctl: CT 100: Creation of container private area failed
Скачиваем пример конфигурационного файла для openvz с официального репозитория и помещаем в директорию, где он должен находиться:
# wget --no-check-certificate github.com/blueboxgroup/vzctl/blob/master/etc/conf/ve-basic.conf-sample -O /etc/pve/openvz/ve-basic.conf-sample
Хочу обратить на внимание на один момент при переносе. Существует вероятность того, что идентификационные номеры контейнров могут не совпасть.
В обоих случаях нумерация начинается с 100. Хотя в Proxmox можно выбрать произвольный ID для создаваемого контейнера, в VMmanager этот счетчик начинается с 100 и не сбрасывается, после удаления всех контейнеров, нумерация продолжается с того числа, которое является последующим для удаленных. На этот счет есть одно решение: нужно удалить все созданные ранее виртуальные серверы и аварийно завершить процесс vmmgr, тогда нумерация пойдет сначала.
Настройка параметров в VMmanager-OVZ
- Создайте пользователя admin для управления контейнерами
- Создайте пользователя — владельца контейнеров
- Создайте адресное пространство, из которого будут выдаваться IP-адреса для создаваемых контейнеров. Настройки -> База IP-адресов
- В примере я использую подсеть 192.168.0.0/24, так как контейнеры на Proxmox используют тот же диапазон адресов.
- В “Настройках кластера” => “Шаблоны контейнеров” создайте шаблон, параметры из которого будут использоваться по умолчанию для всех создаваемых контейнеров.

Создание шаблона контейнера с параметрами по умолчанию.
В Proxmox отсутствуют такие понятия, как диапазон IP-адресов и шаблоны для создания контейнеров. При создании каждого нового контейнера, следует указывать вручную и IP-адрес, и ресурсы, доступные для нового контейнера.
В VMmanager эти действия стандартизированы и сделаны максимально удобными. Требуется один раз создать несколько шаблонов тарифов и диапазон IP-адресов. При создании контейнера IP-адрес назначается автоматически, а ресурсы указываются путем выбора соответствующего шаблона.

Создание контейнера в Proxmox

Создание контейнера в VMmanager
Перенос контейнеров затруднен тем, что оба менеджера виртуальных серверов используют разные методы хранения информации о ресурсах управляемых контейнеров.
Proxmox использует конфигурационные файлы openvz, VMmanager — хранит все в базе данных mysql, дублируя настройки в файлы для openvz. Поэтому схема усложняется тем, что потребуется создать контейнеры из VMmanager-OVZ и затем заменить этот контейнер на контейнер из Proxmox.
После произведенных настроек имеем на сервере рабочие экземпляры Proxmox и VMmanager-OVZ.
В остальном процесс миграции приводится к нескольким простым шагам:
- Остановка контейнера, созданного в Proxmox
- Создание дампа контейнера.
- Переименование конфигурационного файла контейнера
- Удаление или переименование файлов контейнера
- Создание контейнера в VMmanager-OVZ с теми же параметрами, что и переносимый
- Восстановление дампа в новый контейнер
- Запуск нового контейнера
Чтобы упростить этот процесс, воспользуйтесь примером скрипта, который я прикладываю ниже.
#!/bin/bash
#
for i in `vzlist -Ha|awk '{print $1}'`
do
PASS=`pwgen 10 1`
vzctl stop $i
vzdump $i -dumpdir /vz-dump/
mv /var/lib/vz/private/$i /var/lib/vz/private/$i.proxmox
mv /var/lib/vz/root/$i /var/lib/vz/root/$i.proxmox
mv /etc/vz/conf/$i.conf /etc/vz/conf/$i.conf.proxmox
/usr/local/mgr/sbin/mgrctl -m vemgr vm.edit id=$i name=`grep HOSTNAME /etc/vz/conf/$i.conf.proxmox|awk -F'"' '{print $2}'|awk -F. '{print $1}'` domain=`grep HOSTNAME /etc/vz/conf/$i.conf.proxmox|awk -F'"' '{print $2}'`. iptype=public ip=`grep IP_ADDRESS /etc/vz/conf/$i.conf.proxmox|awk -F'"' '{print $2}'` user=user1 mem=`grep PHYSPAGES /etc/vz/conf/$i.conf.proxmox|awk -F'"' '{print $2}' |awk -F: '{print $2}'|sed -e 's/.$//'` hdd=`grep PHYSPAGES /etc/vz/conf/$i.conf.proxmox|awk -F'"' '{print $2}' |awk -F: '{print $2}'|sed -e 's/.$//'` cpu=`grep CPUS /etc/vz/conf/$i.conf.proxmox|awk -F'"' '{print $2}'` cpufreq=`grep CPUUNITS /etc/vz/conf/$i.conf.proxmox|awk -F'"' '{print $2}'` ostemplate=debian-6.0-i386-minimal password=$PASS confirm=$PASS preset=1 sok=ok;
vzctl stop $i
vzrestore /vz-dump/vzdump-openvz-$i-*.tar $i -force
vzctl start $i
done
#
Сделаю несколько комментариев относительно скрипта:
- Скрипт не учитывает статус контейнера и время активации. Ведь это пример, рассматриваемый в сферическом вакууме.
- Шаблон указан явно — debian-6.0-i386-minimal. Шаблоны контейнеров Proxmox и VMmanager-OVZ могут не совпадать. Но для создания контейнера следует использовать шаблон в качестве заглушки, в последствии все перезапишется данными из дампа, который был сделан со старого контейнера.
- Минимальное количество параметров, требуемое для создания контейнера в VMmanager-OVZ берется из конфигурационного файла контейнера, созданного в Proxmox. При желании конфигурационный файл можно будет вернуть обратно, если там использовались параметры, отличные от тех, что создаются по умолчанию.
- Все неуказанные параметры берутся из первого шаблона контейнера, созданного в VMmanager-OVZ =>Настройки кластера => Шаблоны контейнеров
- После проверки корректности работы перенесенных контейнеров, резервные копии файлов и дампы можно удалить.
Теперь перейдем к варианту миграции с Proxmox с виртуальными серверами на VMmanager-KVM.
Миграции виртуальных серверов с Proxmox на VMmanager-KVM.
К сожалению, здесь не все пойдет так же гладко, как в предыдущем случае.
Установить VMmanager-KVM в качестве основного узла на тот же сервер, где работает Proxmox не получится по причине проблем с зависимостью пакетов. Поэтому рассмотрим миграцию с использованием второго сервера.
Производим настройку VMmanager-KVM, не особо отличающуюся от той, что я описал выше для VMmanager-OVZ
И действуем по следующему алгоритму:
- копируем с сервера Proxmox конфгурационный файл виртуальной машины
- создаем на vmmgr идентичную виртуальную машину
- останавливаем
- останавливаем на сервере Proxmox
- делаем копию файла образа vm
- переносим с сервера Proxmox образ на сервер с VMmanager-KVM и подменяем старый образ
- запускаем vm в VMmanager-KVM
Настройки виртуальных машин proxmox хранятся в файлах /etc/pve/qemu-server/.conf
Файлы образов виртуальных машин Proxmox хранятся в директориях /var/lib/vz/images/Чтобы каждый раз для соединения серверов не вводить авторизационные данные с помощью ssh-keygen создадим ключ-пару и отправим публичный ключ на сервер Proxmox.
cat .ssh/id_rsa.pub |ssh root@proxmox «cat >> /root/.ssh/authorized_keys»
И дальше уже все можно проделать с помощью этого скрипта.
#!/bin/bash
#
scp root@proxmox:/etc/pve/qemu-server/*.conf /root
for i in `ls *.conf|awk -F. '{print $1}'`
do
PASS=`pwgen 10 1`
/usr/local/mgr5/sbin/mgrctl -m vmmgr vm.edit id=$i mem=`grep memory /root/$i.conf|awk '{print $2}'` vcpu=`grep cores /root/$i.conf|awk '{print $2}'` cputune=1000 blkiotune=500 vsize=`grep size /root/$i.conf|awk -F= '{print $2}'| sed -e 's/.$//g'` name=`grep name /root/$i.conf|awk '{print $2}'` domain=`grep name /root/$i.conf|awk '{print $2}'`.`hostname` ip= iptype=public preset=1 password=$PASS confirm=$PASS installtype=installtemplate vmi=CentOS-6-amd64 sok=ok
virsh shutdown `grep name /root/$i.conf|awk '{print $2}'`
ssh root@proxmox “qm stop $i”
ssh root@proxmox “cp /var/lib/vz/images/$i//vm-$i-disk-1.qcow2 /var/lib/vz/images/$i//vm-$i-disk-1.qcow2.bak”
mv /vm/`grep name /root/$i.conf|awk '{print $2}'` /vm/`grep name /root/$i.conf|awk '{print $2}'`.old
echo rsync -avz --partial root@proxmox:/var/lib/vz/images/100/vm-100-disk-1.qcow2 /vm/`grep name /root/$i.conf|awk '{print $2}'`
virsh start `grep name /root/$i.conf|awk '{print $2}'`
done
#
Оставлю пару комментариев по скрипту:
- Сервер с Proxmox указан как “proxmox”.
- Решил оперировать копиями конфигурационных файлов виртуальных машин от Proxmox на сервере с VMmanager, мне показалось это самым простым.
- При создании каждой виртуальной машины с помощью API генерируется произвольный пароль.
- В параметре ‘vmi=’ указан идентификатор шаблона, установленный и доступный для работы. Идентификаторы всех установленных шаблонов можно посмотреть запросом API через командную строку:
/usr/local/mgr5/sbin/mgrctl -m vmmgr osmgr |grep 'installed=ok'|awk '{print $1}'|sed -e's/id=//' - Так же как и в прошлом скрипте не учитывается время развертывания сервера на VMmanager.
- Файлы образов переносятся без какой-либо предварительной обработки. И Proxmox и VMmanager понимают формат qcow2.
- Оригинальный файл-образ созданной VM на VMmanager переименовывается и располагается рядом)
При описании возможностей переноса контейнеров и виртуальных машин использовалась тестовая установка proxmox со значениями по умолчанию и ситуация с боевыми серверами может отличаться. Если у Вас есть опыт реального применения Proxmox и вы готовы поделиться им, то будет очень приятно увидеть ваши комментарии. Удачной миграции и максимальной автоматизации в сфере предоставления услуг хостинга!