KVM + libvirt: production-установка гипервизора — АйТи Фреш
· 18 мин чтения

KVM + libvirt в production: от голого железа до живой миграции

KVM + libvirt в production: от голого железа до живой миграции

Привет! Я — Семёнов Евгений Сергеевич, директор ITFresh. За 15 с лишним лет работы с Linux-серверами, поверьте, я кое-что понял. И если вам нужна по-настоящему гибкая виртуализация, вы терпеть не можете переплачивать за лицензии и, что важно, не боитесь копаться в логах — тогда для меня KVM+libvirt просто вне конкуренции. Да, конечно, это не готовое решение типа VMware ESXi или Proxmox. «Голый» KVM требует, чтобы вы понимали всё досконально. Зато взамен он даёт вам тотальный контроль и производительность, которая вплотную подбирается к bare-metal. Разве не это главное?

Почему KVM+libvirt, а не Proxmox или ESXi

Перед тем как мы вообще начнём говорить про «голый» KVM, давайте честно ответим: а зачем он вам? Proxmox VE — отличный вариант, если без веб-интерфейса из коробки и простой кластеризации никуда. VMware ESXi? Тут всё ясно: выбор крупных компаний, готовых выложить кругленькую сумму за лицензии и получить официальную поддержку. Но вот в чём загвоздка: идеальных решений не бывает. У обоих этих гигантов есть свои ощутимые минусы.

Proxmox навязывает свою модель кластера с corosync и ограничивает в выборе storage. ESXi с 2024 года становится всё менее дружелюбным к малому бизнесу по лицензиям, а после сделки Broadcom — и того хуже. Голый KVM+libvirt даёт свободу: любая сеть, любой storage, любой оркестратор сверху (OpenStack, oVirt, Harvester) или вообще ручное управление через virsh.

Подготовка железа и BIOS

Я вообще всегда иду от железа. Начинаем с проверки. Какой минимум для продакшн-хоста? Серверный процессор. Обязательно с поддержкой Intel VT-x/VT-d или AMD-V/AMD-Vi, и это должно быть включено в BIOS. И, конечно, оперативка только с ECC. Представьте себе: один-единственный битфлип в обычной памяти — и ваша виртуалка с базой данных просто ляжет. Вам это нужно?

На нашей практике, если говорить о типовом продакшн-сервере, то это Dell PowerEdge R750. Внутри — пара мощных Xeon Platinum 8280, а это 28 ядер и 56 потоков на каждый сокет! Плюс 384 ГБ DDR4 ECC памяти. Хранение данных? Конечно, RAID-контроллер PERC H755 с BBU и NVMe-диски, собранные в RAID-10. Для сети мы ставим 40G Mellanox ConnectX-5, обязательно в bond с LACP, чтобы ничто не подвело. Знаете, такая машина легко тянет 30-40 средних виртуалок, вообще без какого-либо напряга.

# Проверка поддержки виртуализации на Ubuntu/Debian
egrep -c '(vmx|svm)' /proc/cpuinfo
# Должно быть больше нуля

# Проверка IOMMU для passthrough
dmesg | grep -e DMAR -e IOMMU
lsmod | grep kvm

Установка KVM и libvirt на Ubuntu 24.04

Как хост-ОС, я лично всегда выбираю Ubuntu Server LTS. Почему? Тут всё просто: у неё очень долгая поддержка, всегда свежие ядра через HWE и, что тоже важно, просто гигантское сообщество. Debian? Он, безусловно, тоже хорош, но, на мой взгляд, обновляется чересчур консервативно.

sudo apt update && sudo apt upgrade -y
sudo apt install -y qemu-kvm libvirt-daemon-system libvirt-clients \
  bridge-utils virt-manager virtinst cpu-checker ovmf cloud-image-utils

# Проверка готовности
sudo kvm-ok
sudo systemctl enable --now libvirtd
sudo usermod -aG libvirt,kvm $USER
newgrp libvirt

После этого стоит перезапустить сессию. Команда virsh list --all должна показать пустой список без ошибок.

Сеть: bridge вместо NAT

По умолчанию libvirt создаёт NAT-сеть default. Для прода это не годится — виртуалки должны быть в той же подсети, что и хост, чтобы коллеги могли к ним обращаться напрямую. Настраиваем bridge через netplan:

