分享

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

 浸心阁 2015-06-08


Хочу поделиться удобным способом создания и управления виртуальными машинами в графическом режиме для OS Linux.

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

Archipel использует протокол XMPP в качестве системы обмена между своими подсистемами. Более подробную информацию можно получить на сайте проекта /



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.. При установке обязательно нужно заменить этот адрес на адрес вашего сервера.

echo archipel. > /etc/hostname
hostname -b -F /etc/hostname


Так же не забудьте изменить /etc/hosts в соответствии с вашим адресом.

Убедитесь, что сервер доступен по указанному адресу с сервера и вашего компьютера.

ping archipel.


Сохраним копию конфигурационного файла 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./' /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. 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. --password=YOURPASSWORD --create
archipel-rolesnode --jid=admin@archipel. --password=YOURPASSWORD --create
archipel-adminaccounts --jid=admin@archipel. --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.@archipel./archipel.


Для проверки корректности работы можно выполнить расширенный тест:

archipel-testxmppserver --jid=admin@FQDN --password=YOURPASSWORD


Если у вас не установлен модуль xmlrpc – 8 тест и далее выполняться с ошибками. На дальнейшую работу это не повлияет.



Установка клиента.


Клиент Archipel написан полностью на Javascript. Для работы он не требует никаких серверных языков типа php, python, java или баз данных. Достаточно просто распаковать архив и поместить его в папку веб-сервера.

Так же можно использовать публичную версию клиента, доступную по адресу app./.



Для примера мы установим nginx и разместим файлы на своем сервере. Вместо nginx может быть любой http сервер, и он не обязательно должен быть расположен на том же сервере, что и агент.



# aptitude install nginx
cd /usr/share/nginx/www/
wget http://nightlies./latest-archipel-client.tar.gz
tar zxf latest-archipel-client.tar.gz




Теперь можно открыть клиента Archipel в браузере: http://archipel./Archipel/

Должна отобразиться такая страница:



В качестве Jabber ID вводим admin@archipel. и установленный пароль администратора.

Не забудьте везде заменить archipel. на адрес вашего сервера!!!

После входа можно приступать к созданию виртуальных машин.



Установка 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./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, но это уже тема других статей.
            
       

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多