KVM(Kernel-based Virtual Machine)是一种开源的虚拟化技术,它允许在一个物理主机上运行多个虚拟机(VMs)。KVM是Linux内核的一部分,并且利用了处理器的硬件虚拟化扩展(Intel VT或AMD-V),以实现更高效的虚拟化。
KVM虚拟化的主要组成部分包括:
-
KVM模块:KVM模块是Linux内核的一部分,它允许内核成为虚拟机监视器(VMM)的一部分,即Hypervisor。这使得内核能够直接管理和监控虚拟机的运行。
-
QEMU:QEMU(Quick Emulator)是一个开源的虚拟化工具,它允许在主机系统上运行不同体系结构的虚拟机。在KVM中,QEMU通常用作设备模拟器,负责模拟虚拟机所需的硬件设备。
-
libvirt:libvirt是一个虚拟化管理工具,它提供了统一的API接口,允许管理员使用多种虚拟化技术(包括KVM)进行虚拟机的管理和监控。
KVM的工作原理是通过将Linux内核转换为Hypervisor,它通过虚拟化扩展来创建和管理虚拟机,并且在主机系统上实现硬件资源的分配和隔离。KVM虚拟化允许每个虚拟机在独立的环境中运行,就像在单独的物理服务器上一样。
优点:
- 性能: KVM虚拟化借助硬件虚拟化扩展,提供接近原生性能的虚拟化体验,使虚拟机能够高效地运行。
- 安全性: 每个虚拟机都在独立的环境中运行,隔离性较高,因此一个虚拟机的问题不会影响其他虚拟机或主机系统。
- 资源隔离: KVM可以将主机的物理资源(CPU、内存、硬盘等)分配给每个虚拟机,确保它们得到适当的资源配额。
KVM虚拟化已经成为许多企业和云服务提供商的首选虚拟化解决方案,因为它提供了高性能、安全性和资源隔离,同时具备灵活性和易管理性。
安装KVM
1.虚拟机的环境准备
设置虚拟机的内存为2GB,并打开支持虚拟化
添加一块60GB大小的硬盘
最终配置完成的虚拟机的环境准备
2.检查CPU参数
修改主机名,启动虚拟机,查看内存是否更改成功
hostnamectl set-hostname kvm #修改主机名为kvm
bash #生效
free #查看cpu参数
检查cpu是否开启虚拟化支持(如果显示为空,需要检查虚拟机设置虚拟化)
3.挂载新硬盘
检查虚拟机是否新增一块60GB的硬盘
lsblk #检查磁盘
格式化新增硬盘sdb,格式化为ext4格式
mkfs.ext4 /dev/sdb
查看硬盘信息
blkid /dev/sdb #blkid+硬盘:查看硬盘信息
格式化完成后,进行挂载(挂载目录为/kvm_data/)
mkdir /kvm_data #创建目录
mount /dev/sdb /kvm_data/
df -h #查看挂载信息
4.关闭防火墙和selinux
关闭防火墙并设置开机不自启
systemctl stop firewalld
systemctl disable firewalld
关闭selinux。编辑/etc/selinux/config, 将enforcing修改为disabled
cat /etc/selinux/config #查看selinux配置内容,查找更改内容
修改完成后,重启虚拟机使其生效。并使用getenforce查看
5.安装KVM
使用yum安装KVM(本地yum源或者网络yum源)
yum install -y virt-* libvirt bridge-utils qemu-img
启动KVM
1.配置网卡
增加桥接网卡 ifcfg-br0
cd /etc/sysconfig/network-scripts/
cp ifcfg-eno16777736 ifcfg-br0
//ifcfg-eno16777736 为配置 IP 的网卡,你的网卡可能与我的不同
修改桥接网卡ifcfg-br0的内容
vi ifcfg-br0
修改NAT网卡ifcfg-eno16777736
2.启动libvirtd服务
Libvirt是管理虚拟机和其他虚拟化功能,比如存储管理,网络管理的软件集合。位于虚拟机和云管理中间的一个抽象管理层。它包括一个API库,一个守护程序(libvirtd)和一个命令行工具(virsh);libvirt本身构建于一种抽象的概念之上。它为受支持的虚拟机监控程序实现的常用功能提供通用的API。
libvirt的主要目标是为各种虚拟化工具提供一套方便、可靠的编程接口,用一种单一的方式管理多种不同的虚拟化提供方式。
首先检查KVM模块是否加载
lsmod|grep kvm
启动 libvirtd 并检查是否成功启动
systemctl start libvirtd
ps -ef |grep libvirt
启动成功后使用brctl命令可以看到两个网卡
brctl show
3.命令行安装CentOS7
CentOS7 镜像下载地址: http://mirrors.163.com/centos/7/isos/x86_64/
首先,通过 SCRT 上传 CentOS 7 镜像到/tmp 目录下,如果没有镜像的可以 自行下载。上传后,使用 ll 命令查看/tmp 目录下是否存在 CentOS 7 镜像文件
使用virt-install 进行CentOS7的安装
virt-install --name=test --memory=512,maxmemory=1024
--vcpus=1,maxvcpus=2 --os-type=linux --os-variant=rhel7 --location=/tmp/CentOS-7-x86_64-DVD-1804.iso
--disk path=/kvm_data/test.img,size=10
--bridge=br0 --graphics=none --console=pty,target_type=serial
--extra-args="console=tty0 console=ttyS0"
命令解释:
●--name:指定虚拟机的名称。
●--memory:指定分配给虚拟机的内存资源大小。
● maxmemory:指定可调节的最大内存资源大小,因为 KVM 支持热调整虚 拟机的资源。
●--vcpus:指定分配给虚拟机的 CPU 核心数量。
●maxvcpus:指定可调节的最大 CPU 核心数量。
●--os-type:指定虚拟机安装的操作系统类型。
● --os-variant:指定系统的发行版本。
● --location:指定 ISO 镜像文件所在的路径,支持使用网络资源路径,也就 是说可以使用 URL。
● --disk path:指定虚拟硬盘所存放的路径及名称,size 则是指定该硬盘的可 用大小,单位是 G。
● --bridge:指定使用哪一个桥接网卡,也就是说使用桥接的网络模式。
●--graphics:指定是否开启图形。
● --console:定义终端的属性,target_type 则是定义终端的类型。
● --extra-args:定义终端额外的参数。
安装完成后出现以下界面, 这是系统基础设 置,带[!]基本都是需要配置的,接下来我们开始配置“Timezone settings”,输 入“2”,按 Enter 键
“Timezone settings”时区设置选择 5) Asia 亚洲,再选择城市 62) Shanghai 上海
输入完毕后,可以发现 2 的[!]变成了[x],证明配置完毕。 接下来我们配置“Software selection”,选择“4”,在选择“c”,因为默 认就是 minimalinstall,按 Enter 键
下面我们配置“Installation Destination”,选择“5”,其余的依次选择“c”, 按 Enter 键
然后接下来配置“Root password”,选择 8,按 Enter 键
配置完成,选择“b”,按 Enter 键后,开始安装即可
出现以下信息代表安装成功
按“Ctrl+]”键,退出终端,回到宿主机。
虚拟机管理
1.KVM的基本管理
完成虚拟机安装,退回到宿主机,接下来使用宿主机virsh命令进行管理刚才安装的CentOS虚拟机
virsh list #查看虚拟机列表,只能看到正在运行的虚拟机
virsh list --all
#查看虚拟机列表,包括未运行的虚拟机
virsh console test #进入指定虚拟机
vrish常用的命令
virsh shutdown test
//关闭虚拟机
virsh start test
//开启虚拟机
virsh destroy test
//类似 stop,这个是强制停止
virsh undefine test
//彻底销毁虚拟机,会删除虚拟机配置文件,virsh list --all 就看不到
virsh autostart test
//宿主机开机该虚拟机也开机
virsh autostart --disable test
//解除开机启动
virsh suspend test
//挂起
virsh resume test
//恢复
2.克隆虚拟机
克隆虚拟机之前,要先关闭虚拟机(test)。
virt-clone --original test --name test02 --file
#--original test: 用于指定原始虚拟机的名称。在这里,test 是您希望克隆的原始虚拟机的名称。
--name test02: 用于指定新创建的克隆虚拟机的名称。在这里,test02 是您希望为克隆虚拟机设置的新名称。
--file <目标磁盘文件>: 用于指定新创建的克隆虚拟机的目标磁盘文件路径。在这里,您需要提供一个目标磁盘文件的路径,该文件将用于存储克隆虚拟机的磁盘镜像。
#会出现找不到命令,进行yum源下载
yum install libvirt-client
执行克隆命令后
成功克隆之后,在宿主机上查看虚拟机配置文件,看是否添加test02.xml文件
cd /etc/libvirt/qemu
virsh list -all #查看虚拟机列表
virsh start test02 #打开虚拟机test02
3.快照管理
快照是在我们使用 Vmware 的时候,很常用的一个功能。它可以回到之前的 某一状态。在 KVM 中 RAW 格式的虚拟磁盘不支持做快照,qcow2 支持。
创建快照
virsh snapshot-create test #创建快照
查看磁盘镜像文件test.img的信息,同时也会反馈快照的列表
qemu-img info /kvm_data/test.img
列出所有快照
virsh snapshot-list test
查看当前快照版本
virsh snapshot-current test
查看所有快照的配置文件
ls /var/lib/libvirt/qemu/snapshot/test/
恢复指定快照
virsh snapshot-revert test 1691334489
删除指定快照
virsh snapshot-delete test 1691334489
删除后观察是否还有快照文件
ls /var/lib/libvirt/qemu/snapshot/test/
4.磁盘格式
查看虚拟机磁盘格式
qemu-img info /kvm_data/test.img
创建2GB的RAW格式磁盘
qemu-img create -f raw /kvm_data/test_1.img 2G
RAW格式的磁盘转换为qcow2格式
qemu-img convert -O qcow2 /kvm_data/test_1.img
查看test1.img大小
ls -lh /kvm_data/test_1.img
ls -lh /kvm_data/test_1.qcow2
//可以看到 qcow2 文件比较小,raw 文件大小和我们指定空间大小一样是 2G
//raw 格式的磁盘性能比 qcow2 要好,但是 raw 格式的磁盘无法做快照
将test02转成raw格式
qemu-img convert -O raw /kvm_data/test02.img
更改磁盘格式和文件路径,然后启动test02虚拟机
virsh edit test02 #virsh edit 命令用于编辑虚拟机定义文件,其中 "test02" 是虚拟机的名称。虚拟机定义文件包含了虚拟机的配置信息,例如虚拟硬件设备、网络设置和启动选项
查看磁盘所属用户和组
调整CPU内存,网卡
查看虚拟机配置信息
virsh dominfo test #用于查看有关虚拟机的基本信息,其中 "test" 是虚拟机的名称。这个命令不会编辑虚拟机定义文件,而是提供虚拟机的当前状态和基本属性的摘要信息
编辑虚拟机内存
virsh edit test
重启虚拟机
virsh destroy test
virsh start test
查看配置
virsh dominfo test #需要时间,十到十五秒修改完成
第二种方法,动态修改
virsh setmem test 800m #动态修改内存
virsh setvcpus test 2 #动态修改cpu 只能增加不能减少
virsh dominfo test #查看配置
修改完配置后需要写入配置文件中
virsh dumpxml test > /etc/libvirt/qemu/test.xml
#dumpxml:这是 virsh 命令的一个子命令,用于导出虚拟机的配置信息。
查看网卡列表
virsh domiflist test
增加一块新的网卡,并设置为NAT网络模式(virbr0 类似 VMware 的 VMnet8),这里如果写--source br0,则网络模式为桥接 )
virsh attach-interface test --type bridge --source virbr0
virsh domiflist test
virsh dumpxml test > /etc/libvirt/qemu/test.xml
进入test虚拟机,查看网卡信息
virsh console test
ip a
迁移虚拟机
首先关闭虚拟机
virsh shutdown test
查看虚拟机磁盘所在目录
virsh domblklist test
virsh dumpxml test > /etc/libvirt/qemu/test03.xml
//如果是远程机器,需要把该配置文件拷贝到远程机器上
rsync -av /kvm_data/test.img /kvm_data/test03.img
//-bash: rsync: command not found 则 yum install -y rsync
//如果是迁移到远程,则需要把该磁盘文件拷贝到远程机器上
因为是迁移到本机,配置文件用的是 test 子机的配置,不改会有冲突,所以 需要修改该文件。如果是远程机器不用修改
vi /etc/libvirt/qemu/test03.xml
定义新虚拟机
virsh define /etc/libvirt/qemu/test03.xml
查看虚拟机列表,会发现新迁移的虚拟机 test03
virsh list --all
virsh start test03
virsh list --all
KVM管理完成