服务器虚拟化技术实战:KVM虚拟机部署与Libvirt管理配置方案

KVM虚拟化环境搭建与内核模块加载

KVM(Kernel-based Virtual Machine)是Linux内核内置的全虚拟化方案,将Linux内核本身转变为Hypervisor,在服务器虚拟化领域应用广泛。与Xen等Type-1 Hypervisor不同,KVM作为内核模块运行,不需要独立的特权域,资源开销更小。在服务器运维场景中,KVM配合Libvirt管理工具可以实现虚拟机的创建、迁移、快照和资源调度等完整功能。

部署KVM前需要确认CPU支持硬件虚拟化。Intel CPU的VT-x和AMD CPU的AMD-V是KVM运行的基础,可以通过以下命令检查:

# 检查CPU虚拟化支持
grep -c -E 'vmx|svm' /proc/cpuinfo
# 输出大于0表示支持

# 加载KVM内核模块
modprobe kvm
modprobe kvm_intel  # Intel CPU
# modprobe kvm_amd  # AMD CPU

# 验证模块加载
lsmod | grep kvm
# kvm_intel             335360  0
# kvm                  110592  1 kvm_intel

安装KVM及相关管理工具:

# CentOS/RHEL
yum install -y qemu-kvm libvirt virt-install libguestfs-tools

# Ubuntu/Debian
apt install -y qemu-kvm libvirt-daemon-system libvirt-clients virtinst

# 启动libvirtd服务
systemctl enable --now libvirtd

# 将当前用户加入libvirt组
usermod -aG libvirt $(whoami)

使用virt-install创建虚拟机

virt-install是Libvirt提供的命令行虚拟机创建工具,支持从ISO镜像安装或导入现有磁盘镜像。以下是创建一台CentOS虚拟机的完整命令:

virt-install \
  --name webserver-01 \
  --os-variant centos-stream9 \
  --vcpus 4 \
  --memory 8192 \
  --disk path=/var/lib/libvirt/images/webserver-01.qcow2,size=50,format=qcow2 \
  --network bridge=br0 \
  --graphics vnc,listen=0.0.0.0,port=5901 \
  --cdrom /data/iso/CentOS-Stream-9.iso \
  --boot cdrom,hd

# 查看已创建的虚拟机
virsh list --all
#  Id   Name              State
# ----------------------------------
#  -    webserver-01      shut off

# 启动虚拟机
virsh start webserver-01

# 自动启动(随libvirtd启动)
virsh autostart webserver-01

qcow2格式的磁盘镜像支持快照和精简配置,初始文件大小远小于设定容量,适合生产环境使用。如果使用LVM卷作为磁盘后端,可以直接指定逻辑卷路径替代qcow2文件。

Libvirt管理工具与virsh常用操作

virsh是管理KVM虚拟机的核心命令行工具,日常运维中高频使用的操作包括:

# 虚拟机生命周期管理
virsh start webserver-01        # 启动
virsh shutdown webserver-01     # 优雅关机
virsh destroy webserver-01     # 强制关机
virsh reboot webserver-01      # 重启
virsh suspend webserver-01     # 暂停
virsh resume webserver-01      # 恢复

# 查看虚拟机信息
virsh dominfo webserver-01     # 基本信息
virsh dommemstat webserver-01  # 内存使用
virsh domiflist webserver-01   # 网络接口
virsh domblklist webserver-01  # 磁盘设备

# 控制台访问
virsh console webserver-01     # 串口控制台
# 退出: Ctrl+]

# 快照管理
virsh snapshot-create-as webserver-01 snap-base \
  --disk-only --atomic
virsh snapshot-list webserver-01
virsh snapshot-revert webserver-01 snap-base
virsh snapshot-delete webserver-01 snap-base

快照功能在系统升级或应用部署前尤为重要。创建快照后进行操作,出现问题时可以快速回滚。但频繁快照会导致磁盘IO性能下降,建议仅在关键节点创建并及时清理无用快照。

虚拟机网络配置:NAT与桥接模式

KVM虚拟机网络有两种主要模式。NAT模式是默认配置,虚拟机通过宿主机的NAT转发访问外部网络,外部无法直接访问虚拟机。桥接模式将虚拟机直接接入物理网络,虚拟机获得与宿主机同网段的IP地址,适合对外提供服务的场景。

# 创建网桥(桥接模式)
# CentOS/RHEL使用nmcli
nmcli connection add type bridge con-name br0 ifname br0
nmcli connection add type bridge-slave con-name br0-port1 ifname eth0 master br0
nmcli connection modify br0 ipv4.addresses 192.168.1.100/24
nmcli connection modify br0 ipv4.gateway 192.168.1.1
nmcli connection modify br0 ipv4.dns 8.8.8.8
nmcli connection modify br0 ipv4.method manual
nmcli connection up br0

# XML配置:虚拟机使用桥接网络
# <interface type='bridge'>
#   <source bridge='br0'/>
#   <model type='virtio'/>
# </interface>

# NAT模式(默认网络default)
virsh net-start default
virsh net-autostart default
virsh net-dumpxml default

使用virtio网卡驱动可以获得接近物理网卡的性能,相比默认的e1000模拟网卡,吞吐量提升3-5倍。在虚拟机XML配置中指定model type为virtio即可。

虚拟机性能调优与CPU绑核

在CPU密集型负载场景中,通过CPU绑核(CPU pinning)可以减少虚拟机vCPU在宿主机物理核心间的迁移,降低缓存命中率波动。配置方法是在虚拟机XML中添加cputune段:

# 编辑虚拟机XML
virsh edit webserver-01

# 在<domain>内添加CPU绑核配置
<vcpu placement='static'>4</vcpu>
<cputune>
  <vcpupin vcpu='0' cpuset='2'/>
  <vcpupin vcpu='1' cpuset='3'/>
  <vcpupin vcpu='2' cpuset='4'/>
  <vcpupin vcpu='3' cpuset='5'/>
</cputune>
<numatune>
  <memory mode='strict' nodeset='0'/>
</numatune>

# 宿主机预留对应核心给该虚拟机
# 编辑grub配置添加isolcpus=2-5
grubby --update-kernel=ALL --args="isolcpus=2-5"
reboot

除了CPU绑核,还可以通过以下措施提升虚拟机性能:禁用宿主机的透明大页(THP)减少内存延迟;为虚拟机磁盘配置virtio-blk驱动和IO线程;对数据库类虚拟机使用直通模式(PCI passthrough)直接挂载NVMe SSD。经过合理调优,KVM虚拟机的CPU性能可达宿主机的95%以上,磁盘IO性能损失控制在10%以内。

原创文章,作者:小编,如若转载,请注明出处:https://www.yunthe.com/fu-wu-qi-xu-ni-hua-ji-shu-shi-zhan-kvm-xu-ni-ji-bu-shu-yu/

(0)
小编小编
上一篇 20小时前
下一篇 20小时前

相关推荐