# /etc/netplan/01-br0.yaml
network:
  version: 2
  renderer: networkd
  ethernets:
    eno1:
      dhcp4: no
  bridges:
    br0:
      interfaces: [eno1]
      dhcp4: no
      addresses: [192.168.10.10/24]
      routes:
        - to: default
          via: 192.168.10.1
      nameservers:
        addresses: [192.168.10.1, 1.1.1.1]
      parameters:
        stp: false
        forward-delay: 0
sudo netplan apply
# Создаём libvirt-сеть с этим bridge
cat > /tmp/br0.xml <<EOF
<network>
  <name>br0-net</name>
  <forward mode="bridge"/>
  <bridge name="br0"/>
</network>
EOF
sudo virsh net-define /tmp/br0.xml
sudo virsh net-autostart br0-net
sudo virsh net-start br0-net

Storage: LVM и qcow2-пулы

Когда дело доходит до продакшна, я всегда настраиваю два отдельных storage-пула. Первый — это LVM, который лежит на RAID-10. Его мы используем для виртуалок с базами данных и всех тех сервисов, которые дают серьёзную нагрузку. А второй пул? Это qcow2-файлы, размещённые уже на ZFS. Сюда отправляем менее требовательные машины, там, где главное — удобство и возможность легко переносить их.

ПулТипДля чегоСнимки
fast-lvmLVM thin poolБД, высокая нагрузкаLVM snapshots
bulk-qcow2dir на ZFS datasetОфисные ВМ, devqcow2 internal + ZFS
iso-pooldirДистрибутивы и образы
# Создание LVM thin pool
sudo pvcreate /dev/nvme0n1p1 /dev/nvme1n1p1
sudo vgcreate vg_kvm /dev/nvme0n1p1 /dev/nvme1n1p1
sudo lvcreate -L 1.5T -T vg_kvm/thin_kvm

# Регистрация пула в libvirt
sudo virsh pool-define-as fast-lvm logical --source-name vg_kvm --target /dev/vg_kvm
sudo virsh pool-autostart fast-lvm
sudo virsh pool-start fast-lvm

Создание первой виртуалки

Самый удобный способ, проверено, — через cloud-init. Что делаем? Берём официальный cloud-образ Ubuntu, скачиваем его, потом клонируем, прописываем user-data и всё, можно запускать!

cd /var/lib/libvirt/images
sudo wget https://cloud-images.ubuntu.com/noble/current/noble-server-cloudimg-amd64.img
sudo qemu-img resize noble-server-cloudimg-amd64.img 40G

# user-data
cat > user-data <<EOF
#cloud-config
hostname: web01
users:
  - name: admin
    sudo: ALL=(ALL) NOPASSWD:ALL
    ssh_authorized_keys:
      - ssh-ed25519 AAAA...
package_update: true
packages: [nginx, htop]
EOF
cloud-localds user-data.img user-data

sudo virt-install --name web01 --memory 4096 --vcpus 2 \
  --disk noble-server-cloudimg-amd64.img,bus=virtio \
  --disk user-data.img,device=cdrom \
  --os-variant ubuntu24.04 --network network=br0-net,model=virtio \
  --graphics none --console pty,target_type=serial --noautoconsole --import

Живая миграция между хостами

Вот это, пожалуй, одна из главных «киллер-фич» KVM. Представьте: вы можете перенести работающую виртуалку с одного хоста на другой, и никаких простоев! Именно за такую возможность, к слову, люди готовы платить серьёзные деньги, покупая VMware vMotion. А в KVM? Всё то же самое, только без ценника. Приятно, не так ли?

Требования: общий storage (NFS или iSCSI с multipath), одинаковая версия QEMU на обоих хостах, совместимые CPU (или явное указание --cpu host-passthrough с флагами migratable=on), открытые порты 49152-49215 для TCP.

# На каждом хосте /etc/libvirt/qemu.conf
# migration_host = "10.0.0.11"  (IP миграционного интерфейса)

# Миграция ВМ web01 с host1 на host2
virsh migrate --live --persistent --undefinesource --copy-storage-all \
  web01 qemu+ssh://host2/system

Кстати, у нас в офисах мы обычно делаем так: выделяем отдельный VLAN именно под миграцию, и это на 40G Mellanox. Зачем? Чтобы виртуалка с 32 ГБ оперативки переезжала всего за 15-20 секунд, и пользователи при этом даже ничего не заметили. Вот это скорость!

Бэкапы через virtnbdbackup

