【KVM】虚拟化技术及实战
一,KVM简介
KVM全称为QEMU-KVM。
KVM可以模拟内存,cpu的虚拟化,不能模拟其他设备虚拟化。
QEMU可以模拟I/O设备(网卡,磁盘等)
两者结合,实现真正意义上的虚拟化。
从rhel6版本开始,企业中默认内核xen不支持,由KVM作为内核模块实现的。
1,分类
平台虚拟化(计算机或操作系统),
资源虚拟化(内存,CPU等),
应用程序虚拟化(仿真,模拟,解析等)。
- 操作系统虚拟化:Openvz 虚拟化出的vps,只可安装linux,不能安装windows系统。
- 部分虚拟化:只是模拟底层硬件。
- 全虚拟化:完整模拟
KVM和VMware都支持全虚拟化。
- 超虚拟化
- 硬件辅助虚拟化(借助外接硬件)
2,架构
QEMU为硬件模拟器,开源虚拟软件。
常用工具:hypervisor
来宾操作系统(GuestOS):
① 可加载的KVM模块
② 用于PC平台模拟(QEMU)
二,KVM安装
1,环境准备
# 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
# 关闭selinux
vi /etc/sysconfig/selinux
SELINUX=disabled
setenforce 0
查看CPU是否支持VT技术:
cat /proc/cupinfo | grep -E 'vmx|svm'
2,安装
-
主要的三个包:
①qemu-kvm (主包) ② libvirt(API接口) ③virt-manager(图形管理程序) -
各个版本安装
【centos6】:
yum groupinstall "Virtualization" "Virtualization Client" "Virtualization Platform" "Virtualization Tools" -y
【centos7】:
# 查看内核版本,一般3.10以上都行
uname -r
# 安装
yum install *qemu* *virt* librbd1-devel -y
安装报错的情况,需要升级系统版本 yum upgrade
【centos8】:
yum 组安装已经可以使用了,
问题:在进行组安装的时候会出现关于rpm版本的错误问题解决:
yum upgrade rpm -y
再单独安装virt-manager工具。
- 启动服务:
systemctl start libvirtd
- 查看模块加载
lsmod | grep KVM
3,删除
清理环境 ,卸载KVM:
yum remove `rpm -qa | egrep 'qemu|virt|KVM'` -y
rm -rf /var/lib/libvirt /etc/libvirt/
三,GuestOS安装
1,图形界面安装
打开安装界面:Virt-manager
图形安装需要先准备镜像文件:Cent0s-7-x86_64-DVD-1708.iso
接下来步骤一步步安装(类似VMmare)(略)
2, 完全文本方式安装
服务器和客户端 都没有图形的情况下,采用此种安装方式。
注意:此种安装方式,输入字母大小写不可控,不影响远程操作,而且内存要求2G以上才行。
#virt-install --connect qemu:///system -n vm6 -r 512 --diskpath=/virhost/vmware/vm6.img,size=7 --os-type=linux --os-variant=rhel6 --vcpus=1 --network bridge=br0 --1ocation=http://127.0.0.1/rhel6u4 -x console=ttyS0 --nographics
#virt-install --connect qemu:///system -n vm9 -r 2048 --diskpath=/var/lib/libvirt/images/vm9.img,size=7 --os-type=linux --os-variant=centos7.0 --vcpus=1 --location=ftp://192.168.100.230/centos7u3 -x console=ttys0 --nographics
安装完后,查看KVM支持的os版本:
man virt-install
osinfo-query os | grep centos
3,命令行安装(重点)
(1)虚拟机的组成部分
1.虚拟机配置文件
ls /etc/libvirt/qemu
networks vm1.xml
2.储存虚拟机的介质
ls /var/lib/libvirt/images
vm1.img
后缀自定义,一般命名.img 或者.qemu2
(2)根据配置文件创建虚拟机
# 将配置文件拷贝
cd /etc/libvirt/qemu/
cp vm1.xml vm2.xml
# 将镜像文件复制(时间长)
cd /var/lib/libvirt/images/
cp m1.qcow2 vm2.img
(3)更改配置文件
【注意】:MAC地址更改,仅仅更改后面三段(后六位)
(4)创建虚拟机
virsh define /etc/libvirt/qemu/vm2.xml
(5)重启虚拟机
systemctl restart libvirtd
(6)宿主机开启路由转发:
# 配置文件加入ipv4
vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
# 是否配置生效
sysctl -p
4,通过飞机驾驶舱安装和管理虚拟机
yum install -y cockpit
systemctl start cockpit
浏览器访问:主机ip+9090
用户名和密码与服务器用户名密码相同
停止飞机驾驶舱:
systemctl start cockpit.socket
查看端口9090 是否消失确认关闭:
netstat -lntp
5,安装过程问题解决
安装过程,卡住不动的情况下解决方案:
① yum upgrade -y
② 安装兼容程序
③ 可能qemu-kvm主包,错误的安装成了qemu-kvm-ev
四,KVM添加磁盘
对虚拟机器,升级配置
1.修改配置文件
(比如添加磁盘,那就添加如下配置)
2.创建新的空磁盘卷:
qemu-img create -f qcow2 /var/lib/libvirt/images/vm3-1.qcow2 10G
-f: 指定磁盘格式
3. 重新定义:
virsh define /etc/libvirtd/qemu/ym3.xml
五,KVM存储池
默认存储池:/var/lib/libvirt/images/
1、存储池管理
1.创建基于文件夹的存储池(目录)
mkdir -p /data/vmfs
2.定义存储池与其目录
virsh pool-define-as vmdisk --type dir --target /data/vmfs
3.创建已定义的存储池
(1)创建已定义的存储池:
virsh pool-build vmdisk
(2)查看已定义的存储池,存储池不激活无法使用:
virsh pool-list --a11
4.激活并自动启动已定义的存储池
virsh poo-start mdisk
virsh pool-autostart vmdisk
这里vmdisk存储池就已经创建好了,可以直接在这个存储池中创建虚拟磁盘文件了。
5.在存储池中创建虚拟机存储卷
virsh vol-create-as vmdisk oeltest03.qcow2 20G --format qcow2
注1:KVM存储池主要是体现一种管理方式,通过挂载存储目录,lvm逻辑卷的方式创建存储池,虚拟机存储卷创建完成后,剩下的操作与无存储卷的方式无任何区别了。
注2:KVM存储池也要用于虚拟机迁移任务。
6.存储池相关管理命令
(1)在存储池中删除虚拟机存储卷
virsh vol-delete --pool vmdisk oeltest03.gcow2
(2)取消激活存储池
virsh pool-destroy vmdisk
(3)删除存储池定义的目录/data/vmfs
virsh pool-delete vmdisk
(4)取消定义存储池
virsh pool-undefine vmdisk
2、生成环境存储池使用
添加Ivm和远程存储即可
3、磁盘格式
磁盘格式名 | 性能 | 是否支持快照 | 是否立刻分配空间 |
---|---|---|---|
raw | 最快 | 不支持 | 立刻分配(空间资源浪费) |
qcow | 一般 | - | - |
qcow2 | 较快 | 支持 | 不立刻分配(写时拷贝) |
qed | 基本弃用 | - | - |
什么叫写时拷贝?
raw立刻分配空间,不管你有没有用到那么多空间
qcow2只是承诺给你分配空间,但是只有当你需要用空间的时候,才会给你空间。最多只给你承诺空间的大小,避免空间浪费。
4、创建磁盘文件
建立qcow2格式磁盘文件:
qemu-img create -f qcow2 test.qcow2 20G
建立raw格式磁盘文件:
qemu-img create -f raw test.raw 20G
查看已经创建的虚拟磁盘文件:
qemu-img info test.qcow2
六,KVM磁盘挂载
1,介绍
当遇到虚拟机无法启动,实施排错时,你需要对虚拟机的内部进行检查。
利用Libguestfs找出损坏的虚拟机文件。
使用Libguestfs,首先需要使用Libvirt。Libvirt是一个管理接口,可以和KVM、Xen和其他一些基于Liunx的虚拟机相互连接。Libguestfs的功能更加强大,可以打开Windows虚拟机上的文件。但是首先你需要将虚拟机迁移到libguestfs可用的环境当中,也就是Linux环境。
2,操作
查看磁盘镜像分区信息:
virt-df -h -d vm1
或
virt-filesystems -d vm1/dev/sda1
挂载磁盘镜像分区:
guestmount -d vml -m /dev/vda1 --rw /mnt
取消挂载:
guestunmount /mnt
七,KVM虚拟机管理
1,基本管理
查看 启动 关闭 重启 重置 查看
# 查看虚拟机:
virsh list
或
virsh list --a1l
# 查看KVM虚拟机配置文件(X):
virsh dumpxml name
# 将node4虚拟机的配置文件保存至node6.xm1(x):
virsh dumpxml node4 > /etc/libvirt/gemu/node6.xml
# 修改node6的配置文件(X):
virsh edit node6
# 如果直接用vim编辑器修改配置文件的话,需要重启1ibvirtd服务
启动:
virsh start vm_name
暂停虚拟机:
virsh suspend vm_name
恢复虚拟机:
virsh resume vm_name
关闭:
方法1:
virsh shutdown vm_name
方法2(X):
virsh destroy vm_name
重启:
virsh rebopt vm_name
重置:
virsh reset vm_name
删除虚拟机:
virsh undefine vm_name
注意:虚拟机在开启的情况下undefine是无法删除的,但是如果再destroy会直接
被删除掉
虚拟机开机自动启动:
virsh autostart vm_name
域vm_name标记为自动开始
1s /etc/libvirt/gemu/autostart/
域vm_name取消标记为自动开始
virsh autostart --disable vm_name
查看所有开机自启的guest os:
1s /etc/libvirt/gemu/autostart/
virsh ist --a11 --autostart
八,KVM克隆
1,图形界面
Applications(左上角)---->System Tools ------>Virtual Machine Manager关闭要克隆的虚拟机,右键点击虚拟机选择Clone
2,终端命令克隆
virt-clone -o vm_name1 --auto-clone
virt-clone -o vm_name1 -n vm_name2 --auto-clone
virt-clone -o vm_name1 -n vm_name2 -f 'var/lib/libvirt/images/vm2.img
参数说明:
-o : 指定需要克隆的虚拟机名称
-n : 指定克隆出的虚拟机名称
-f ,–file :为新客户机使用新的磁盘镜像文件名称
九,KVM增量镜像
1,基础准备
基本镜像文件:node.img 虚拟机ID:node
增量镜像文件:node4.img 虚拟机ID:node4
2,创建增量镜像
# 创建增量镜像
qemu-img create -b node.img -f qcow2 node4.img
# 查看是否创建成功
qemu-img info node4.img
参数说明:
-b:指定基础镜像
-f:指定镜像格式
3,创建虚拟机node4的XML配置文件
省略(上面已经介绍)
4,根据xml配置定义虚拟机node4
virsh define /etc/libvirt/qemu/node4.xml
virsh start node4
5,测试
查看生成镜像文件的大小,使用命令:du -h 文件名
6,快照
为虚拟机vm_name01创建一个快照vm_name01-1.snap
# 创建快照
virsh snapshot-create-as vm_name01 vm_name01-1.snap
# 查看指定快照文件格式
qemu-img info /var/lib/libvirt/images/vm2.qcow2
# 查看快照列表
virsh snapshot-list vm_name01
# 创建一块磁盘
qemu-img create -f raw /var/lib/libvirt/images/vm2-1.raw 2G
由于新磁盘格式为raw,可以挂载但是无法创建快照,因此,需要将raw格式转换成qcow2格式,具体操作如下:
# 将raw格式转换成qcow2格式
qemu-img convert -O qcow2 [需要转换文件名].raw [转换成的文件名].qcow2
# 查看信息
qemu-img info [转换成的文件名].qcow2
转换格式成功后,需要重新该配置文件vm2.xml后,定义并创建快照:
virsh define /etc/libvirt/qemu/vm2.xml
# 拍快照
Virsh snapshot-create-as vm2 vm2.snap2
# 恢复快照
virsh snapshot-revert vm2 vm2.snap2
十,KVM网络
1,分类:
(1)网络分类:nat 和 isolated
(2)接口:bridge
(3)虚拟交换机: linux-bridge(linux自带) 和 ovs (open-Vswitch)
2,网络拓扑
(1)NAT网络拓扑
(2)隔离网络拓扑
(3)桥接网络拓扑
3,实验操作
# 查看交换机 包括其端口
brctl show
# 从交换机上把vnet0网卡删除:
brctl delif virbr0 vnet0
# 添加vnet网卡到交换机上:
brctl addif virbr0 vnet0
查看所有的网络:
virsh net-list
启动网络:
virsh net-start isolated200
开机自启动:
virsh net-autostart isolated200
查看一个guest主机的网络接口信息:
virsh domiflist vm2
【KVM相关项目】
1、迁移
- 从物理机器迁移到KVM
- 从KVM迁移到云主机