简介
Libvirt
是一个开源的虚拟化管理工具,专门用于管理平台虚拟化,它提供了一种便捷的方式来管理虚拟机以及存储和网络接口等其他虚拟化功能
Libvirt
最显著的特点在于其统一性,它能够作为各种虚拟化提供hypervisor
的统一接口,包括QEMU/KVM
、Xen
、VMware ESXi
、Linux Containers (LXC)
、OpenVZ
等。
Libvirt
一般配合QEMU/KVM
使用,KVM
是Type 1
级虚拟化实现,集成在Linux
内核中,提供最底层的硬件访问,相比于VirtualBox
等Type 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
提供DHCP
和DNS
服务,并使用iptables
进行路由。NAT网络的设置相对简单,通常情况下可以直接使用。然而,在NAT
模式下,外部主机无法直接访问虚拟机上的服务,除非配置了端口转发。
网络设备一般选择
e1000
或e1000e
,兼容性较好,如果需要更好的性能,可以选择virtio
使用半虚拟化设备
存储
Libvirt
使用存储池和存储卷来管理虚拟机的存储。存储池是存储卷(即磁盘镜像)的容器。存储池可以是宿主机文件系统上的目录、网络文件系统(NFS、GlusterFS)、LVM卷组、iSCSI目标等。存储卷则是实际附加到虚拟机上的磁盘镜像文件。