Встроенного резервного копирования в libvirt нет. Раньше делали через блокирующие virsh snapshot + virsh backup-begin, сейчас удобнее через virtnbdbackup — утилита использует QEMU NBD и dirty bitmaps для инкрементальных бэкапов без остановки ВМ.

sudo apt install virtnbdbackup

# Полный бэкап
sudo virtnbdbackup -d web01 -l full -o /backup/web01

# Инкрементальный (требует установленного dirty bitmap)
sudo virtnbdbackup -d web01 -l inc -o /backup/web01

# Восстановление
sudo virtnbdrestore -i /backup/web01 -o /var/lib/libvirt/images/restored

Мониторинг KVM-хоста

Для продакшна наш минимальный набор мониторинга — это node_exporter, libvirt_exporter и, конечно, Grafana. А вот какие метрики я всегда держу перед глазами. Их просто необходимо отслеживать:

Кейс: перевод офиса логистической компании

Хочу поделиться одним интересным случаем. Осенью 2025 года к нам обратилась крупная логистическая компания из Москвы, у них около 75 сотрудников. Проблема? Их старая, физическая инфраструктура уже просто кричала о замене. Мы помогли им полностью переехать на два мощных, надёжных KVM-хоста. До этого у них был настоящий «зоопарк» из железа! Представьте: отдельный сервер под почту Exim, свой 1С, Asterisk, ещё и какая-то «файлопомойка», плюс контроллер домена — всё это на разных серверах. Разного возраста, разного состояния. Один из них, например, вообще 2015 года выпуска, и, давайте будем честны, имел крайне неприятную привычку самопроизвольно перезагружаться в самый неподходящий момент.

Купили два Dell PowerEdge R750 с Xeon Platinum 8280, 192 ГБ RAM и NVMe RAID-10 на 4 ТБ каждый, разместили в дата-центре МТС. На первый хост P2V-мигрировали все пять серверов через virt-p2v, настроили живую миграцию и регулярный бэкап на NFS. Второй хост работает как резерв: в случае отказа первого виртуалки запускаются вручную с общего NFS за 5 минут.

И какой результат, спросите вы? За целых семь месяцев после того, как мы всё внедрили, — ни единого простоя из-за проблем с железом! Это ли не показатель? Сам проект, включая два новых сервера и всю нашу работу, обошёлся в 1 650 000 рублей. Дополнительно клиент теперь платит 22 000 рублей в месяц за место в стойке и канал связи. Но самое главное, знаете что? Ежегодно он экономит около 400 000 рублей только на лицензиях VMware! А ещё он получил то, о чём мечтал: полный контроль над всей своей IT-инфраструктурой.

Развернём KVM-хост или кластер под ключ

Подберём серверы Dell или HPE, смонтируем в дата-центре МТС, настроим KVM+libvirt с живой миграцией, бэкапами и мониторингом. Срок: 5-10 рабочих дней. Сопровождаем и обновляем инфраструктуру на постоянной основе.

Телефон: +7 903 729-62-41
Telegram: @ITfresh_Boss
Семёнов Евгений Сергеевич, директор АйТи Фреш

FAQ — частые вопросы по KVM и libvirt

Чем KVM отличается от Proxmox?
KVM — модуль ядра Linux, libvirt — API для управления. Proxmox VE — готовый дистрибутив поверх Debian+KVM+LXC с веб-интерфейсом. Чистый KVM+libvirt гибче, но требует ручной настройки.
Нужен ли аппаратный RAID для KVM-хоста?
В проде — обязательно. Либо аппаратный RAID-контроллер с BBU, либо ZFS/mdadm RAID-10.
Какой storage-пул лучше для ВМ: qcow2 или LVM?
LVM даёт лучшую производительность. qcow2 удобнее для мобильности. Для прода с нагрузкой — LVM, для dev — qcow2.
Как делать живую миграцию между двумя хостами?
Нужен общий storage, одинаковые QEMU и совместимые CPU. Команда virsh migrate --live --persistent --undefinesource.
Как делать бэкап ВМ без остановки?
Через virtnbdbackup с dirty bitmaps, либо Veeam Agent for Linux в госте.

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

Кстати, каждую неделю мы публикуем свежие, по-настоящему практические гайды. Они специально для вас, руководители IT-отделов и сисадмины! Что внутри? Безопасность, тонкости работы с 1С, успешные миграции, надёжные резервные копии и, конечно, проверенные лайфхаки из наших реальных проектов. Не пропустите!

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

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