Открыть сервис

libvirt

libvirt — это свободная переносимая библиотека с открытым исходным кодом, предоставляющая единый программный интерфейс (API) для управления различными технологиями виртуализации. Она выступает в роли промежуточного слоя между приложениями (например, графическими интерфейсами или облачными платформами) и гипервизорами, позволяя унифицировать операции с виртуальными машинами, сетями и хранилищами.

История

Проект libvirt был основан в 2005 году разработчиком Red Hat Дэниэлом Беренджером (Daniel Berrangé). Основной целью было создание инструмента, который бы абстрагировал различия между гипервизорами, такими как Xen и KVM (Kernel-based Virtual Machine), и предоставлял разработчикам и системным администраторам единый способ управления виртуальными ресурсами. Первая стабильная версия вышла в 2006 году. С тех пор libvirt стал стандартом де-факто для управления виртуализацией в среде Linux, особенно в экосистеме Red Hat Enterprise Linux (RHEL) и CentOS. В 2012 году проект расширил поддержку на гипервизоры Microsoft Hyper-V и VMware ESXi, а также на контейнерные технологии, такие как LXC (Linux Containers) и OpenVZ.

Архитектура

Libvirt состоит из нескольких ключевых компонентов, работающих совместно:

Демон (libvirtd)

Центральный компонент — фоновый процесс (демон) libvirtd, который запускается на хосте виртуализации. Он принимает запросы от клиентских приложений через локальный сокет (Unix-сокет) или удалённо через TCP/TLS. Демон управляет гипервизором, обрабатывает команды и возвращает результаты. В современных версиях (начиная с libvirt 5.0) используется модульная архитектура с отдельными демонами для различных типов гипервизоров (например, virtqemud для QEMU/KVM, virtxend для Xen).

Библиотека (libvirt.so)

Клиентская библиотека, предоставляющая API на языках C, Python, Perl, Ruby, Go и других. Она отвечает за формирование и отправку запросов к демону, а также за сериализацию данных в формате XML.

Утилиты командной строки (virsh, virt-install)

Набор инструментов для управления виртуализацией из терминала. Наиболее известная утилита — virsh, которая позволяет выполнять практически все операции с виртуальными машинами, сетями и пулами хранения. Другие утилиты включают virt-install для создания гостевых систем, virt-clone для клонирования и virt-top для мониторинга ресурсов.

Поддерживаемые технологии

Libvirt поддерживает широкий спектр гипервизоров и контейнерных сред, включая:

  • QEMU/KVM — основной и наиболее развитый бэкенд, позволяющий управлять виртуальными машинами на основе KVM с эмуляцией устройств через QEMU.
  • Xenподдержка паравиртуализации и полной виртуализации.
  • VMware ESXi/Workstation — управление гипервизорами VMware через протоколы SOAP и VIX.
  • Microsoft Hyper-V — управление через WMI (Windows Management Instrumentation).
  • LXC (Linux Containers) — управление контейнерами на основе пространств имён (namespaces) и контрольных групп (cgroups).
  • OpenVZ — поддержка контейнеров на уровне ядра.
  • VirtualBox — управление виртуальными машинами Oracle VirtualBox.
  • Bhyveгипервизор для FreeBSD.

Ключевые возможности

Управление виртуальными машинами

Libvirt позволяет создавать, запускать, останавливать, приостанавливать, мигрировать (в том числе «живую» миграцию без остановки работы) и удалять виртуальные машины. Конфигурация каждой машины описывается в XML-документе, который определяет количество виртуальных процессоров (vCPU), объём оперативной памяти, подключённые устройства (диски, сетевые карты, USB-контроллеры) и параметры загрузки.

Управление хранилищем

Библиотека предоставляет абстракцию для работы с хранилищами. Поддерживаются следующие типы пулов хранения (storage pools):

Виртуальные диски (тома) могут быть представлены в форматах qcow2, raw, vmdk, vhd и других.

Управление сетью

Libvirt поддерживает создание и настройку виртуальных сетей. Основные типы:

  • Изолированные сети — виртуальные машины общаются только друг с другом.
  • NAT-сети — виртуальные машины получают доступ к внешней сети через трансляцию адресов на хосте.
  • Мостовые сети — виртуальные машины подключаются к физической сети через мост (bridge).
  • Open vSwitch — интеграция с программным коммутатором Open vSwitch.

Безопасность

Libvirt поддерживает механизмы изоляции, такие как SELinux (Security-Enhanced Linux) и AppArmor, для ограничения доступа виртуальных машин к ресурсам хоста. Также реализована поддержка sVirt (SELinux for Virtualization), которая автоматически назначает контексты безопасности для виртуальных машин.

Применение

Облачные платформы

Libvirt является основой для многих облачных решений, включая OpenStack (через драйвер Nova), oVirt (система управления виртуализацией на базе KVM) и Proxmox VE. В этих системах libvirt используется для управления жизненным циклом виртуальных машин и распределения ресурсов.

Контейнерная виртуализация

Хотя libvirt чаще ассоциируется с полноценными виртуальными машинами, она также поддерживает управление контейнерами LXC. Это позволяет использовать единый инструментарий для гибридных сред, где одновременно работают и виртуальные машины, и контейнеры.

Разработка и тестирование

Разработчики используют libvirt для создания изолированных тестовых сред, например, для тестирования сетевых конфигураций или операционных систем. Инструменты вроде virt-manager (графический интерфейс) упрощают настройку виртуальных машин без необходимости ручного редактирования XML.

Критика и ограничения

Несмотря на широкую распространённость, libvirt имеет ряд недостатков. Основная критика связана с сложностью конфигурации и отладки: XML-описания виртуальных машин могут быть громоздкими, а сообщения об ошибках — неинформативными. Кроме того, поддержка некоторых гипервизоров (например, VirtualBox и VMware) менее стабильна по сравнению с KVM/Xen. Производительность libvirt при работе с большим количеством виртуальных машин (сотни и тысячи) может уступать специализированным решениям, таким как VMware vSphere, из-за накладных расходов на обработку XML и взаимодействие с демоном.

Интересные факты

  • Название «libvirt» происходит от сочетания «library» и «virt» (сокращение от virtualization).
  • Исходный код libvirt написан на языке C, что обеспечивает высокую производительность и переносимость.
  • Проект поддерживает более 20 языков программирования через привязки (bindings), включая Python, Java, Ruby, Go и Rust.
  • В 2021 году libvirt была включена в реестр свободного программного обеспечения Фонда свободного ПО (FSF).

Источники

  • Официальная документация проекта libvirt (libvirt.org)
  • «Virtualization with libvirt» — книга, опубликованная Packt Publishing (2016)
  • Статья «libvirt: The Virtualization API» в журнале Linux Journal (2008)
  • Документация Red Hat Enterprise Linux по управлению виртуализацией

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →