bUbuntu
Блог начинающих и продвинутых пользователей Ubuntu.

Виртуализация по убунтовски. KVM + WebVirtMgr.

Эх, все переходят на виртуальные машины. Для многих фирм это технологический стандарт. Вот и я решил поковырять это дело, и доковырялся до того, что полностью перешел на виртуальные машины. Раньше все сервисы были на одном компе, сейчас у меня 9 виртуальных машин. Все это конечно хорошо, но вот как управлять этим зоопарком? Долгие поиски, попробовав все что только можно, меня привели к WebVirtMgr. Что для дома нужно (и для бизнеса)? Простота и доступность из любой точки мира. =)

Нус, приступим!

Для начала необходимо подготовить хостовую машину:

1. Устанавливаем и настраиваем KVM + libvirt:

sudo apt-get install kvm sasl2-bin qemu-kvm libvirt-bin libvirt0 python-libvirt

Далее настроим фаервол. Для этого создадим файлик /etc/ufw/applications.d/libvirtd с одержимым:

[Libvirt]
title=Virtualization library
description=Open port for WebVirtMgr
ports=16509/tcp

И добавим правило:

sudo ufw allow from any to any app Libvirt

Возможные проблемы:

Не стартует libvrt.

sudo service libvirt-bin start
      libvirt-bin start/running, process 19416
sudo service libvirt-bin status
      libvirt-bin stop/waiting

Что делать? Как обычно лезем в лог:

sudo tail /var/log/libvirt/libvirtd.log
2014-09-14 20:11:46: 18902: info : libvirt version: 0.9.8
2014-09-14 20:11:46: 18902: error : virNetServerMDNSStart:460 : internal error Failed to create mDNS client: Daemon not running

И если вы увидите ошибку virNetServerMDNSStart, то скорее всего у вас не установлен dBus. Устанавливаем его командой:

apt-get install dbus -q

Далее проверяем:

sudo service libvirt-bin start
      libvirt-bin start/running, process 19416
sudo service libvirt-bin status
      libvirt-bin start/running, process 19416

И видим что у нас все хорошо, все бежит.

Редактируем конфиг libvirt, а именно добавим параметр -l (что обозначает listen) в /etc/default/libvirt-bin. Должна получится вот такая строчка:

libvirtd_opts="-d -l"

Раскоментируем строчку в /etc/libvirt/libvirtd.conf:

listen_tls = 0
listen_tcp = 1

Перезагружаем libvirt:

sudo service libvirt-bin restart

Далее переходим к настройке доступа. Тут есть 2 варианта: по TCP и по SSH. Я опишу только TCP способ, т.к. мне так удобнее. Если возникнут вопросы, то могу описать и подключение по SSH.

Продолжаем. Первым делом добавляем пользователя и настройки пароля в saslpasswd2. Очень важно указать правильное название приложения libvirt. А для примера будем использовать мой ник как логин.

sudo saslpasswd2 -a libvirt veo
Password: xxxxxx
Again (for verification): xxxxxx

Чтобы посмотреть список всех пользователей можно воспользоваться командой sasldblistusers2. Следующая команда предоставит доступ к базе данных пользователей libvirt, которая находится по адресу /etc/libvirt/passwd.db.

sudo sasldblistusers2 -f /etc/libvirt/passwd.db
veo@vm-host: userPassword

Чтобы закрыть доступ пользователю необходимо воспользоваться следующей командой:

sudo saslpasswd2 -a libvirt -d veo

Проверяем настройки доступа:

virsh -c qemu+tcp://localhost/system nodeinfo
Please enter your authentication name: veo
Please enter your password:
CPU model:           x86_64
CPU(s):              8
CPU frequency:       3500 MHz
CPU socket(s):       1
Core(s) per socket:  4
Thread(s) per core:  2
NUMA cell(s):        1
Memory size:         32654900 KiB

Далее нужно создать сетевой мост на сервере. Для этого установим пакет bridge-utils.

apt-get install bridge-utils

Теперь настроим, открыв /etc/network/interfaces:

nano /etc/network/interfaces

Мой сначала выглядел так:

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo
  iface lo inet loopback

# The primary network interface
auto eth0
iface eth0 inet static
  address 192.168.0.1
  netmask 255.255.255.0
  network 192.168.0.0
  broadcast 192.168.0.255
  gateway 192.168.0.252

Изменил так:

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto eth0
iface eth0 inet manual

auto br0
iface br0 inet static
  address 192.168.0.100
  network 192.168.0.0
  netmask 255.255.255.0
  broadcast 192.168.0.255
  gateway 192.168.0.252
  bridge_ports eth0
  bridge_fd 9
  bridge_hello 2
  bridge_maxage 12
  bridge_stp off

(Убедитесь, что используются правильные настройки сети!)

Перезагрузим network:

/etc/init.d/networking restart

И запустим:

ifconfig

Теперь должен показать сетевой мост (br0):

root@vm-host:~# ifconfig
br0      Link encap:Ethernet HWaddr 00:1e:90:f3:f0:02
         inet addr:192.168.0.1 Bcast:192.168.0.255 Mask:255.255.255.0
         inet6 addr: fe80::21e:90ff:fef3:f002/64 Scope:Link
         UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
         RX packets:17 errors:0 dropped:0 overruns:0 frame:0
         TX packets:17 errors:0 dropped:0 overruns:0 carrier:0
         collisions:0 txqueuelen:0
         RX bytes:1196 (1.1 KB) TX bytes:1966 (1.9 KB)

