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

в 14:11, , рубрики: kvm, виртуализация, метки:

Установка и использование 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/
Должна отобразиться такая страница:
Установка и использование Archipel для управления виртуальными машинами
В качестве Jabber ID вводим admin@archipel.example.com и установленный пароль администратора.
Не забудьте везде заменить archipel.example.com на адрес вашего сервера!!!
После входа можно приступать к созданию виртуальных машин.

Установка Windows Server 2008R2 как гостевую ОС

Для примера попробуем создать виртуальную машину с Windows Server 2008 R2.
В первую очередь нам нужно добавить аккаунт гипервизора в наш контактный лист.
Установка и использование Archipel для управления виртуальными машинами
После добавления при выборе агента в списке будет виден вот такой статус сервера с графиками загрузки:
Установка и использование Archipel для управления виртуальными машинами
Для создания новой виртуальной машины выбираем нужного агента, переходим в пункт 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.
Установка и использование Archipel для управления виртуальными машинами
Не забудем запустить сеть (выделить сеть и нажать кнопку с галочкой внизу списка)
Добавим системный диск
Установка и использование Archipel для управления виртуальными машинами
Все диски и образы храняться в папке /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
Установка и использование Archipel для управления виртуальными машинами

Windows 2008 R2 ничего не знает о virtio, поэтому мы подключили второй cdrom с драйверами и теперь можем их загрузить.
В списке драйверов выбираем Red Hat VirtIO SCSI Controller, после их загрузки появится системный диск, на который можно устанавливать Windows.

Дальнейшая установка проходит как обычно. После установки не забудьте добавить еще 2 драйвера с диска virtio: Network и Baloon (нужен для изменения памяти)

Осталось дать доступ к сервисам виртуальной машины с помощью маппинга портов либо установки и настройки vpn, но это уже тема других статей.

Автор: dkopitsa

Источник

Поделиться

* - обязательные к заполнению поля