Думаю, что многие администраторы сетей сталкиваются с задачами по организации мало-нагруженных сервисов, либо платформ для проведения тестирования. Использовать для этих целей выделенные аппаратные машины, расточительно. Тут нам на помощь и приходят новые технологии, а именно возможность запустить на одной аппаратной машине несколько виртуальных.
Далее, я опишу как настроить платформу для работы с виртуальными машинами.
В качестве основы я буду использовать дистрибутив ОС Линукс Fedora Server 23.
Установка операционной системы достаточно удобна и происходит в графической среде, позволяющей быстро настроить основные параметры будущего сервера.
В процессе установки необходимо обратить свое внимание на некоторые моменты. А именно:
При разбиении диска предусмотреть место для хранения образов виртуальных машин. Необходимо определится, будет ли это место непосредственно на настраиваемом сервере, либо это будет место на соседнем NFS сервере. Также, во избежание проблем с загрузкой, создайте раздел biosboot.
Если машина, выбранная вами для сервера, имеет 2 или более сетевых интерфейса и если вы планируете использовать для хранения образов виртуальных машин NFS сервер, будет разумным выделить один из интерфейсов для управления сервером и NFS трафика, а второй для сетевого трафика виртуальных машин.
Для этого на первом интерфейсе настроим ip-адрес для доступа к серверу по сети, а второй интерфейс включим в сетевой мост и оставим без адреса.
После завершения установки операционной системы выполним обновление пакетов до актуальных версий, выполнив команду:
dnf -y update.
После обновления пакетов выключим SELinux, указав в файле /etc/sysconfig/selinux режим disabled.
Перезагрузим сервер для того чтобы изменения вступили в силу — reboot.
После перезагрузки установим утилиты, повышающие удобство работы с сервером.
dnf -y install mc atop htop
Установим пакеты системы виртуаллизации LibVirt.
dnf -y install kvm libvirt virt-top
Далее сконфигурируем систему:
В файле /etc/sysconfig/libvirtd
Изменим параметр: LIBVIRTD_ARGS=’—listen’.
В файле /etc/libvirt/libvirtd.conf
Изменим параметры: listen_tls = 0
listen_tcp = 1
auth_tcp = «sasl»
Включим libvirt в загрузку:
systemctl enable libvirtd.service
systemctl enable libvirt-guests.service
Создадим пользователя webvirtmgr для доступа к libvirtd по tcp протоколу:
cd /etc/libvirt
saslpasswd2 -a libvirt webvirtmgr
Для удобства работы с сервером, установим утилиту webvirtcloud.
Установим необходимые пакеты:
dnf -y install redhat-rpm-config python-virtualenv python-devel libvirt-devel glibc gcc nginx supervisor libxml2 libxml2-devel git
Установим утилиту из GIT:
cd /srv
git clone https://github.com/retspen/webvirtcloud
virtualenv venv
source venv/bin/activate
venv/bin/pip install -r webvirtcloud/conf/requirements.txt
venv/bin/python manage.py migrate
deactivate
Настроим цели supervisord:
echo «[program:novncd]
command=/srv/webvirtcloud/venv/bin/python /srv/webvirtcloud/console/novncd
directory=/srv/webvirtcloud
user=nginx
autostart=true
autorestart=true
redirect_stderr=true» > /etc/supervisord.d/novncd.ini
echo «[program:webvirtcloud]
command=/srv/webvirtcloud/venv/bin/gunicorn webvirtcloud.wsgi:application -c /srv/webvirtcloud/gunicorn.conf.py
directory=/srv/webvirtcloud
user=nginx
autostart=true
autorestart=true
redirect_stderr=true» > /etc/supervisord.d/webvirtcloud.ini
Настроим nginx:
echo «server {
listen 80;
server_name cloud.local;
access_log /var/log/nginx/webvirtcloud-access_log;
location /static/ {
root /srv/webvirtcloud;
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;
}
}
» > /etc/nginx/conf.d/webvirtcloud.conf
или cp webvirtcloud/conf/nginx/webvirtcloud.conf /etc/nginx/conf.d/
Настроим права доступа:
chown -R nginx:nginx /srv/webvirtcloud
Добавим настроенные сервисы в запуск:
systemctl enable nginx.service
systemctl enable supervisord.service
Если используем NFS, добавим в файл /etc/fstab описание раздела:
nfs.server:/mnt_images /var/lib/libvirt/images nfs intr,noatime,async 1 2
Установим необходимые NFS пакеты:
dnf -y install nfs-utils libnfsidmap
systemctl enable rpcbind
Настроим сетевой экран:
firewall-cmd —permanent —add-port=49152-49261/tcp
firewall-cmd —permanent —add-port=16509/tcp
firewall-cmd —permanent —add-port=6080/tcp
firewall-cmd —permanent —add-service=http
Перезагрузим сервер.
Можно начинать его использование.
PS
1. Утилита webvirtcloud постоянно развивается и приобретает новые возможности, для её обновления достаточно выполнить несколько команд:
cd /srv/webvirtcloud
git pull
venv/bin/python manage.py migrate
supervisorctl restart all
2. При использовании нескольких серверов, удобно размещать образы виртуальных машин на NFS сервере, при этом, для получения позможности перемещать работающие с одного сервера на другой, необходимо в конфигурации виртуальных машин выкючить дисковый кэш:
<driver name=’qemu’ type=’qcow2′ cache=’none’/>
3. При использовании серверов с различными вариантами процессоров, для сохранения возможности перемещения виртуальных машин, необходимо указать вариант виртуального процессора:
<cpu mode=’custom’ match=’exact’>
<model fallback=’allow’>kvm64</model>
</cpu>