· 18 мин чтения

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

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

Меня зовут Семёнов Евгений Сергеевич, директор АйТи Фреш. За 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 ГБ RAM за 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 руб./мес за место в стойке и канал. Клиент экономит на лицензиях VMware около 400 000 руб./год и имеет полный контроль над инфраструктурой.

Развернём 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 подписчика в целях рассылки информационных и рекламных материалов до момента отзыва согласия.