backgroundbackground

Libvirt - 通用虚拟化管理器

Libvirt / Linux / KVM

教程

2025-03-23 15:02

简介

Libvirt是一个开源的虚拟化管理工具,专门用于管理平台虚拟化,它提供了一种便捷的方式来管理虚拟机以及存储和网络接口等其他虚拟化功能

Libvirt最显著的特点在于其统一性,它能够作为各种虚拟化提供hypervisor的统一接口,包括QEMU/KVMXenVMware ESXiLinux Containers (LXC)OpenVZ等。

Libvirt一般配合QEMU/KVM使用,KVMType 1级虚拟化实现,集成在Linux内核中,提供最底层的硬件访问,相比于VirtualBoxType 2级虚拟机,能提供更好的性能和效率以及安全性

Libvirt项目由Red Hat开发,最初于2005年12月发布 。作为一个用C语言编写的库,Libvirt还提供了对其他多种编程语言的绑定,如Python、Perl、Ruby、Java和PHP等,极大地扩展了其在自动化和脚本编写方面的应用。

核心组件

Libvirt系统的核心组件是libvirtd,它是Libvirt的服务器端守护进程,运行在宿主机上,负责执行虚拟机管理所需的各项任务,例如虚拟机的启动、停止和迁移等。

Libvirt有两个客户端,分别是命令行工具virsh和图形界面virt-manager

安装

Debian系:

# 核心组件
sudo apt install qemu-kvm libvirt-daemon-system bridge-utils

# 命令行客户端
sudo apt install libvirt-clients

# 图形界面客户端
sudo apt install virt-manager

如果想用非root账户管理虚拟机,可以将用户加到libvirt组中,命令如下:

sudo gpasswd -a <> libvirt

虚拟机配置

网络

  • 桥接网络:在这种模式下,虚拟机直接连接到物理网络,就像一台独立的物理机一样。虚拟机可以获得与宿主机在同一网段的IP地址。桥接网络需要在宿主机上创建一个桥接接口,并将物理网卡和虚拟机的虚拟网卡都连接到这个桥接接口上 。桥接接口的配置通常需要在Libvirt之外完成 。这种模式适用于需要虚拟机能够直接被外部网络访问的场景。
  • NAT网络:在这种模式下,虚拟机通过宿主机的网络连接与外部网络通信。虚拟机共享宿主机的IP地址,并通过不同的端口号来区分不同的虚拟机 。Libvirt通常会设置一个默认的NAT网络,使用 dnsmasq 提供DHCPDNS服务,并使用 iptables 进行路由。NAT网络的设置相对简单,通常情况下可以直接使用。然而,在NAT模式下,外部主机无法直接访问虚拟机上的服务,除非配置了端口转发。

网络设备一般选择e1000e1000e,兼容性较好,如果需要更好的性能,可以选择virtio使用半虚拟化设备

存储

Libvirt使用存储池和存储卷来管理虚拟机的存储。存储池是存储卷(即磁盘镜像)的容器。存储池可以是宿主机文件系统上的目录、网络文件系统(NFS、GlusterFS)、LVM卷组、iSCSI目标等。存储卷则是实际附加到虚拟机上的磁盘镜像文件。