oVirt: бесплатная платформа виртуализации для предприятия — АйТи Фреш

oVirt: бесплатная платформа виртуализации для предприятия

Что такое oVirt и зачем он нужен

oVirt — бесплатная open-source платформа управления виртуализацией на базе KVM. Если коротко: это upstream-проект для коммерческого Red Hat Virtualization (RHEV). Функционально oVirt — прямой аналог vCenter от VMware: тот же веб-интерфейс для управления виртуальными машинами, хранилищами, сетями и кластерами. Только без лицензионных платежей.

Архитектура oVirt держится на двух компонентах. Первый — oVirt Engine, сервер управления: Java-приложение на WildFly с базой PostgreSQL. Второй — oVirt Host, гипервизор KVM с агентом VDSM (Virtual Desktop and Server Manager). Engine раздаёт команды хостам через API, а VDSM их исполняет уже на уровне гипервизора. Всё достаточно прозрачно.

Где oVirt реально используют? Чаще всего — как замену VMware vSphere, когда компания устала платить за лицензии. Второй типичный случай — организации с принципиальным курсом на open-source. Ещё oVirt хорошо живёт в тестовых и staging-средах, где жалко тратить деньги на коммерческий гипервизор. И отдельная история — VDI (Virtual Desktop Infrastructure) с протоколом SPICE: работает стабильно, клиенты довольны.

Требования к оборудованию

Минимальные требования для production-среды:

КомпонентoVirt EngineoVirt Host (каждый)
CPU4 ядра, 64-bit с VT-x/AMD-VКак можно больше ядер с VT-x/AMD-V и VT-d
RAM16 ГБЗависит от ВМ (минимум 16 ГБ)
Диск100 ГБ SSDЛокальный для ОС + shared storage для ВМ
Сеть1 Гбит/с2× 10 Гбит/с (bonding) + VLAN
ОСCentOS Stream 9 / RHEL 9oVirt Node / CentOS Stream 9

Если планируете live migration — shared storage обязателен без вариантов: NFS, iSCSI, FC или GlusterFS. И ещё один момент, на котором мы однажды споткнулись: модели CPU на всех хостах кластера должны совпадать. Либо включайте CPU passthrough — иначе миграция просто не запустится.

Установка oVirt Engine

Установка Engine на CentOS Stream 9:

# Подключение репозиториев oVirt 4.5
dnf install -y centos-release-ovirt45
dnf update -y

# Установка Engine
dnf install -y ovirt-engine

# Запуск конфигурации
engine-setup

# Мастер задаст вопросы:
# - Configure Engine on this host? Yes
# - Configure Data Warehouse? Yes (для отчётов)
# - Configure Grafana? Yes (для дашбордов)
# - FQDN: ovirt-engine.company.local
# - Firewall manager: firewalld
# - Configure Apache? Yes
# - Admin password: *** (для admin@internal)

# После завершения — веб-интерфейс доступен:
# https://ovirt-engine.company.local/ovirt-engine/

PostgreSQL Engine ставит автоматически — за это руки не нужны. Но если среда нагруженная, выносите PostgreSQL на отдельный сервер. На практике это даёт ощутимый прирост стабильности при большом количестве хостов:

# При engine-setup выбрать Remote database
# Предварительно на DB-сервере:
dnf install -y postgresql-server
postgresql-setup --initdb

# В pg_hba.conf разрешить подключения с Engine:
host engine engine_user 10.0.1.10/32 scram-sha-256

Подключение гипервизоров (хостов)

Хосты oVirt — это обычные серверы с KVM, на которых живут виртуальные машины. Есть два пути: взять специализированный образ oVirt Node или поднять обычный CentOS/RHEL и доставить пакеты VDSM. Второй вариант гибче, если у вас уже есть настроенные серверы.

# На хосте: подготовка CentOS Stream 9
dnf install -y centos-release-ovirt45
dnf install -y vdsm vdsm-client ovirt-host

# Или использовать oVirt Node — скачайте ISO с ovirt.org
# и установите как ОС (минималистичная сборка)

Добавление хоста через веб-интерфейс Engine:

  1. Откройте Compute → Hosts → New
  2. Укажите FQDN или IP хоста
  3. Задайте пароль root — Engine сам установит VDSM через SSH, руками ничего делать не нужно
  4. Выберите кластер
  5. Нажмите OK — Engine подключится, развернёт пакеты и активирует хост; обычно это занимает 3–5 минут

Или через CLI:

# ovirt-engine SDK (Python)
from ovirtsdk4 import Connection

conn = Connection(
    url='https://ovirt-engine.company.local/ovirt-engine/api',
    username='admin@internal',
    password='AdminPass',
    insecure=True
)

hosts_service = conn.system_service().hosts_service()
hosts_service.add(
    types.Host(
        name='kvm-host-01',
        address='10.0.2.10',
        root_password='HostRootPass',
        cluster=types.Cluster(name='Default')
    )
)

Настройка сети хоста

Для продакшена настройте bonding и VLAN-разделение трафика. Без этого управляющий трафик и трафик виртуальных машин пойдут по одному каналу — в нагруженной среде это аукнется в самый неподходящий момент:

# В веб-интерфейсе: Network → Networks → New
# Создайте сети:
# - mgmt     (VLAN 10)  — управление Engine↔Host
# - vm-net   (VLAN 20)  — трафик виртуальных машин
# - storage  (VLAN 30)  — iSCSI/NFS трафик
# - migration (VLAN 40) — live migration

# На хосте: Setup Host Networks
# bond0 (eno1 + eno2) → mgmt + vm-net
# bond1 (eno3 + eno4) → storage + migration

# Через CLI:
ovirt-engine-rename  # Для привязки FQDN
# Bonding настраивается через веб-интерфейс хоста

Настройка хранилища

oVirt работает с несколькими типами хранилищ: NFS, iSCSI, FC (Fibre Channel), GlusterFS и локальные диски. Локальный вариант — только для изолированных хостов. Если нужен кластер с live migration, берите shared storage — это не обсуждается.

# Пример: NFS-хранилище на выделенном сервере
# На NFS-сервере (10.0.3.10):
mkdir -p /exports/ovirt-data /exports/ovirt-iso /exports/ovirt-export
chown 36:36 /exports/ovirt-*  # UID 36 = vdsm

# /etc/exports
/exports/ovirt-data    10.0.0.0/16(rw,sync,no_subtree_check,all_squash,anonuid=36,anongid=36)
/exports/ovirt-iso     10.0.0.0/16(rw,sync,no_subtree_check,all_squash,anonuid=36,anongid=36)
/exports/ovirt-export  10.0.0.0/16(rw,sync,no_subtree_check,all_squash,anonuid=36,anongid=36)

exportfs -ra
systemctl enable --now nfs-server

Подключить хранилище просто: Storage → Domains → New в oVirt Engine. Выберите тип — Data (для ВМ), ISO (для образов) или Export (для экспорта ВМ). Для NFS укажите путь вида 10.0.3.10:/exports/ovirt-data и готово.

iSCSI хранилище

Если нужна высокая производительность дисковой подсистемы — смотрите в сторону iSCSI на выделенной VLAN. В нашей практике это давало заметно меньше латентности по сравнению с NFS на общем сегменте сети:

# На storage-сервере: создание iSCSI target (targetcli)
dnf install -y targetcli
targetcli

/> /backstores/block create ovirt-lun0 /dev/sdb
/> /iscsi create iqn.2026.local.company:ovirt-storage
/> /iscsi/iqn.2026.local.company:ovirt-storage/tpg1/luns create /backstores/block/ovirt-lun0
/> /iscsi/iqn.2026.local.company:ovirt-storage/tpg1/acls create iqn.2026.local.company:kvm-host-01
/> /iscsi/iqn.2026.local.company:ovirt-storage/tpg1/acls create iqn.2026.local.company:kvm-host-02
/> saveconfig
/> exit

systemctl enable --now target

# В oVirt: Storage → Domains → New → iSCSI
# Discover targets → Address: 10.0.3.10, Port: 3260
# Login → Select LUN → OK

Создание и управление виртуальными машинами

Создание ВМ через веб-интерфейс oVirt Engine интуитивно понятно всем, кто хоть раз работал с VMware vSphere — логика та же. Если нужна автоматизация, API и SDK закрывают любые сценарии:

# Python SDK: создание ВМ
from ovirtsdk4 import types

vms_service = conn.system_service().vms_service()

vm = vms_service.add(
    types.Vm(
        name='web-server-01',
        cluster=types.Cluster(name='Production'),
        template=types.Template(name='Blank'),
        memory=4 * 1024**3,  # 4 GB
        cpu=types.Cpu(
            topology=types.CpuTopology(
                cores=2,
                sockets=1,
                threads=2
            )
        ),
        os=types.OperatingSystem(
            type='rhel_9x64',
            boot=types.Boot(
                devices=[types.BootDevice.HD, types.BootDevice.CDROM]
            )
        ),
        type=types.VmType.SERVER
    )
)

print(f"VM created: {vm.name} ({vm.id})")

Шаблоны и cloud-init

Для массового развёртывания не плодите ВМ вручную — создавайте шаблоны из подготовленных образов. Один раз настроил, зафиксировал как шаблон, дальше клонируешь за секунды:

# Подготовка ВМ для шаблона (внутри гостевой ОС):
# 1. Установите cloud-init
dnf install -y cloud-init qemu-guest-agent
systemctl enable cloud-init qemu-guest-agent

# 2. Очистите уникальные данные
virt-sysprep -d web-server-template  # Или вручную:
rm -f /etc/ssh/ssh_host_*
rm -f /etc/machine-id
truncate -s 0 /etc/hostname

# 3. В oVirt: правый клик на ВМ → Make Template
# Имя: centos9-base, Description: CentOS 9 + cloud-init

# Создание ВМ из шаблона с cloud-init:
# В веб-интерфейсе: New VM → Template: centos9-base
# → System → Cloud-Init → Custom Script:
#cloud-config
hostname: app-server-01
fqdn: app-server-01.company.local
users:
  - name: admin
    ssh_authorized_keys:
      - ssh-ed25519 AAAA... admin@company
    sudo: ALL=(ALL) NOPASSWD:ALL

Live Migration и High Availability

Live migration в oVirt — перемещение работающей ВМ между хостами без остановки. Три условия: shared storage, совместимый CPU на хостах (или настроенная CPU model) и выделенная сеть для трафика миграции. Если хоть одно не выполнено — миграция либо не запустится, либо уронит сеть на хосте.

# Ручная миграция через CLI
curl -k -u admin@internal:AdminPass \
  -X POST \
  -H 'Content-Type: application/xml' \
  -d '<action><host><name>kvm-host-02</name></host></action>' \
  "https://ovirt-engine.company.local/ovirt-engine/api/vms/VM_ID/migrate"

# Включение HA для ВМ:
# В свойствах ВМ → High Availability → Highly Available: Yes
# Priority: High (1 = наивысший, 100 = низший)
# При падении хоста HA-ВМ автоматически перезапускается на другом хосте

За состоянием кластера удобно следить через встроенный Grafana-дашборд в oVirt Engine. Там видно загрузку хостов в реальном времени, состояние хранилищ и историю миграций — без дополнительных инструментов на старте вполне достаточно.

Резервное копирование oVirt Engine

Потеря базы oVirt Engine — это потеря управления всей виртуальной инфраструктурой. ВМ при этом продолжат работать, но вы не сможете ими управлять централизованно. Бэкап базы — не опция, а обязательная процедура:

# Полный бэкап Engine (БД + конфигурация)
engine-backup --mode=backup --scope=all \
  --file=/backup/ovirt-engine-$(date +%Y%m%d).tar.gz \
  --log=/backup/ovirt-backup.log

