Управляем KVM через браузер с помощью WebVirtMgr
При работе с системами виртуализации всегда хочеться получить доступ к хост-машине с любой точки мира и с любого устройства которое есть под рукой. Если пользоваться штатными инструментами KVM, XenServer, VMWare то там необходима установленая консоль управления на локальном ПК и если нужно сделать, что то удаленно и быстро то возникают проблемы… начинаеш ставить консоль, не хватает .Net… поставил его, не хватает чего то другого. В результате, иногда, чтоб перегрузить умершую виртуалку требуется 30-60мин пока все скачаеш и поставишь. Хотя все это можно проделать с консоли за 30сек 🙂
Но мы не об этом.
Тут будет актуально имет скорый доступ к управлению через браузер, что даст возможность подключится даже с телефона.
Приступим к настройке.
Исходные данные: Debian 7.7
Настраиваем все с нуля.
Проверяем поддерживает ли процессор виртуализацию
cat /proc/cpuinfo | egrep '(vmx|svm)' flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx lm constant_tsc arch_perfmon pebs bts rep_good nopl aperfmperf pni dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm dca lahf_lm dtherm tpr_shadow ......... |
Если вывод команды пустой – меняем железо)
Еще не мешает посмотреть включена ли виртуализация в Биосе, иначе все будет безбожно тормозить. Иногда сам KVM об этом предупреждает в выводе dmesg
Ставим KVM и libvirt
apt-get install kvm sasl2-bin qemu-kvm libvirt-bin libvirt0 python-libvirt bridge-utils |
Проверяем статус
service libvirt-bin status [ ok ] Checking status of libvirt management daemon: libvirtd running. |
Для управления виртуальными машинами из-под учётной записи, отличной от root, необходимо добавить пользователя в группу libvirt:
adduser <megouser> libvirt |
Проверяем загрузку модулей ядра
lsmod | grep kvm kvm_intel 122053 3 kvm 291967 1 kvm_intel |
Редактируем конфиг l/etc/default/libvirt-bin, разрешив libvirt слушать на интерфейсе:
libvirtd_opts="-d -l" |
Включим TCP для libvirt в /etc/libvirt/libvirtd.conf:
... listen_tls = 0 listen_tcp = 1 .... |
Перезагружаем libvirt:
service libvirt-bin restart |
Теперь добавляем пользователя которому разрешено манипулировать libvirt
saslpasswd2 -a libvirt <megouser> Password: Again (for verification): |
Обязательно нужно указать приложение для которого создается пользователь
Проверить список пользователей :
sasldblistusers2 -f /etc/libvirt/passwd.db <megouser>@kvm: userPassword |
kvm – имя хост машины
Пробуем подкючится нашим пользователем
virsh -c qemu+tcp://localhost/system nodeinfo Please enter your authentication name: <megouser>@kvm Please enter your password: CPU model: x86_64 CPU(s): 8 CPU frequency: 2000 MHz CPU socket(s): 2 Core(s) per socket: 4 Thread(s) per core: 1 NUMA cell(s): 1 Memory size: 8193064 KiB |
Теперь настроим сеть:
nano /etc/network/interfaces iface eth0 inet manual auto br0 iface br0 inet static address 10.0.0.14 netmask 255.255.255.0 gateway 10.0.0.1 dns-nameserver 10.0.0.1 bridge_ports eth0 bridge_stp off bridge_fd 0 bridge_maxwait 0 |
Применяем настройки
/etc/init.d/networking restart |
Добавляем форвард трафика
sysctl net.ipv4.conf.all.forwarding=1 sysctl net.ipv4.conf.all.proxy_arp=1 |
Смотрим на интерфейсы
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq master br0 state UP qlen 1000 link/ether 00:19:b9:ea:dd:54 brd ff:ff:ff:ff:ff:ff 3: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP link/ether 00:19:b9:ea:dd:54 brd ff:ff:ff:ff:ff:ff inet 10.0.0.14/24 brd 10.0.0.255 scope global br0 inet6 fe80::219:b9ff:feea:dd54/64 scope link valid_lft forever preferred_lft forever 4: virbr0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP link/ether fe:54:00:6a:9e:33 brd ff:ff:ff:ff:ff:ff inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0 |
Теперь можно приступить к установке WebVirtMgr
apt-get install git python-pip python-libvirt python-libxml2 novnc supervisor nginx |
Ставим Django окружение
git clone git://github.com/retspen/webvirtmgr.git cd webvirtmgr 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 (Put: yes) Username (Leave blank to use 'admin'): admin (Put: your username or login) E-mail address: username@domain.local (Put: your email) Password: xxxxxx (Put: your password) Password (again): xxxxxx (Put: confirm password) Superuser created successfully. |
Для добавления еще одного пользователя
./manage.py createsuperuser |
Настраиваем проксирование доступа через Nginx
Переносим файлі для вэб
cd .. mv webvirtmgr /var/www/ |
Создаем файл конфига /etc/nginx/conf.d/webvirtmgr.conf
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 } } |
Применяем настройки
service nginx restart |
Если не применилось, смотреть в каталог nginx на наличие default конфига. если есть – убрать
Установка Supervisor
service novnc stop update-rc.d -f novnc remove chown -R www-data:www-data /var/www/webvirtmgr |
В конец файла /etc/supervisord.conf добавляем такие строки
[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 logfile=/var/log/supervisor/webvirtmgr.log log_stderr=true user=www-data [program:webvirtmgri-novnc] command=/usr/bin/python /var/www/webvirtmgr/console/webvirtmgr-novnc directory=/var/www/webvirtmgr autostart=true autorestart=true stdout_logfile=/var/log/supervisor/webvirtmgr-nonvc.log redirect_stderr=true user=www-data |
Применяем настройки
service supervisor restart |
Пробуем зайти на наш сервер
http://<ip of kvm>/ |