Хочу поделиться удобным способом создания и управления виртуальными машинами в графическом режиме для OS Linux.
Archipel – это маштабируемое решение для управления виртуальными машинами и гипервизорами с помощью графического интерфейса. Archipel позволяет удобно управлять как несколькими виртуальными машинами на одном сервере, так и сотнями виртуалок, размещенных на десятках серверов в разных датацетрах.
Archipel использует протокол XMPP в качестве системы обмена между своими подсистемами. Более подробную информацию можно получить на сайте проекта archipelproject.org/
Archipel – очень простое приложение, для установки достаточно выполнить
$ easy_install archipel-agent && archipel-initinstall
Но для того, что бы все заработало, нужно провести некоторые предварительные настройки.
Для работы archipel требует установленный и работающий XMPP сервер (ejabberd) и любой веб-сервер для
Мы установим Archipel в односерверном варианте на Ubuntu 12.04 LTS, в нашем случае ejabberd, nginx и виртуальные машины будут расположены на одном сервере. В более серьезных проектах все это можно разнести по разным серверам.
Установка и настройка XMPP
Нам необходимо установить ejabberd версии не ниже 2.1.6 с включенными модулями mod_admin_extra и ejabberd_xmlrpc (не обязательно).
Устанавливаем ejabberd из репозитория:
$ aptitude install ejabberd
Модуль mod_admin_extra уже входит в поставку, так что отдельно его устанавливать не нужно.
Настраиваем ejabberd для работы archipel.
По умолчанию в debian/Ubuntu настройки ejabberd заточены под простой «чат-сервер», и они не совсем подходят для наших задач, где требуется полноценный XMPP сервер.
Для работы требуется иметь корректный FQDN (полное имя домена). Для избежание дальнейших граблей, очень желательно установить его до настройки ejabberd и привести в соответствие hostname.
Для примера мы будем использовать FQDN archipel.example.com. При установке обязательно нужно заменить этот адрес на адрес вашего сервера.
echo archipel.example.com > /etc/hostname
hostname -b -F /etc/hostname
Так же не забудьте изменить /etc/hosts в соответствии с вашим адресом.
Убедитесь, что сервер доступен по указанному адресу с сервера и вашего компьютера.
ping archipel.example.com
Сохраним копию конфигурационного файла ejabberd
mv /etc/ejabberd/ejabberd.cfg /etc/ejabberd/ejabberd.cfg.orig
Сам файл ejabberd.cfg приводим к следующему виду:
%%%
%%% ejabberd configuration file
%%%
%%% Archipel Sample Configuration
%%% =======================
%%% OVERRIDE STORED OPTIONS
%% loglevel: Verbosity of log files generated by ejabberd.
{loglevel, 3}.
%%% ================
%%% SERVED HOSTNAMES
%% CHANGE FQDN to your FQDN
{hosts, ["FQDN"]}.
%%% ===============
%%% LISTENING PORTS
{listen,
[
%% If you have compiled the ejabberd-xmlrpc, uncomment the following line
%% {4560, ejabberd_xmlrpc, []},
{5222, ejabberd_c2s, [
{access, c2s},
starttls,
{certfile, "/etc/ejabberd/ejabberd.pem"},
{max_stanza_size, 65536000}
]},
{5269, ejabberd_s2s_in, [
{max_stanza_size, 65536000}
]},
{5280, ejabberd_http, [
http_bind,
http_poll,
web_admin
]},
%% Make a SSL version of the BOSH service
{5281, ejabberd_http, [
http_bind,
http_poll,
tls,{certfile, "/etc/ejabberd/ejabberd.pem"}
]}
]}.
%%% ===============
%%% S2S
{route_subdomains, s2s}.
{s2s_use_starttls, true}.
{s2s_default_policy, allow}.
{s2s_certfile, "/etc/ejabberd/ejabberd.pem"}.
%%% ==============
%%% AUTHENTICATION
{auth_method, internal}.
%%% ===============
%%% TRAFFIC SHAPERS
{shaper, normal, {maxrate, 1000}}.
{shaper, fast, {maxrate, 50000}}.
%%% ====================
%%% ACCESS CONTROL LISTS
%% CHANGE FQDN to your FQDN
{acl, admin, {user, "admin", "FQDN"}}.
{acl, local, {user_regexp, ""}}.
%% if you HAVE NOT compiled ejabberd-xmlrpc module, you
%% Need to declare all your hypervisors as ejabberd admin
%% The hypervisor JID is defined in archipel.conf. By default it
%% it is hypervisor@FQDN
{acl, admin, {user, "hypervisor", "FQDN"}}.
%% {acl, admin, {user, "hypervisor-x", "FQDN"}}.
%% {acl, admin, {user, "hypervisor-n", "FQDN"}}.
%%% ============
%%% ACCESS RULES
{access, max_user_sessions, [{10, all}]}.
{access, local, [{allow, local}]}.
{access, c2s, [{deny, blocked}, {allow, all}]}.
{access, c2s_shaper, [{none, admin}, {none, all}]}.
{access, s2s_shaper, [{fast, all}]}.
{access, announce, [{allow, admin}]}.
{access, configure, [{allow, admin}]}.
{access, muc_admin, [{allow, admin}]}.
{access, muc, [{allow, all}]}.
{access, muc_create, [{allow, local}]}.
{access, pubsub_createnode, [{allow, all}]}.
%%% ================
%%% DEFAULT LANGUAGE
{language, "en"}.
%%% =======
%%% REGISTRATION
{access, register, [{allow, all}]}.
{registration_timeout, infinity}.
%%% =======
%%% MODULES
{modules,
[
{mod_adhoc, []},
{mod_announce, [{access, announce}]}, % requires mod_adhoc
{mod_caps, []},
{mod_configure,[]},
{mod_disco, []},
{mod_http_bind,[
{max_inactivity, 480} % timeout value for the BOSH, usefull for a large number of VM
]},
{mod_irc, []},
{mod_last, []},
{mod_muc, [
{access, muc},
{access_create, muc_create},
{access_persistent, muc_create},
{access_admin, muc_admin}
]},
{mod_offline, []},
{mod_privacy, []},
{mod_private, []},
{mod_pubsub, [ % requires mod_caps
{access_createnode, pubsub_createnode},
{ignore_pep_from_offline, true},
{last_item_cache, false},
{plugins, ["flat", "hometree", "pep"]},
{max_items_node, 1000}
]},
{mod_register, [
{access, register}
]},
{mod_roster, []},
{mod_shared_roster,[]},
{mod_time, []},
{mod_vcard, []},
{mod_version, []},
{mod_admin_extra, []}
]}.
В файле ejabberd.cfg меняем все вхождения FQDN на ваш адрес сервера
sed –I 's/FQDN/archipel.example.com/' /etc/ejabberd/ejabberd.cfg
Создадим новый самоподписанный сертификат для ejabberd. Обязательно укажите ваш FQDN в запросе Common Name.
openssl req -new -x509 -newkey rsa:1024 -days 3650 -keyout /etc/ejabberd/privkey.pem -out /etc/ejabberd/ejabberd.pem
openssl rsa -in /etc/ejabberd/privkey.pem -out /etc/ejabberd/privkey.pem
cat /etc/ejabberd/privkey.pem >> /etc/ejabberd/ejabberd.pem
rm /etc/ejabberd/privkey.pem
После этого запускаем ejabberd
service ejabberd start
Если ejabberd не запускается – проверьте наличие процесса beam в списке запущенных процессов. При необходимости убейте этот процесс.
Так же бывает ошибка при изменении hostname после первого запуска ejabberd. В этом случае нужно очистить директорию /var/lib/ejabberd/ и перезапустить сервис ejabbed.
Проверить работоспособность можно с помощью ejabberdctl:
$ ejabberdctl status
The node ejabberd@archipel is started with status: started
ejabberd 2.1.10 is running in that node
Создаем аккаунт администратора (имя желательно использовать admin):
$ ejabberdctl register admin archipel.example.com yourpassword
Мы закончили с настройкой ejabberd и теперь можно приступить к установке Archipel agent
Archipel Agent.
Работа Archipel agent бессмысленна без средств виртуализации и гипервизора, которыми он будет управлять.
Для работы нам требуется:
- Современный дистрибутив с поддержкой KVM
- qemu
- libvirt (0.8.7+)
- python 2.7+
- qemu-img
- python-imaging
- numpy
Установим зависимости:
aptitude install python-libvirt libvirt-bin libvirt0 python-imaging python-numpy qemu-utils python-pip qemu-kvm python-sqlalchemy-ext
И сам агент:
easy_install archipel-agent
archipel-initinstall
Создаем pubsub nodes:
archipel-tagnode --jid=admin@archipel.example.com --password=YOURPASSWORD --create
archipel-rolesnode --jid=admin@archipel.example.com --password=YOURPASSWORD --create
archipel-adminaccounts --jid=admin@archipel.example.com --password=YOURPASSWORD --create
Здесь admin и YOURPASSWORD нужно заменить на ваши данные, которые вводились при создании аккаунта администратора.
Теперь нужно проверить файл /etc/archipel/archipel.conf, особенно обратить внимание на строчку xmpp_server, она должна совпадать с вашим FQDN.
Пробуем запустить агента:
/etc/init.d/archipel start
Если запуск не удался, можно запустить агента вручную с помощью команды runarchipel
, так будут видны ошибки.
Логи агента хранятся в файле /var/log/archipel/archipel.log
Если запуск прошел успешно, в список подключенных пользователей jabber добавиться наш агент:
$ ejabberdctl connected_users
archipel.example.com@archipel.example.com/archipel.example.com
Для проверки корректности работы можно выполнить расширенный тест:
archipel-testxmppserver --jid=admin@FQDN --password=YOURPASSWORD
Если у вас не установлен модуль xmlrpc – 8 тест и далее выполняться с ошибками. На дальнейшую работу это не повлияет.
Установка клиента.
Клиент Archipel написан полностью на Javascript. Для работы он не требует никаких серверных языков типа php, python, java или баз данных. Достаточно просто распаковать архив и поместить его в папку веб-сервера.
Так же можно использовать публичную версию клиента, доступную по адресу app.archipelproject.org/.
Для примера мы установим nginx и разместим файлы на своем сервере. Вместо nginx может быть любой http сервер, и он не обязательно должен быть расположен на том же сервере, что и агент.
# aptitude install nginx
cd /usr/share/nginx/www/
wget http://nightlies.archipelproject.org/latest-archipel-client.tar.gz
tar zxf latest-archipel-client.tar.gz
Теперь можно открыть клиента Archipel в браузере: http://archipel.example.com/Archipel/
Должна отобразиться такая страница:
В качестве Jabber ID вводим admin@archipel.example.com и установленный пароль администратора.
Не забудьте везде заменить archipel.example.com на адрес вашего сервера!!!
После входа можно приступать к созданию виртуальных машин.
Установка Windows Server 2008R2 как гостевую ОС
Для примера попробуем создать виртуальную машину с Windows Server 2008 R2.
В первую очередь нам нужно добавить аккаунт гипервизора в наш контактный лист.
После добавления при выборе агента в списке будет виден вот такой статус сервера с графиками загрузки:
Для создания новой виртуальной машины выбираем нужного агента, переходим в пункт Virtual Machines, внизу нажимаем кнопку с «+». В появившемся окне заполняем данные. Поля являются информационными и не обязательны для заполнения, если не указать имя машины – оно будет сгенерировано автоматически. После создания аккаунт виртуальной машины попросит авторизовать его. Я советую дать разрешение на авторизацию.
После этого можно выделить новую виртуальную машину в списке контактов и перейти к ее настройке.
В настройках можно указать размер RAM (Definition > Basics > Memory), количество процессоров (Definition > Basics > Virtual CPUs), порядок загрузки (Definition > Basics > Boot from); добавить виртуальные диски cd/dvd (Definition > Virtual Medias), виртуальные сети (Definition > Virtual Nics), диски (Disks) и другие. Так же можно делать снапшоты и подключаться через виртуальную консоль к компьютеру.
Настройки виртуальных сетей находятся в агенте, меню Networks.
После изменения настроек для их сохранения нужно нажать на кнопку Validate.
Для запуска тестового сервера мы добавим новую сеть с типом Nat, в этом случае виртуальная машина будет выходить в интернет с IP-адресом хоста. Если вы хотите выделить для виртуальной машины отдельный IP – можно использовать режим Bridge.
Не забудем запустить сеть (выделить сеть и нажать кнопку с галочкой внизу списка)
Добавим системный диск
Все диски и образы храняться в папке /vm/ на компьютере-гипервизоре.
Предварительно добавляем в папку /vm/iso/ iso-образы windows server и драйверов virtio (можно взять на alt.fedoraproject.org/pub/alt/virtio-win/latest/images/bin/)
В Definition > Virtual Medias подключаем следующие диски:
- Drive type: disk, source type: file, source: «ваш созданный диск», bus: virtio, target: vda
- Drive type: cdrom, source type: file, source: iso с дистрибутивом, bus: ide, target: hdc
- Drive type: cdrom, source type: file, source: iso с virtio, bus: usb, target: hde
USB мы используем для второго cdrom из-за того, что поддерживается только 1 IDE канал.
В Virtual Nics создаем сетевую карту:
Type: Network, Source: имя созданной сети с nat, Model: virtio
После этого можно запустить виртуальную машину (Controls > Start) и подключиться к VNC Console
Windows 2008 R2 ничего не знает о virtio, поэтому мы подключили второй cdrom с драйверами и теперь можем их загрузить.
В списке драйверов выбираем Red Hat VirtIO SCSI Controller, после их загрузки появится системный диск, на который можно устанавливать Windows.
Дальнейшая установка проходит как обычно. После установки не забудьте добавить еще 2 драйвера с диска virtio: Network и Baloon (нужен для изменения памяти)
Осталось дать доступ к сервисам виртуальной машины с помощью маппинга портов либо установки и настройки vpn, но это уже тема других статей.
Автор: dkopitsa