虚拟化(系统虚拟化):是指通过虚拟化技术将一台计算机虚拟为多台逻辑计算机。在一台计算机上同时运行多个逻辑计算机,每个逻辑计算机可运行不同的操作系统,并且应用程序都可以在相互独立的空间内运行而互不影响,从而显著提高计算机的工作效率
名词:物理机或宿主机(Host,即真机)、虚拟机里面系统(Guest OS)
虚拟机不能直接与物理机资源访问,必须通过VMM(虚拟机管理程序,即VDSM或称Hypervisor)才能访问物理机资源
全虚拟化(本地虚拟化、硬件辅助全虚拟化):虚拟机中运行的软件与系统不需经过任何修改,就好比运行在真实硬件一样;但依然使用虚拟硬件设备,并且需要硬件支持,物理机需支持虚拟化功能(grep -E ‘vmx | svm’ /proc/cpuinfo,查询intel与AMD是否支持) |
KVM是Kernel Virtual Machine的简写,使用半虚拟化技术创建虚拟机的模块,目前Red Hat只支持在64位的RHEL 5.4及以上的系统运行KVM(其余发行版也可使用),同时硬件需要支持VT技术;KVM的前身是QEMU,2008年被Red Hat公司收购并获得一项hypervisor技术,不过Red Hat的KVM被认为是将成为未来Linux hypervisor的主流,准确来说,KVM仅仅是Linux内核的一个模块,管理和创建完整的KVM虚拟机,需要更多的辅助工具
KVM自Linux 2.6.20版本后就直接整合到Linux内核,它依托CPU和虚拟化指令集(如Inter-VT、AMD-V)实现高性能的虚拟化支持;由于与Linux内核高度整合,因此在性能、安全性、兼容性、稳定性上都有很好的表现
图上简单描述了KVM虚拟化架构,在KVM环境中运行的每个虚拟化操作系统都将表现为单个独立的系统进程。因此它可以很方便地与Linux系统中的安全模块进行整合(SElinux),可以灵活地实现资源的管理及分配
安装前要查看 CPU 是否支持虚拟化
Intel CPU:cat /proc/cpuinfo |grep --color vmx
AMD CPU:cat /proc/cpuinfo |grep --color smv
关闭selinux与firewalld
systemctl stop firewalld
setenforce 0
若以上操作有输出,就说明 CPU 支持虚拟化
实验环境注意勾选”CPU虚拟化”
最简单的安装方法就是在安装系统的时候,选择桌面安装,然后选择虚拟化选项
在已有系统基础上,只需安装KVM所需软件即可
配置本地yum源
[root@kvm ~]# yum -y groupinstall "X Window System" //安装软件包组支持桌面环境
[root@kvm ~]# yum -y groupinstall "GNOME Desktop" //安装软件包组Gnome桌面
[root@kvm ~]#ln -sf /lib/systemd/system/runlevel5.target /etc/systemd/system/default.target //设置开机默认为图形化界面
[root@kvm ~]#ln -sf /lib/systemd/system/runlevel3.target /etc/systemd/system/default.target //设置开机默认为命令行界面
[root@kvm ~]#reboot //重启生效
[root@kvm ~]#yum -y install qemu-kvm //KVM模块
[root@kvm ~]#yum -y install qemu-kvm-tools //KVM调试工具,可不安装
[root@kvm ~]#yum -y install bridge-utils //网络支持工具
[root@kvm ~]#yum -y install virt-install //命令管理虚拟机工具
[root@kvm ~]#yum -y install libvirt //虚拟机管理工具
[root@kvm ~]#yum -y install virt-manager //图形界面管理虚拟机
[root@kvm ~]#yum -y install libguestfs-tools //virt-cat等命令的支持软件包
[root@kvm ~]#reboot //重启系统
[root@kvm ~]#lsmod | grep kvm //检查KVM模块是否安装
宿主服务器安装完成KVM,首先要设定网络,在libvirt中运行KVM网络有两种方法:NAT和Bridge,默认是NAT
新安装的KVM没有桥接网络,所以需要配置桥接
[root@kvm ~]# vim /etc/sysconfig/network-scripts/ifcfg-eno16777728
TYPE=Ethernet
DEVICE=eno16777728
ONBOOT=yes
BRIDGE=br0
[root@kvm ~]# vim /etc/sysconfig/network-scripts/ifcfg-br0
TYPE=Bridge
BOOTPROTO=dhcp
DEVICE=br0
ONBOOT=yes
[root@kvm ~]# systemctl restart network
出现以上信息,说明桥接成功
在安装虚拟机之前,为了方便管理虚拟机的磁盘及镜像文件,一般建议单独新建存储池(即磁盘文件和镜像存储位置指定)
[root@kvm ~]# mkdir -pv /kvm/{store,iso} //新建磁盘及镜像存储目录
[root@kvm ~]# virt-manager //开启图形化管理工具
双击”QEMU/KVM”,选择”存储选项卡”,然后单击”+”按钮新建存储池
根据提示输入存储池名称,如store
指定store存储池里面内容的存储目录(该处为之前新建的/kvm/store)
同样的操作再创建一个镜像存储池,命名为iso
目录为kvm/iso即可
存储池创建完成后,就可以将安装系统的ISO镜像文件上传到/kvm/iso目录,以方便后续安装系统使用
上传过程略…,这里以Centos 6.5 64bit镜像为例
存储卷即安装系统时虚拟机所使用的磁盘文件,那么在vmware软件中是在新建虚拟机时可选择磁盘文件的位置和大小,而KVM可提前新建虚拟机所使用磁盘文件及大小(当然也可直接使用默认KVM创建的default存储池空间),相比更加灵活
单击刚创建好的”store”存储池,单击对话框右侧的“加号”按钮建立一个存储卷
设置新建存储卷取名并指定卷最大容量(格式选择”qcow2”不然不能快照)
回到虚拟系统管理器后,选择”新建虚拟机”选项
选择“本地安装介质“,点击”前进”
指定安装镜像文件,勾选“根据安装介质自动侦测操作系统”
选择内存大小和CPU数量,点击“前进”
选择虚拟机产生文件存储位置,这里选择之前新建存储卷”Centos_6.5”使用它的空间
设置虚拟机的名称,并且勾选“在安装前自定义配置”
设置显示 spice 类型为“VNC服务器”,地址为“所有接口”,键盘布局和真机一样(一定选择,不然里面键盘输入有问题)
开始引导安装系统(其余硬件调整和VMware使用差不多,这里不再阐述)
安装过程略。
[root@kvm ~]# ls /etc/libvirt/qemu
centos6.5.xml networks
[root@kvm ~]# virsh list --all
Id 名称 状态
----------------------------------------------------
4 centos6.5 running
关机
[root@kvm ~]# virsh shutdown centos6.5 //关闭名为Centos6.5的KVM虚拟机
[root@kvm ~]# virsh list --all
Id 名称 状态
----------------------------------------------------
4 centos6.5 shut off
开机
[root@kvm ~]# virsh start cento6.5 //开启名为centos6.5的kvm虚拟机
[root@kvm ~]# virsh list --all
Id 名称 状态
----------------------------------------------------
4 centos6.5 running
强制关机
[root@kvm ~]# virsh destroy centos6.5 //强制关闭名为centos6.5的KVM虚拟机
挂起(暂停)
[root@kvm ~]# virsh suspend centos6.5 //挂起名为centos6.5的虚拟机
[root@kvm ~]# virsh list --all
Id 名称 状态
----------------------------------------------------
6 centos6.5 pausd
恢复虚拟机
[root@kvm ~]# virsh resume centos6.5
开机自启KVM虚拟机
[root@kvm ~]# virsh autostart centos6.5
域 centos6.5标记为自动开始
配置文件备份
[root@kvm ~]# virsh dumpxml centos6.5 >/etc/libvirt/qemu/centos6.5.xml.bak //导出虚拟机配置文件做备份(配置文件中存储虚拟机配置情况等,如CPU、内存等)
删除KVM虚拟机
[root@kvm ~]# virsh undefine centos6.5 //删除名为centos6.5的KVM虚拟机
域 centos6.5 已经被取消定义
[root@kvm ~]# virsh list --all
Id 名称 状态
----------------------------------------------------
添加KVM虚拟机
[root@kvm ~]# virsh define /etc/libvirt/qemu/centos6.5.xml.bak 通过之前备份的配置文件,重新将centos6.5虚拟机添加
定义域 centos6.5(从 /etc/libvirt/qemu/centos6.5.xml.bak)
[root@kvm ~]# virsh list --all
Id 名称 状态
----------------------------------------------------
- centos6.5 关闭
修改KVM虚拟机配置信息
[root@kvm ~]# virsh edit centos6.5 //编辑虚拟机centos6.5的配置文件
centos6.5
b1aed133-f66e-472f-bd2f-741d94e30e96
1048576
1048576
1
/machine
.....
[root@kvm ~]# vim /etc/libvirt/qemu/centos6.5.xml //也可直接编辑配置文件,但不建议使用
KVM虚拟机常用磁盘格式为raw与qcow2格式,默认使用qcow2格式,那么其中raw格式的磁盘性能最好、速度最快,但不支持AES加密、zlib磁盘压缩等新功能,而qcow2格式磁盘存储空间更小,并支持AES加密、zlib、快照等新功能,缺点是性能较差 如果想管理指定虚拟机磁盘(如分区情况、磁盘数量等),可以使用”libguestfs-tools”工具(一般默认安装),下面举例,说明如和转换磁盘格式
qemu-img info /kvm/store/centos6.5 //查看指定磁盘文件的信息(如磁盘格式、占用磁盘大小等)
qemu-img convert -f raw -O qcow2 raw格式磁盘镜像路径 qcow2格式磁盘镜像路径
选项:
qemu-img convert -f raw -O qcow2 /kvm/store/centos6.5 /kvm/store/centos6.5.qcow2 //将指定raw格式文件转换为qcow2磁盘格式文件(注意该虚拟机需关机)
qemu-img info /kvm/store/centos6.5.qcow2 //查看转换后磁盘格式信息
virsh edit centos6.5 //编辑指定名为centos6.5虚拟机配置文件
24
25
virsh start centos6.5 //启动该KVM虚拟机
virt-cat -a 磁盘文件路径 文件绝对路径 //查看指定KVM虚拟机磁盘文件里指定路径内容
[root@kvm ~]# virt-cat -a /kvm/store/Centos6.5 /etc/sysconfig/network //查看centos6.5磁盘文件中/etc/sysconfig/network内容
virt-edit -a 磁盘文件路径 文件决定路径 //编辑指定KVM虚拟机磁盘文件里指定路径内容
[root@kvm ~]# virt-edit -a /kvm/store/Centos6.5 /etc/sysconfig/network
virt-df -h 虚拟机名称 //查看指定KVM虚拟机磁盘使用情况
克隆:即将虚拟机复制一份,快速创建一个同样的虚拟机,节省时间并提高创建效率
virt-clone -o 源虚拟机名称 -n 克隆的虚拟机名称 -f 克隆的虚拟机磁盘文件路径
[root@kvm ~]# virt-clone -o centos6.5 -n centos6.5_clone -f /kvm/store/Centos6.5_clone //将centos6.5虚拟机克隆,生成centos6.5_clone并指定磁盘文件路径(注意克隆的虚拟机必须关机)
[root@kvm ~]# virsh list --all
Id 名称 状态
----------------------------------------------------
- centos6.5 关闭
- centos6.5_clone 关闭
快照:将虚拟机系统的某个状态保存,通过快照可快速恢复到虚拟机系统的某个状态
创建快照 virsh snapshot-create 虚拟机名称
[root@kvm ~]# virsh snapshot-create centos6.5 //给名为centos6.5虚拟机创建快照
已生成域快照 1558427973
查看快照信息 virsh snapshot-list 虚拟机名称
[root@kvm ~]# virsh snapshot-list centos6.5 //查看指定虚拟机所有创建的快照信息
名称 生成时间 状态
------------------------------------------------------------
1558427973 2019-05-21 16:39:33 +0800 shutoff
[root@kvm ~]# virsh snapshot-current centos6.5 //查看名为centos6.5虚拟机详细快照信息
1558427973
shutoff
1558427973
......
恢复快照 virsh snapshot-revert 虚拟机名称 快照序号
[root@kvm ~]# virsh snapshot-revert centos6.5 1558427973 //将名为centos6.5的虚拟机恢复到"Name"为1558427973时的状态
删除快照 virsh snapshot-delete 虚拟机名称 快照序号
[root@kvm ~]# virsh snapshot-delete centos6.5 1558427973 //将centos6.5虚拟机"Name"为1558427973的快照删除
已删除域快照 1558427973