Centos7部署与配置KVM服务
服务简介
KVM全称Kernel-based Virtual Machine,是一种开源的虚拟化技术,集成于Linux内核中,允许Linux将自身转变为一个虚拟机监控程序(hypervisor),从而在单一主机上运行多个隔离的虚拟环境,每个虚拟环境都有自己的私有虚拟化硬件(如CPU、内存、网络接口等)。
最初由以色列的初创公司Qumranet开发,并自Linux 2.6.20版本起成为Linux内核的一部分。
服务部署
安装前检查
硬件环境
- CPU支持虚拟化
- 主板支持虚拟化
虚拟化技术包括 Intel VT(Virtualization Technology)或 AMD-V(AMD Virtualization)等。
安装环境
- 操作系统:Centos 7.9
- 内核版本:3.10.0-1160.yd7.x86_64
- 安装用户:root
- 安装工具:yum
安装检查
- 检查CPU是否支持虚拟化
# 命令返回的数字大于0,说明CPU支持虚拟化技术
grep -E -c '(vmx|svm)' /proc/cpuinfo
- 检查KVM是否已加载
# 是否加载表示KVM虚拟化功能是否启用,有kvm相关输出则表明已加载
lsmod | grep kvm
- 加载KVM
# 如果上一步检查kvm未加载,则执行该命令进行加载
modprobe -a kvm kvm_intel kvm_amd kvmgt
模块说明:
- kvm:必需,提供基本的虚拟化支持。
- kvm_intel:推荐,为Intel提供硬件辅助虚拟化支持及性能。
- kvm_amd:推荐,为AMD提供硬件辅助虚拟化支持及性能。
- kvmgt:推荐,提供对Intel Graphics Technology(GT)的直通支持,允许虚拟机直接访问宿主机的Intel集成GPU,提升图形化性能。
如果某个模块因为某些原因(比如硬件不支持)无法加载,modprobe通常会静默失败,不会影响其他模块的加载。
软件安装
1 安装kvm
yum install qemu-kvm qemu-img libvirt libvirt-python libvirt-client virt-install virt-viewer -y
组件说明:
- qemu-kvm:提供 KVM 模块和用户空间工具,是 KVM 虚拟化的核心组件。
- qemu-img: QEMU 磁盘映像管理工具,用于创建、转换和修改虚拟机使用的磁盘映像文件。
- libvirt:一个开源的API、守护进程和工具集合,用于管理虚拟化平台。
- libvirt-python:libvirt库的Python绑定,允许使用Python语言来编写脚本和程序,以管理和操作虚拟机。
- libvirt-client:提供客户端 API 和与 libvirt 服务器交互的库,包括 virsh 命令行工具。
- virt-install:一个命令行工具,用于创建新的虚拟机,允许用户指定虚拟机的各种参数,如名称、内存大小、虚拟CPU数量、磁盘镜像和网络配置等。
- virt-viewer:一个图形界面工具,用于显示虚拟机的图形控制台。
2 安装桥接工具
用于创建和管理网络桥接的工具,以实现虚拟机的外部连接。
yum install bridge-utils -y
3 安装虚机镜像文件编辑工具
用于访问和修改虚拟机的磁盘镜像,libguestfs-tools 允许在宿主机上直接读写虚拟机的磁盘映像文件,无需启动虚拟机,这在某些维护、故障排查场景下非常有用。
yum install libguestfs-tools -y
4 启动libvirt并设置开机自启
# 启动 libvirtd
systemctl start libvirtd
# 添加 libvirtd 开机自启
systemctl enable libvirtd
5 验证kvm环境可用性
virt-host-validate 是一个专门用于验证 KVM 虚拟化主机配置的工具,由 libvirt-client 软件包提供,与其他检查方法相比,它提供了更加详尽的检查项。
# 所有检查项都 PASS,则说明 KVM 环境配置正确,可以创建虚拟机,如果存在检查项 FAIL,则需要根据提示进行修复
[root@donkey ~]# virt-host-validate
QEMU: Checking for hardware virtualization : PASS
QEMU: Checking if device /dev/kvm exists : PASS
QEMU: Checking if device /dev/kvm is accessible : PASS
QEMU: Checking if device /dev/vhost-net exists : PASS
QEMU: Checking if device /dev/net/tun exists : PASS
...
配置桥接网络
KVM虚拟机实际是支持多种网络模式,如 桥接、NAT、Host-Only 等,默认是使用桥接网络模式,该模式下,虚拟机可以像物理机一样直接连接到网络上,拥有独立的IP地址,适用于需要让虚拟机对外提供服务,如Web服务或FTP服务等。
在centos7系统上,网络服务管理既可以使用network,也可以使用NetworkManager,因为本篇为较新的7.9版本,所以采用NetworkManager进行管理,如果是7较早的版本,则推荐采用network来进行桥接网络的创建(因为7早期版本NetworkManager对网桥功能支持并不好)。
1 确定要绑定的网口设备
这里使用 lshw 命令来查看本机的网口设备情况,确定要桥接网络要绑定的网口是哪个,例如这里选择 enp1s0 网口。
[root@donkey ~]# lshw -c network -businfo
Bus info Device Class Description
========================================================
pci@0000:01:00.0 enp1s0 network I211 Gigabit Network Connection
pci@0000:02:00.0 enp2s0 network I211 Gigabit Network Connection
pci@0000:03:00.0 enp3s0 network I211 Gigabit Network Connection
pci@0000:04:00.0 enp4s0 network I211 Gigabit Network Connection
virbr0-nic network Ethernet interface
docker0 network Ethernet interface
输出中可以看出本机有enp1s0-enp4s0 四个物理网口,每个网口设备都有唯一的PCI地址。
2 创建桥接网络
对应步骤1确定的网口,使用 brctl 命令创建一个名称为 br0 的网桥。
brctl addbr br0 # 创建桥接网络br0
brctl addif br0 enp2s0 # 把br0和enp2s0网卡绑定,让物理网卡流量能够通过网桥传递
brctl stp br0 on # 开启stp协议,防止网络环路(loop)的产生
补充:对应的删除操作
brctl delif br0 enp2s0 # 解除与物理网卡绑定
ifconfig br0 down # 关闭桥接网络br0, 否则无法删除
brctl delbr br0 # 删除桥接网络br0
【注意】如果是通过ssh等远程方式连接服务器,在操作网桥和物理网卡绑定操作时,注意不能选择当前连接正在使用的物理网卡,否则当前连接网络会被重置中断。
3 创建网桥配置
对应确定的网口 enp2s0,创建对应的桥接网络配置文件 /etc/sysconfig/network-scripts/ifcfg-br0。方便起见,可以直接拷贝 enp2s0 的配置文件进行修改,如下示例。
[root@donkey ~]# more /etc/sysconfig/network-scripts/ifcfg-br0
TYPE=Bridge # 指定网络接口类型为桥接
BOOTPROTO=static # 设置为手动配置静态IP地址
DEVICE=br0
IPADDR=192.168.1.112 # 绑定物理网卡的IP地址
NETMASK=255.255.255.0 #或者 PREFIX=24
ONBOOT=yes
4 修改绑定网络设备配置
创建桥接网络配置后,绑定的网卡设备配置也要同步进行修改,注意修改前先进行备份。
# 备份绑定网卡设备
cp /etc/sysconfig/network-scripts/ifcfg-enp2s0 /etc/sysconfig/network-scripts/ifcfg-enp2s0.bak
# 绑定网卡设备修改后示例
[root@donkey ~]# more /etc/sysconfig/network-scripts/ifcfg-enp2s0
TYPE=Ethernet
BOOTPROTO=none # 设置为none或直接移除,确保不分配IP地址
NAME=enp2s0
DEVICE=enp2s0
BRIDGE=br0 # 表示将网卡桥接到br0网桥上
ONBOOT=yes
5 重启网络服务
systemctl restart NetworkManager
【注意】如果重启网络服务时提示 Device unmanaged or not available for activatio 错误,说明修改的网络设备非 NetworkManager 所纳管,可能是 network 所纳管的,所以要重启 network 服务。
6 检查配置效果
- 使用 ifconfig 检查
正确配置情况下, 在 ifconfig 输出中只有 br0 有IP, enp1s0 这个网口是没有IP的。
[root@donkey ~]# ifconfig
br0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.1.112 netmask 255.255.255.0 broadcast 192.168.1.255
inet6 fe80::8e1c:daff:fe46:1102 prefixlen 64 scopeid 0x20<link>
ether 8c:1c:da:46:11:02 txqueuelen 1000 (Ethernet)
RX packets 89 bytes 8868 (8.6 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 19 bytes 2120 (2.0 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
enp2s0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
ether 8c:1c:da:46:11:02 txqueuelen 1000 (Ethernet)
RX packets 797673429 bytes 1149242532871 (1.0 TiB)
RX errors 0 dropped 43 overruns 1656 frame 0
TX packets 559644770 bytes 719560422108 (670.1 GiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
device memory 0xd0800000-d081ffff
...
- 使用 brctl 检查
在没有创建虚拟机时,会显示只绑定 enp2s0,运行虚机如果有指定bridge=br0, 就会多一个vnet0网卡。
[root@donkey ~]# brctl show
bridge name bridge id STP enabled interfaces
br0 8000.8c1cda461102 yes enp2s0
vnet0
创建虚拟机
KVM支持通过图形界面和命令行界面创建虚拟机,以下使用命令行创建centos7虚拟机为例。
从ISO源创建虚拟机
virt-install \
--name centos7 \
--memory 2048 \
--vcpus 2 \
--disk path=/var/lib/libvirt/images/centos7.img,size=20 \
--os-variant centos7.0 \
--cdrom /path/to/CentOS-7-x86_64-Minimal-1708.iso \
--network bridge=br0,model=virtio \
--graphics none \
--console pty,target_type=serial
参数说明:
- name:指定虚拟机名称,需全局唯一,示例名称为 centos7。
- memory:指定虚拟机内存大小,单位为MB,示例为给虚拟机分配2048M内存,即2G。
- vcpus: 指定虚拟CPU个数及相关配置,示例为配置2个虚拟CPU。
- disk: 指定虚拟机的磁盘配置,如大小、格式、缓存模式等,示例为创建一个20G的镜像磁盘文件,文件目录为/var/lib/libvirt/images。
- os-variant: 指定要安装的操作系统变体,示例指定的操作系统变体为centos7.0。
- cdrom: 指定安装光盘的ISO镜像文件,示例为使用 /path/to/CentOS-7-x86_64-Minimal-1708.iso 作为安装介质。
- network: 指定网络接口的类型,如bridge、network、user等,示例里指定虚拟机使用名为br0的网桥,然后网络接口模型为virtio(virtio是一种高性能的虚拟化网络接口)。
- graphics: 指定虚拟机的图形显示接口,如vnc、spice等,示例为不使用图形界面。
- console: 将虚拟机的控制台连接到当前终端,示例为使用串行控制台进行交互。
从IMG文件创建虚拟机
virt-install \
--virt-type kvm \
--name centos7 \
--vcpus 2 \
--ram 4096 \
--graphics spice,listen=0.0.0.0 \
--noautoconsole \
--disk format=qcow2,path=/opt/kvm/images/centos7.img,bus=virtio \
--network bridge=br0,model=virtio \
--os-variant linux \
--boot hd
参数说明:
- virt-type:指定虚拟化类型,示例为KVM。
- ram:为虚拟机分配4096MB(即4GB)的内存。
- graphics:配置虚拟机使用SPICE服务器作为图形显示,并监听所有IP地址(0.0.0.0表示监听所有网络接口),允许远程连接。
- disk: 创建一个磁盘镜像用于虚拟机,指定磁盘格式为qcow2,镜像文件存储在/opt/kvm/images/centos7.img路径下,磁盘总线类型为virtio。
- boot:设置虚拟机的启动顺序,示例表示从硬盘(hd)启动。
验证虚拟机服务
使用 virsh list 查看创建虚拟机状态,running 表示状态正常。
[root@donkey ~]# virsh list
Id Name State
----------------------------------------------------
1 centos7 running
至此,KVM虚拟机服务创建成功。

浙公网安备 33010602011771号