eth0     Link encap:Ethernet HWaddr 00:1e:90:f3:f0:02
         UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
         RX packets:35100 errors:0 dropped:0 overruns:0 frame:0
         TX packets:18619 errors:0 dropped:0 overruns:0 carrier:0
         collisions:0 txqueuelen:1000
         RX bytes:51126318 (51.1 MB) TX bytes:1521772 (1.5 MB)
         Interrupt:41 Base address:0x6000

lo       Link encap:Local Loopback
         inet addr:127.0.0.1 Mask:255.0.0.0
         inet6 addr: ::1/128 Scope:Host
         UP LOOPBACK RUNNING MTU:16436 Metric:1
         RX packets:0 errors:0 dropped:0 overruns:0 frame:0
         TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
         collisions:0 txqueuelen:0
         RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)

virbr0   Link encap:Ethernet HWaddr 46:b4:d1:49:75:eb
         inet addr:192.168.100.1 Bcast:192.168.100.255 Mask:255.255.255.0
         UP BROADCAST MULTICAST MTU:1500 Metric:1
         RX packets:0 errors:0 dropped:0 overruns:0 frame:0
         TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
         collisions:0 txqueuelen:0
         RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)

Если все ок, то переходим непосредственно к установке самого WebVirtMgr.

2. Устанавливаем нужные нам пакеты:

sudo apt-get install git python-pip python-libvirt python-libxml2 novnc supervisor nginx

3. Устанавливаем зависимости питона и Django

git clone git://github.com/retspen/webvirtmgr.git
cd webvirtmgr
sudo pip install -r requirements.txt
./manage.py syncdb
./manage.py collectstatic

Вводим пользовательскую информацию:

You just installed Django's auth system, which means you don't have any superusers defined.
Would you like to create one now? (yes/no): yes (Введите: yes)
Username (Leave blank to use 'admin'): admin (Введите: имя пользователя)
E-mail address: veo@bubuntu.club (Введите: адрес электронной почты)
Password: xxxxxx (Введите: пароль)
Password (again): xxxxxx (Введите: подтверждение пароля)
Superuser created successfully.

Чтобы добавить еще одного суперпользователя, просто введите:

./manage.py createsuperuser

4. Настройка nginx

На этом этапе я хотел бы остановится немного поподробнее. А именно на тему безопасности. WebVirtMgr работает на 8000 порту и доступен только с localhost. Если вы сделаете проксирование через nginx без https, то логины и пароли, которые вы будите вводить, будут передоваться открытым текстом. А это опасно если вы находитесь в публичной wifi сети или в локальной сети, где много народу. Пароли легко будет перехватить. Если вы реально знаете что вы делаете, то проигнорируйте мое предупреждение и продолжайте настройки nginx. Продолжаем…

cd ..
sudo mv webvirtmgr /var/www/

Добавляем файл webvirtmgr.conf в дирикторию /etc/nginx/conf.d/ с содержимым:

server {
    listen 80 default_server;

    server_name $hostname;
    #access_log /var/log/nginx/webvirtmgr_access_log; 

    location /static/ {
        root /var/www/webvirtmgr/webvirtmgr; # or /srv instead of /var
        expires max;
    }

    location / {
        proxy_pass http://127.0.0.1:8000;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-for $proxy_add_x_forwarded_for;
        proxy_set_header Host $host:$server_port;
        proxy_set_header X-Forwarded-Proto $remote_addr;
        proxy_connect_timeout 600;
        proxy_read_timeout 600;
        proxy_send_timeout 600;
        client_max_body_size 1024M; # Set higher depending on your needs
    }
}

Убираем дефолтный конфиг из каталога /etc/nginx/conf.d/:

sudo mv /etc/nginx/conf.d/default.conf /home/veo/b/

Перезагружаем nginx

sudo service nginx restart

5. Установка Supervisor

Выполняем следующие команды:

sudo service novnc stop
sudo update-rc.d -f novnc remove
sudo rm /etc/init.d/novnc

Создадим фвйлик:

sudo nano /etc/insserv/overrides/novnc

#!/bin/sh
### BEGIN INIT INFO
# Provides:          nova-novncproxy
# Required-Start:    $network $local_fs $remote_fs $syslog
# Required-Stop:     $remote_fs
# Default-Start:     
# Default-Stop:      
# Short-Description: Nova NoVNC proxy
# Description:       Nova NoVNC proxy
### END INIT INFO

И выставим правильные права на папку:

sudo chown -R www-data:www-data /var/www/webvirtmgr

Добавляем файл webvirtmgr.conf в дирикторию /etc/supervisor/conf.d:

[program:webvirtmgr]
command=/usr/bin/python /var/www/webvirtmgr/manage.py run_gunicorn -c /var/www/webvirtmgr/conf/gunicorn.conf.py
directory=/var/www/webvirtmgr
autostart=true
autorestart=true
stdout_logfile=/var/log/supervisor/webvirtmgr.log
redirect_stderr=true
user=www-data

[program:webvirtmgr-console]
command=/usr/bin/python /var/www/webvirtmgr/console/webvirtmgr-console
directory=/var/www/webvirtmgr
autostart=true
autorestart=true
stdout_logfile=/var/log/supervisor/webvirtmgr-console.log
redirect_stderr=true
user=www-data

Перезагружаем Supervisor:

sudo service supervisor restart

Вот в принципе и все) Если никкаких ошибок не произошло, то при вводе в браузере http://IP_адрес_сервера/ должна открыться вот такая вот страничка:

vwm
Прошу прощения за скрин, пишу статью с работы.

В следующей статье опишу настройки виртуалок уже через вэб интерфейс.

VN:F [1.9.22_1171]
Rating: 8.6/10 (5 votes cast)
Виртуализация по убунтовски. KVM + WebVirtMgr., 8.6 out of 10 based on 5 ratings

Метки: , ,

Комментарии запрещены.