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

    Общий рейтинг статьи: 0 (проголосовало 0 )
    Опубликовано:  [просмотров 367]


    В статье "Настройка сети 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 будет рассматриваться в следующей статье.

     


    Связанные записи в блоге

    Обсуждение статьи

    Ваш комментарий: