libvirt — открытая C-библиотека с унифицированным API для управления различными гипервизорами и технологиями виртуализации. Вместо того чтобы работать с разными командами для KVM, Xen, LXC или VMware, администратор использует один набор инструментов — virsh, virt-manager, virt-install. libvirt поддерживает QEMU/KVM, Xen, LXC, OpenVZ, VirtualBox, VMware ESXi (через vSphere API), Hyper-V.
Как работает libvirt
Архитектура libvirt: демон libvirtd запускается на хост-системе и предоставляет управляющий Unix-сокет (/var/run/libvirt/libvirt.sock) или TCP-порт 16514. Клиенты (virsh, virt-manager, OpenStack Nova, Proxmox) подключаются к этому сокету и отправляют команды через XML-описания виртуальных машин.
Каждая VM описывается XML-доменом — файлом конфигурации с параметрами CPU, RAM, сети, дисков, видео, PCI-устройств. Команда virsh define domain.xml регистрирует VM, virsh start vmname запускает. XML-описания хранятся в /etc/libvirt/qemu/ — там же можно редактировать конфигурацию вручную или через virsh edit vmname.
Основные инструменты libvirt
- virsh — CLI для управления VM: start, stop, list, snapshot-create, migrate, console
- virt-manager — GTK-приложение с графическим интерфейсом для десктопного использования
- virt-install — создание VM из командной строки с указанием ISO, диска, сети
- virt-clone — клонирование существующих VM с новым именем и MAC-адресом
- virt-top — top-подобный монитор ресурсов VM
- virsh domxml-to-native — конвертация XML-описания в нативные QEMU-команды для отладки
История
libvirt разработана Red Hat, первый публичный релиз — февраль 2005 года (версия 0.0.1), автор — Daniel Veillard. Проект создавался для управления Xen через единый API. С появлением KVM в 2007 году libvirt стала основным слоем управления KVM-виртуализацией в Linux. OpenStack Nova использует libvirt как основной Driver с самого начала проекта (2010). Proxmox VE использует libvirt/QEMU как бэкенд для KVM-VM с версии 1.0 (2008). oVirt (корпоративный менеджер виртуализации Red Hat) полностью построен поверх libvirt.
libvirt в продакшне
OpenStack Nova через libvirt управляет десятками тысяч VM у крупных провайдеров. Proxmox VE использует его для KVM-виртуализации, но добавляет свою высокоуровневую систему управления поверх. На личном VPS-сервере с KVM: virsh — быстрый способ управлять VM из командной строки без установки тяжёлых панелей. virsh list --all — показать все VM, virsh snapshot-create-as vmname snap1 — создать снапшот за секунды.
Работа с сетями через libvirt
libvirt управляет виртуальными сетями через NAT (virsh net-list, virsh net-define network.xml). По умолчанию создаётся сеть virbr0 (192.168.122.0/24) с NAT к внешнему интерфейсу. Для bridge-режима (VM в той же подсети, что и хост) нужно настроить bridge в ОС (br0) и указать его в XML VM. VLAN-изоляция для VM настраивается через macvtap или SR-IOV. Для performance-чувствительных задач — PCI passthrough сетевой карты напрямую в VM через vfio-pci и описание в domain XML.
Безопасность через libvirt
libvirt поддерживает несколько уровней контроля доступа: polkit (Linux Policy Kit) для управления тем, какие пользователи могут вызывать API, TLS + x.509-сертификаты для защищённого удалённого подключения (qemu+tls://). SELinux SVirt — автоматически применяет SELinux-метки к процессам QEMU и файлам дисков VM, изолируя VM друг от друга. AppArmor-профили для QEMU доступны в Ubuntu. Это делает libvirt-основанный стек безопасным даже при компрометации одной VM.