libvirt — управление виртуальными машинами через единый API | Глоссарий FREEHOSTING

libvirt

Library for Virtualization
libvirt — libvirt — унифицированный API и набор инструментов для управления виртуальными машинами на гипервизорах KVM, QEMU, Xen, VMware ESXi и других. Абстрагирует детали каждого гипервизора, предоставляя единый интерфейс через демон libvirtd.

Определение простыми словами

libvirt — это открытая библиотека и API, написанная на C, которая скрывает различия между гипервизорами за единым интерфейсом. Вместо того чтобы учить команды KVM, Xen или VMware по отдельности, администратор работает с одним набором вызовов: создать ВМ, запустить, остановить, снять снимок. Демон libvirtd принимает запросы и транслирует их в нативные вызовы нужного гипервизора.

Библиотека входит в стандартные репозитории всех major дистрибутивов Linux. На её базе работают virt-manager, virsh и платформа Proxmox VE. Без libvirt невозможна большинство операций управления ВМ в современных дата-центрах на Linux.

Сравнение

Инструмент Уровень Поддерживаемые гипервизоры GUI
libvirt API / daemon KVM, QEMU, Xen, VMware, LXC Нет (основа для GUI)
virsh CLI поверх libvirt Все, что поддерживает libvirt Нет
virt-manager GUI поверх libvirt Все, что поддерживает libvirt Да (GTK)
Proxmox VE Платформа поверх libvirt/QEMU KVM, LXC Да (Web)

Кейсы использования

  • Автоматизация через API — Python-скрипт или Ansible-плейбук создаёт, клонирует и удаляет ВМ через libvirt Python bindings без ручных команд.
  • Управление пулами хранилища — libvirt описывает пулы дисков (dir, LVM, iSCSI, NFS) и тома в XML, что упрощает провизионирование образов qcow2.
  • Live Migration — перенос работающей ВМ между физическими хостами командой virsh migrate --live через libvirt без остановки сервиса.
  • Снимки (snapshots) — атомарный снимок диска и состояния RAM перед обновлением ПО: virsh snapshot-create-as vm1 before-update.
  • Сетевые бриджи и NAT — libvirt создаёт виртуальные сети (virbr0) с DHCP и NAT для изолированных стендов разработки.
  • Негативный пример: использовать libvirt поверх VMware ESXi в production — поддержка ESXi через libvirt ограничена и не получает активного развития; для ESXi используйте vSphere API или govc напрямую.

Технические детали

libvirt описывает конфигурацию ВМ в XML-формате. Минимальный пример домена KVM:

virsh define /etc/libvirt/qemu/myvm.xml
virsh start myvm
virsh list --all

Подключение к удалённому хосту по SSH без пароля (ключ уже добавлен):

virsh -c qemu+ssh://root@192.168.1.10/system list --all

Клонирование существующей ВМ с новым MAC-адресом:

virt-clone --original myvm --name myvm-clone --auto-clone

Просмотр XML-конфигурации запущенной ВМ:

virsh dumpxml myvm

Статус демона и логи:

systemctl status libvirtd
journalctl -u libvirtd -n 50

Версия и поддерживаемые драйверы:

virsh version --daemon
virsh capabilities | grep -A2 'guest>'

libvirt хранит конфигурации ВМ в /etc/libvirt/qemu/, логи ВМ — в /var/log/libvirt/qemu/, образы по умолчанию — в /var/lib/libvirt/images/. Сокет управления: /var/run/libvirt/libvirt-sock. Пользователь должен состоять в группе libvirt для работы без sudo.

Частые вопросы

Чем libvirt отличается от QEMU и KVM?

KVM — модуль ядра Linux для аппаратной виртуализации, QEMU — эмулятор оборудования. libvirt — управляющий слой поверх них: принимает команды через API и транслирует в вызовы QEMU/KVM, добавляя управление сетью, хранилищем и снимками.

Можно ли управлять libvirt удалённо?

Да. libvirt поддерживает подключение через SSH (qemu+ssh://), TLS (qemu+tls://) и TCP. Достаточно установить libvirt-client на рабочей машине и указать URI удалённого хоста в команде virsh -c.

Поддерживает ли libvirt контейнеры LXC?

Да, libvirt имеет драйвер LXC и управляет контейнерами через тот же XML-формат и те же команды virsh. Однако это отдельная реализация, не совместимая с lxd или docker.

Как добавить пользователя в группу libvirt?

Выполните команду usermod -aG libvirt $USER и перелогиньтесь. После этого virsh и virt-manager будут работать без sudo.