QEMU KVM - Настройка узла виртуализации на базе libvirt

HELP-ME-24.COM (Freelance Team), Черноусов Антон

В статье "Настройка сети Ubuntu Linux для работы с системой виртуализации KVM/QEMU" я начал рассматривать работу с подсистемой Libvirt выступающей в качестве прослойки между низкоуровневыми интерфейсами виртуализации и различными приложениями для управления виртуальными машинами и сегодня я более подробно разберу вопросы настройки web-интерфейса для управления группой узлов виртуализации.

Для управления узлами виртуализации (физическими хостами виртуализации) существует множество реализаций консолей управления, как коммерческих так и OpenSource. Я предпочитаю использовать Opensource решение WebVirt manager.

Официальный git-проекта https://github.com/retspen/webvirtmgr. Это решение не предназначено для предоставления услуг хостинга и билинга, но идеально подходит для управления фермой виртуализации внутри компании.

Повторно рассмотрим настройку подсистемы libvirt, но теперь будем рассматривать для двух платформ Centos и Ubuntu. 

Установка поддержки libvirt в Centos и Ubuntu server

Для установки поддержки libvirt в Centos выполните следующие команды от имени суперпользователя root:

# yum install qemu-kvm libvirt libvirt-python libguestfs-tools virt-install

Для операционной системы Ubuntu server выполните команды:

# aptitude install qemu-kvm libvirt-bin ubuntu-vm-builder bridge-utils qemu-utils 

Разрешаем удаленное управление libvirt

Для настройки удаленного управления libvirt необходимо разрешить удаленные подключения с центра виртуализации и создать внутреннего sasl-пользователя. Эти операции в разных дистрибутивах выполняются по разному хотя и реализуют один и тот же функционал.

Для разрешения удаленных подключений к демону libvirt в Centos 7 измените файлы:

В файле /etc/sysconfig/libvirtd необходимо раскомментировать параметр:

LIBVIRTD_ARGS="--listen"

В файле /etc/libvirt/libvirtd.conf измените параметры:

listen_tls = 0
listen_tcp = 1

В случае если вы хотите шифровать соединение вам необходимо будет сгенерировать самоподписанные сертификаты. В рамках локальной сети с ограничением доступа по IP-адресу центра виртуализации это избыточно. Для применения изменений в конфигурационных файлах перезапустите демона libvirt-bin командой:

# systemctl restart libvirtd

И естественно настройте запуск демона при старте системы:

# systemctl enable libvirtd

И проверьте удаленное подключение к хосту по порту 16509, настройка Firewall и сетевой подсистемы рассматривалась в другой статье и повторяться смысла не имеет.

Или в случае использования Ubuntu Server:

Измените файл /etc/default/libvirt-bin, добавив или изменив параметр:

libvirtd_opts="-l"

Это глобальная опция разрешающая работу по протоколу TCP. Дополнительно отредактируйте файл /etc/libvirt/libvirtd.conf приведя его опции в соответствие:

listen_tls = 0
listen_tcp = 1
tcp_port = "16509"
listen_addr = "0.0.0.0"

Вы так же дополнительно можете задействовать механизм TLS для защиты трафика и ограничить интерфейсы которые будут прослушиваться на предмет поступления управляющих команд, но я предпочитаю использовать механизмы iptables для ограничения входящих подключений.

После перезапуска демона libvirt-bin командой:

# service libvirt-bin restart

Операция создания sasl-пользователя для подсистемы libvirt проводится аналогично для Ubuntu и Centos:

# saslpasswd2 -a libvirt virtman

Таким образом вы создаете внутреннего пользователя (он не может авторизоваться в консоли средствами PAM) с именем пользователя virtman. Именно это имя пользователя и пароль потребуется указать в центральном (управляющем узле).

Настройка центра управления WebVirtManager

Центр управления виртуальными машинами может управлять любыми узлами виртуализации под управлением любого дистрибутива Linux при условии что настроен удаленный доступ к библиотеке libvirt.

Мы в свою очередь будем рассматривать настройку на дистрибутиве Ubuntu Server. WebVirtManager написан на языке python и работает с базой данных sqlite (можно использовать любую другую базу данных поддерживаемую Django Framework) и для его работы потребуется установить ряд библиотек и пакетов.

Обратите внимание, что WebVirtManager для стабильной работы требует набор библиотек фиксированных версий и рекомендуется запуск в виртуальном окружении. Помимо всего этого WebVirtmanager написан с использованием старой версии Django Framework и Python2, автор не собирается переписывать приложение и я в свою очередь занялся этим проектом.

Я рассматриваю два варианта настройки, первый это стабильный поддерживаемый автором вариант WebVirtManager и Python2, а второй это мой развиваемый под наши фермы вариант WebVirtManager с Python3.

Для установки необходимых пакетов и создания виртуального окружения выполните следующие команды.

Пакеты необходимые для создания виртуального окружения python2:

# apt-get install git python-pip python-libvirt python-libxml2 novnc
# pip2 install virtualenv

Создаем виртуальное окружение Python2:

# virtualenv webvirtmgr-env

Переходим в подготовленное виртуальное окружение:

# source ./webvirtmgr-env/bin/activate

Загружаем пакет из GIT, устанавливаем зависимости и производим запуск (окружение Python2):

# cd ./webvirtmgr-env/
# git clone git://github.com/retspen/webvirtmgr.git
# cd webvirtmgr
# pip install -r requirements.txt
# pip install libvirt-python
# pip install lxml

Пакеты необходимые для создания виртуального окружения python3:

# apt-get install git python3-pip python3-libvirt novnc
# apt-get install python3-venv
# pip3 install virtualenv virtualenvwrapper

Создаем виртуальное окружение python3:

$ python3 -m venv webvirtmanager-env

Переходим в подготовленное виртуальное окружение:

$ source ./webvirtmanager-env/bin/activate

Загружаем проект из GIT в виртуальное окружение, устанавливаем зависимости и производим запуск:

$ cd ./webvirtmanager-env/
$ git clone git://github.com/retspen/webvirtmgr.git
$ cd webvirtmgr
$ pip3 install --upgrade pip
$ pip3 install wheel
$ pip3 install -r requirements.txt
$ python3 ./manage.py collectstatic

Перед первым тестовым запуском необходимо создать администратора WebVirtmanager, что мы и сделаем выполнив команду:

$ python3 ./manage.py syncdb

Возможно вы получите ошибку "webvirtmgr.utils.secret_key.FilePermissionError: Insecure key file permissions!". Смена разрешений на требуемые согласно коду приложения:

$ chmod 0600 ./webvirtmgr/local/.secret_key_store

Результата не даст так как приложение изначально разработано для работы в окружении устаревшего Python2 и нам потребуется внести некоторые правки в код приложения или использовать виртуальное окружение Python 2.

Если вы пошли по пути переноса приложения на Python3 с моими патчами, то вам потребуется так же обновить и Django:

$ pip3 install django --upgrade

Подведем небольшие итоги. Если вам требуется стабильность и обновления, то используйте версию из репозитория, если вы хотите использовать модифицированную под Python3 версию, то используйте указанные выше модификации или форкнутую версию из моего GIT.

Для свежих версий Django и Python вместо syncdb для создания базы данных и пользователя используется следующая последовательность действий:

$ python3 ./manage.py makemigrations
$ python3 ./manage.py migrate
$ python3 ./manage.py createsuperuser

Если вы все же решили использовать старую версию, то последовательность действий будет другая (изменятся только имена устанавливаемых пакетов и имя интерпретатора Python).

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

# ./manage.py runserver 0.0.0.0:8001

В случае если запуск прошел успешно можно приступать к запуску "продакшн-приложения".

Запуск WebVirtManager как uwsgi-приложения

Запуск UWSGI-приложений я подробно рассматривал в большой статье "Запуск Django-приложений (Production mode)" и схема настройки полностью аналогична за исключением того, что мы будем использовать виртуальное окружение Python2.

Конфигурационный файл Uwsgi выглядит следующим образом:

[uwsgi]
http-socket = 127.0.0.1:8001
chdir = /opt/web-projects/webvirtmgr-env/webvirtmgr/
master = true
virtualenv = /opt/web-projects/webvirtmgr-env/
module = webvirtmgr.wsgi:application
env = DJANGO_SETTINGS_MODULE=webvirtmgr.settings
uid = www-data
gid = www-data
processes = 2
threads = 2
plugins = python,logfile
logger = file://var/log/uwsgi/app/webvirtmanager.log

Обязательно измените владельца файлов WebVirtManager на www-data или в противном случае вы получите ошибку "IOError: [Errno 13] Permission denied: '/webvirtmgr/webvirtmgr/local/.secret_key_store'".

# chown -R www-data /opt/web-projects/webvirtmgr-env/

Главным отличием от рассматриваеного ранее приложения является использование плагина UWSGI для python2 и переменная virtualenv указывающая на корень виртуального окружения.

Конфигурационный файл Nginx изменений не притерпел и настраивается как описано в статье "Запуск Django-приложений (Production mode)":

server {
   listen 8080 default_server;
   server_name _;

   access_log /var/log/nginx/webvirtmanager-access.log;
   error_log /var/log/nginx/webvirtmanager-error.log;

   location /static/ {
       alias /opt/web-projects/webvirtmgr-env/webvirtmgr/webvirtmgr/static/;
       index index.html;
       autoindex off;
   }

   location / {
       proxy_pass http://127.0.0.1:8001;
       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 $scheme;
       proxy_connect_timeout 600;
       proxy_read_timeout 600;
       proxy_send_timeout 600;
       client_max_body_size 1024M;
   }

}

Теперь при обращении по IP-адресу на порт 8080 вы увидите страницу авторизации WebVirtManager.

Окно авторизации WebVirtManager 

Настройка WebVirtManager будет рассматриваться в следующей статье.

 

Оставьте комментарий

Вы должны быть вошедший в чтобы отправить комментарий