Установка и использование Archipel для управления виртуальными машинами

от автора


Хочу поделиться удобным способом создания и управления виртуальными машинами в графическом режиме для OS Linux.
Archipel – это маштабируемое решение для управления виртуальными машинами и гипервизорами с помощью графического интерфейса. Archipel позволяет удобно управлять как несколькими виртуальными машинами на одном сервере, так и сотнями виртуалок, размещенных на десятках серверов в разных датацетрах.
Archipel использует протокол XMPP в качестве системы обмена между своими подсистемами. Более подробную информацию можно получить на сайте проекта archipelproject.org/

Archipel – очень простое приложение, для установки достаточно выполнить

$ easy_install archipel-agent && archipel-initinstall 

Но для того, что бы все заработало, нужно провести некоторые предварительные настройки.
Для работы archipel требует установленный и работающий XMPP сервер (ejabberd) и любой веб-сервер для хостинга Archipel Agent (UI).

Мы установим 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 подключаем следующие диски:

  1. Drive type: disk, source type: file, source: «ваш созданный диск», bus: virtio, target: vda
  2. Drive type: cdrom, source type: file, source: iso с дистрибутивом, bus: ide, target: hdc
  3. 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, но это уже тема других статей.

ссылка на оригинал статьи http://habrahabr.ru/post/191764/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *