介绍:
完全虚拟化技术(硬件辅助虚拟化技术):在虚拟机和硬件之间加了一个软件层-Hypervisor(虚拟机监视器VMM)
半虚拟化技术(准虚拟化技术):在全虚拟化的基础上,把操作系统做了修改,添加了一个API,对客户发出的指令进行优化,降低Hypervisor翻译消耗的一部分不必要的资源,提高了整体资源
寄居架构:在操作系统上安装和运行虚拟化程序,依赖主机操作系统对设备的支持和物理资源的管理
裸金属架构:直接在硬件上安装虚拟化软件,再其上安装系统,依赖虚拟层内核和服务器控制台进行管理
安装VMware esxi 可以直接安装在计算机硬件上,属于裸金属架构,安装完成后安装vsphere client 客户端部署虚拟机也可以通过IP访问,进行虚拟机的安装,这样可以节省大量的硬件资源。
Kvm虚拟机属于寄居架构,会占用系统大量的资源。
KVM 全称是基于内核的虚拟机(Kernel-based Virtual Machine),它是一个 Linux 的一个内核模块,该内核模块使得Linux变成了一个Hypervisor。
KVM 是基于虚拟化扩展(Intel VT 或者 AMD-V)的X86硬件的开源的Linux原生的全虚拟化解决方案。KVM中,虚拟机被实现为常规的Linux进程,由标准 Linux 调度程序进行调度;虚机的每个虚拟 CPU 被实现为一个常规的 Linux 进程。这使得KVM能够使用Linux内核的已有功能。但是,KVM 本身不执行任何硬件模拟,需要客户空间程序通过/dev/kvm接口设置一个客户机虚拟服务器的地址空间,向它提供模拟的I/O,并将它的视频显示映射回宿主的显示屏。目前这个应用程序是 QEMU。
Guest:客户机系统,包括CPU(vCPU)、内存、驱动(Console、网卡、I/O 设备驱动等),被 KVM 置于一种受限制的 CPU 模式下运行。
KVM:运行在内核空间,提供CPU 和内存的虚级化,以及客户机的 I/O 拦截。Guest 的 I/O 被 KVM 拦截后,交给 QEMU 处理。
QEMU:修改过的为 KVM 虚机使用的 QEMU 代码,运行在用户空间,提供硬件 I/O 虚拟化,通过 IOCTL /dev/kvm 设备和 KVM 交互。
常用工具:
libvirt:操作和管理KVM虚机的虚拟化 API,使用 C 语言编写,可以由 Python,Ruby, Perl, PHP, Java 等语言调用。可以操作包括 KVM,vmware,XEN,Hyper-v, LXC 等 Hypervisor。
Virsh:基于 libvirt 的 命令行工具 (CLI)
Virt-Manager:基于 libvirt 的 GUI 工具
virt-v2v:虚机格式迁移工具
virt-* 工具:包括 Virt-install (创建KVM虚机的命令行工具), Virt-viewer (连接到虚机屏幕的工具),Virt-clone(虚机克隆工具),virt-top 等
sVirt:安全工具
Kvm安装:
Kvm 虚拟机使用时注意把主板BIOS的虚拟化功能打开
查看cpu是否支持虚拟化,有输出说明支持虚拟化 cat /proc/cpuinfo |grep vmx
开启CPU虚拟化支持
安装依赖关系
[root@localhost ~]# yum -y install qemu-kvm qemu-kvm-tools python-virtinst.noarch qemu-img bridge-utils libvirt virt-manager
查看是否加载了KVM模块
[root@localhost ~]# lsmod | grep kvm
在libvirt中运行KVM网络有两种方法:NAT和bridge,默认是NAT。
将以bridge(桥接模式)为例
[root@localhost ~]# ip a
[root@localhost ~]# cd /etc/sysconfig/network-scripts/
[root@localhost network-scripts]# cp ifcfg-eth0 ifcfg-br0
[root@localhost network-scripts]# vim ifcfg-br0
TYPE="bridge"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="static"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
UUID="7b0d75bd-81f6-41c0-ba0c-e982fedaa5af"
HWADDR=00:0c:29:2a:04:e6
NM_CONTROLLED="no"
DEVICE="br0"
ONBOOT="yes"
IPADDR=192.168.77.135
GATEWAY=192.168.77.2
DNS=192.168.77.2
PREFIX=24
[root@localhost network-scripts]# vim ifcfg-eth0
DEVICE=eth0
HWADDR=00:0c:29:88:85:64
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=no
BOOTPROTO=static
BRIDGE="br0" #桥接虚拟网卡名称
[root@localhost ~]# /etc/init.d/network restart
[root@localhost ~]# ip a #主机IP会配置在br0网卡上
进入图像界面 virt-manager,连接出错时,重启libvirtd
添加池:双击localhost{QEMU}---->存储----->“+”添加池---->选择浏览----->找到刚才创建的目录------>完成---->单机刚创建的KVM01池----新建卷
具体安装过程与安装Linux系统一样(linux系统安装教程)
查看KVM的配置文件存放目录
[root@localhost ~]# ls /etc/libvirt/qemu
查看虚拟机状态 Virsh list --all
虚拟机伴随宿主机自动启动
[root@localhost ~]# virsh autostart centos6.5
[root@localhost ~]# ls /etc/libvirt/qemu
关机KVM虚拟机
[root@localhost ~]# virsh shutdown centos6.5
开机KVM虚拟机
[root@localhost ~]# virsh start centos6.5
删除虚拟机
[root@localhost ~]# virsh undefine centos6.5
强制删除虚拟机
[root@localhost ~]# virsh destroy centos6.5
导出虚拟机配置
[root@localhost ~]# virsh dumpxml centos6.5 > /etc/libvirt/qemu/centos6.5_bak.xml
修改虚拟机配置信息
[root@localhost ~]# virsh edit centos6.5
KVM文件管理,raw格式转换为qcow2格式
虚拟机磁盘文件分为raw与qcow2格式,KVM默认格式是raw裸设备。
raw好处:性能好、速度最快。缺点:不支持一些新的功能。如:镜像、zlib磁盘压缩,AES加密等
虚拟化中,虚拟机的磁盘:1.虚拟机的硬盘在物理主机上只是一个文件 2.磁盘文件格式可以是raw,也可以是QCOW2 3.raw采用预分配空间方式,也就是虚拟机磁盘20G,物理主机就会产生一个20G的文件4.QCOW2采用延迟分配方式,一开始磁盘文件在物理主机上只占很小的空间,随着向虚拟机写入数据,这个硬盘文件会自动增长5.虚拟机磁盘目录/var/lib/libvirt/images
du -sh .rh7_template.img
查看后端盘大小6.查看模板盘(后端盘)信息 qemu-img info .rh7_template.img
libguestfs-tools工具实现格式转换
[root@localhost ~]# yum -y install libguestfs-tools
[root@localhost ~]# qemu-img info /data_kvm/store/KVM011.img
[root@localhost ~]# virsh shutdown centos6.5
[root@localhost ~]#qemu-img convert -f raw -O qcow2 /data_kvm/store/KVM011.img /data_kvm/store/KVM011.qcow2
[root@localhost ~]# ls /data_kvm/store/
[root@localhost ~]# virsh edit centos6.5
查看虚拟机里的network文件,需要些时间
[root@localhost ~]# virt-cat -a /data_kvm/store/centos6.5.qcow2 /etc/sysconfig/network
Virt-edit命令,用于编辑文件,用法与vim基本相同
[root@localhost ~]#virt-edit -a /data_kvm/store/centos6.5.qcow2 /etc/sysconfig/network
Virt-df命令用查看虚拟机磁盘信息
[root@localhost ~]# virt-df -h centos6.5
虚拟机的克隆
[root@localhost ~]# virsh destroy centos6.5
[root@localhost ~]# virt-clone -o centos6.5 -n centos6.5-clome -f /data_kvm/store/KVM011-clone.qcow2
虚拟机的快照
[root@localhost ~]# virsh snapshot-create centos6.5
查看快照信息
[root@localhost ~]# virsh snapshot-list centos6.5
恢复快照
[root@localhost ~]# virsh snapshot-list centos6.5
[root@localhost ~]# virsh snapshot-revert centos6.5 1535644190
[root@localhost ~]# virsh snapshot-current centos6.5
删除快照
[root@localhost ~]# virsh snapshot-delete centos6.5 1535644190
查看虚拟机信息
virsh dominfo centos6.5
列出虚拟网络 Virsh net-list
重启虚拟机 virsh reboot 虚拟机名
基于后端盘克隆虚拟机
(1)创建前端盘
qemu-img create -f(格式) qcow2 -b(后端盘) .rh7_template.img myrh7.img 大小
查看前端盘 ll -h myrh7.img
qemu-img info myrh7.img
(2)利用新建前端盘生成虚拟机
Virt-manger ->点击“新建虚拟机”->导入现有的磁盘镜像-> /var/lib/libvirt/images/myrh7.img->后续根据向导完成
Cow格式,写时复制,后端盘的数据同步到前端盘,前端盘的数据不能同步后端盘,这样就能让前端互相独立