# Автоматизация через cron
cat > /etc/cron.d/ovirt-backup << 'EOF'
0 2 * * * root engine-backup --mode=backup --scope=all --file=/backup/ovirt-engine-$(date +\%Y\%m\%d).tar.gz --log=/backup/ovirt-backup.log && find /backup -name "ovirt-engine-*.tar.gz" -mtime +7 -delete
EOF

# Восстановление из бэкапа:
engine-backup --mode=restore --scope=all \
  --file=/backup/ovirt-engine-20260408.tar.gz \
  --provision-db --provision-dwh-db
engine-setup  # Перенастройка после восстановления

Часто задаваемые вопросы

По базовым функциям — да, oVirt закрывает большинство задач vSphere: веб-управление ВМ, live migration, HA, шаблоны, VLAN-сети, shared storage. Но разрыв в экосистеме есть, и его не стоит игнорировать: аналога NSX нет, DRS работает проще и не так гибко, интеграций с enterprise-продуктами меньше. Для компаний до 500–1000 ВМ oVirt — полноценная замена VMware. Если у вас тысячи виртуальных машин и сложные требования к сети — честно оцените, чего именно не хватает, прежде чем мигрировать.

Да, Windows работает нормально — Server 2016/2019/2022, Windows 10/11. Но есть нюанс: без VirtIO-драйверов (диск, сеть, balloon) и QEMU Guest Agent производительность будет заметно хуже. ISO с драйверами берите на fedorapeople.org/groups/virt/virtio-win/ — там всегда актуальная версия. При создании ВМ выставляйте ОС-тип «Windows» — oVirt сам подберёт правильные параметры bus type и display type, не придётся ковыряться вручную.

Для миграции с VMware используйте virt-v2v — утилита конвертирует ВМ из VMDK в qcow2/raw и автоматически заменяет драйверы. Команда выглядит так: virt-v2v -ic vpx://vcenter.local/DC/host -o ovirt -os ovirt-data -of qcow2 vm_name. При массовой миграции поднимайте oVirt ImageIO Proxy и запускайте v2v в пакетном режиме. И обязательно удалите VMware Tools из гостевой ОС до миграции — иначе получите конфликты драйверов и потеряете время на отладку.

ВМ не упадут — они живут на хостах KVM и Engine им для этого не нужен. Но вы останетесь без руля: ни создать, ни удалить машину, ни сделать live migration, ни посмотреть нормальный мониторинг. HA-перезапуск при падении хоста тоже не сработает — он завязан на Engine. Мы на практике видели, как простой Engine на 40 минут парализовал работу команды, хотя все ВМ были живы. Именно поэтому Engine нужно беречь: делать регулярные бэкапы, мониторить его отдельно и, в идеале, разворачивать как Self-Hosted Engine — тогда oVirt сам поднимет его на одном из хостов при сбое.

Нужна помощь с настройкой?

Специалисты АйТи Фреш берутся за внедрение и настройку oVirt под ключ — за плечами 15+ лет реальных проектов, а обслуживание стартует от 15 000 ₽/мес.

📞 Связаться с нами
#oVirt#виртуализация KVM#oVirt Engine#бесплатная виртуализация#альтернатива VMware#KVM управление#oVirt установка#RHEV
Комментарии 0

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

загрузка...

Подпишитесь на рассылку ITfresh

Каждую неделю мы выпускаем практические гайды для руководителей IT и системных администраторов. Это не просто теория! Здесь вы найдёте всё: безопасность, 1С, миграции, резервные копии и проверенные лайфхаки из наших реальных проектов.

Реквизиты оператора персональных данных

ООО «АЙТИ-ФРЕШ», ИНН 7719418495, КПП 771901001. Юридический адрес: 105523, г. Москва, Щёлковское шоссе, д. 92, корп. 7. Контакт: info@itfresh.ru, +7 903 729-62-41. Оператор обрабатывает e-mail подписчика в целях рассылки информационных и рекламных материалов до момента отзыва согласия.