KVM
一、虚拟化
1.1概念
将计算机的各种实体资源(CPU、内存、磁盘空间、网络适配器等),予以抽象 、转换后呈现出来并可供分区、组合为一个或多个电脑配置环境。
1.2应用数据化的原因
1)同一台物理机运行多个不同版本应用软件
2)硬件依赖性较低
3)便于数据迁移
1.3虚拟化的优势
1)提高应用兼容性
2)降低运营成本
3)加速应用部署
4)提高服务器可用性
5)提高资源利用率
6)动态调度资源
7)降低能源消耗
1.4虚拟化产品对比表
二、KVM
2.1、KVM
1)KVM是开源软件
2)是x86架构且硬件支持虚拟化技术(如intel VT或AMD-V)的Linux全虚拟化解决方案
3)包含为处理器提供底层虚拟化可加载的核心模块kvm.ko(kvm-intel.ko或kvm-AMD.ko)
4)需要经过修改的QEMU软件(qemu-kvm),作为虚拟机上层控制和界面
5)能在不改变linux或windows镜像的情况下同时运行多个虚拟机,(它的意思是多个虚拟机使用同一镜像)并为每一个虚拟机配置个性化硬件环境(网卡、磁盘、图形适配器……)同时KVM还能够使用ksm技术帮助宿主服务器节约内存。
2.2、KVM简介
KVM全称Kernel-based Virtual Machine,翻译过来是基于内核的虚拟机,实际它是Linux内核的一个模块。该模块将Linux变为一个Hypervisor,由Quramnet开发,支持x86、s390、Powerpc等CPU。它使用Linux自身的调度器进行管理,所以相对于Xen,其核心源码很少。KVM目前已成为学术界的主流VMM之一。
KVM的虚拟化需要硬件支持(如Intel VT技术或者AMD V技术)。是基于硬件的完全虚拟化。而Xen早期则是基于软件模拟的Para-Virtualization,新版本则是基于硬件支持的完全虚拟化。但Xen本身有自己的进程调度器,存储管理模块等,所以代码较为庞大。广为流传的商业系统虚拟化软件VMware ESX系列是基于软件模拟的Full-Virtualization。
2.3、KVM架构
从GUI到Linux内核,包括以下5个组件:
1)virt-manager: 用来管理VM的GUI/CUI用户接口;它使用libvirt API调用VM的各项功能
2)libvirt: 工具集及接口,作为较通用的服务器虚拟化软件,支持xen、vmware vSpher,qemu/KVM。
3)qemu: 是KVM内核模块交互的模拟器,处理多种客户机系统请求的I/O;一个qemu进程对应一个客户机系统
4)KVM模块: 用于处理VM Exits和VM Entry指令
5)Linux内核: 处理客户机系统调度
2.4、Virtual Machine Manager
1)虚拟机管理员,可以让用户管理多个虚拟机
2)创建、编辑、引导或停止虚拟机
3)查看并控制每个虚拟机的控制台
4)查看每部虚拟机的性能及使用率
5)查看每部正在运行中的虚拟机以及主控端的即时性及使用率信息
6)无论在本机或远程,皆可使用KVM、Xen、QEMU
三、KVM的部署
3.1、部署环境
1)如果在workstation上做实验,应当将处理的虚拟化功能打开
2)如果真实生产环境应当修改BIOS,开启虚拟化
3)你的KVM需要有足够的内存和磁盘空间
4)安装CentOS 7.4
5)关闭防火墙、selinux 并重启:
vim /etc/sysconfig/selinux
SELINUX=disabled
systemctl disable firewalld.service
重启后查看:
[root@localhost ~]# getenforce
Disabled
[root@localhost ~]# systemctl status firewalld.service
6)查看cpu是否支持虚拟化
验证cpu是否支持kvm,如果结果中有vmx(Intel)或svm(AMD)字样,就说明CPU的支持的
3.2、安装相关软件包
1)配置网络
vim /etc/sysconfig/network-scripts/ifcfg-ens33
systemctl restart network.service
2)配置yum源(能连接外网的情况下)
[root@localhost yum.repos.d]# mkdir -p repo.bak
[root@localhost yum.repos.d]# mv *.repo repo.bak/
[root@localhost yum.repos.d]# ls
repo.bak
[root@localhost yum.repos.d]# wget http://mirrors.163.com/.help/CentOS7-Base-163.repo
[root@localhost yum.repos.d]# ls
CentOS7-Base-163.repo repo.bak
更新yum源:
yum clean all
yum makecache
yum repolist
3)安装KVM软件包
yum install qemu-kvm libvirt virt-install virt-manager bridge-utils
说明:qemu-kvm ----模拟计算机的工具,为KVM虚拟机提供IO设备
libvirt ----管理虚拟机模块
virt-install ----命令行的虚拟机创建安装工具
virt-manager ----图形界面管理虚拟机
bridge-utils ----网桥工具
yum -y install python-virtinst libvirt-python libguestfs-tools
pyhon-virtinst -----包含python模块和工具(virt-install,virt-clone和virt-image)
用于安装和克隆虚拟机使用libvirt。
它完全支持paravirtulized客人和客人虚拟客人。
支持的虚拟机管理程序是Xen,qemu(QEMU)和kvm
libguestfs-tools ------virt-cat等命令的支持软件包
4)验证安装结果
5)开启kvm服务,并且设置其开机自动启动
systemctl enable libvirtd
systemctl start libvirtd
查看网络配置ifconfig:
安装KVM成功后会在宿主机上自动生成一个虚拟网桥,用来虚拟机和宿主机之间的通信;
可以看到网卡多了一个virbr0的网口,这个是libvirt默认的nat网口(默认IP是192.168.122.1),在更新的版本会发现有virbr0-nic、vnet0等网口,这些都是给虚拟机用的网口。
3.3、安装虚拟机
1)配置网桥
先将原来的物理网卡ens33 备份一份
cp /etc/sysconfig/network-scripts/ifcfg-ens33 /root/
创建新文件ifcfg-br0 :
cat /etc/sysconfig/network-scripts/ifcfg-br0
BOOTPROTO=static
DEVICE=br0
TYPE=Bridge
NM_CONTROLLED=no
IPADDR=192.168.3.50
NETMASK=255.255.255.0
GATEWAY=192.168.3.1
修改原来的物理网卡ens33:
cat /etc/sysconfig/network-scripts/ifcfg-ens33
BOOTPROTO=none
DEVICE=ens33
NM_CONTROLLED=no
ONBOOT=yes
BRIDGE=br0
重启网络服务:
systemctl restart network
2)创建镜像目录并上传镜像
kvm可以很好的支持linux虚拟机,windows虚拟机需要另外装驱动。
ls /home/iso/
CentOS-7.4-x86_64-DVD-1708.iso
3)创建虚拟机存放文件目录
mkdir -p /home/kvm
4)使用virt-install创建虚拟机
virt-install --name centos7_kvm --memory 512 --vcpus=1 --disk /home/kvm/centos7_kvm.img,format=qcow2,size=20 --network bridge=br0 --os-type linux --os-variant=rhel7.4 --cdrom /home/iso/CentOS-7.4-x86_64-DVD-1708.iso --noautoconsole --vnc --vncport=5910 --vnclisten=0.0.0.0
virt-install 工具的相关选项说明:
--name 虚拟机名称
--memory 内存大小
--vcpus= vcpu
--disk 创建硬盘 制定硬盘路径,格式,大小
--network 指定网络
--os-type 指定操作系统类型
--os-variant= 指定操作系统版本
--cdrom 指定光驱安装操作系统
--noautoconsosle 虚拟机创建完毕后不会自动切换tty
--vnc 使用vnc
--vncport vnc端口
注意:这里参数最好加上--noautoconsole,不然本tty就会一直被占用,会误以为失败死机
5)检查虚拟机状态,确认运行
virsh list
6)图形安装操作系统
kvm中虚拟机创建成功
另一种方式安装虚拟机:
mkdir -p /kvmdir/iso /kvmdir/vmdir 先创建两个目录
dd if=/dev/sr0 of=/kvmdir/iso/centos7.iso 制作镜像
qemu-img create -f qcow2 /kvmdir/vmdir/vm_centos7.qcow2 20G 制作磁盘文件
virt-install -n vm_centos7 -r 512 --vcpus=1 --location=/kvmdir/iso/centos7.iso --disk path=/kvmdir/vmdir/vm_centos7.qcow2,size=20,format=qcow2,sparse --accelerate --nographics -x 'console=ttyS0'
上面创建虚拟机命令最终需要你配置系统基础设置,带 [!]
基本都是要配置的,按照顺序往下配置,按对应的数字以此进行设置。一步步配置下去即可
安装虚拟机时 不同的参数:
mkdir -p /var/linux/images
qemu-img create -f qcow2 /var/linux/images/centos74.img 20G
virt-install --name centos71 --ram 512 --vcpus 1 --disk path=/var/linux/images/centos74.img,size=10 --os-type linux --os-variant rhel7 --graphics none --console pty,target_type=serial --location=/kvmdir/iso/centos7.iso --extra-args 'console=ttyS0,115200n8 serial'
若想在虚拟机创立后就可以使用console连的话,需要在virt-install
的时候加入extra-args
参数
3.4、虚拟机相关命令
0)常用命令
进入虚拟机:virsh console centos7_kvm
退出虚拟机:ctrl + ]
查看虚拟机状态:virsh list --all
查看运行的虚拟机:virsh list
启动虚拟机:virsh start centos7_kvm
关闭虚拟机:virsh shutdown centos7_kvm
强制关闭虚拟机:virsh destroy centos7_kvm 类似于断电
删除虚拟机:virsh undefine from_vm_centos7 注意要先关机, /etc/libvirt/qemu/ 此目录下对应的文件也会删除
查看当前虚拟机的硬盘信息:qemu-img info /kvmdir/vmdir/vm_centos7.qcow2
1)libguestfs-tools包
libguestfs -tools是一组Linux下的C语言的API,用来访问虚拟机的磁盘映像文件。该工具包内包含的工具有virt-cat、virt-df、virt-list、virt-copy-in、virt-copy-out、virt-edit、guestfs、guestmount、virt-list-filesystems、virt-list-partitions等工具。该工具可以在不启动KVM guest主机的情况下,直接查看guest主机内的文内容,也可以直接向img镜像中写入文件和复制文件到外面的物理机,也可以将guest的镜像文件挂载,功能相当强大。
2)libvirt包
libvirt是用于管理虚拟化平台的开源的API(libvirt API),后台程序(libvirtd进程)和管理工具(virsh工具集)。它可以用于管理KVM、Xen、VMware ESX,QEMU和其他虚拟化技术。这些API在云计算的解决方案中广泛使用。libvirtd进程主要实现远程代理、本地环境初始化、根据环境注册各种Driver(qemu、xen、storage)的实现。virsh工具集主要用于管理、操作虚拟主机。
3)virt-install包
这个包主要安装了virt-install、virt-clone和virt-xml命令,分别用于安装虚拟机系统、克隆虚拟机和编辑虚拟机的xml配置文件。
4)virsh工具使用
5)克隆和快照
虚拟机通过以上命令可以克隆,但是不建议这样做。
我们可以先创建一个虚拟机的磁盘文件,然后找到/etc/libvirt/qemu,将其中已经存在的虚拟机配置文件(xml结尾)复制一份出来,然后编译复制出来的文件,将虚拟机名、虚拟机磁盘文件位置、uuid、mac地址修改一下,最后通过define命令定义虚拟机,完成复制:
cp vm_centos7.qcow2 vm.qcow2
cd /etc/libvirt/qemu/ 这个目录下保存已经安装虚拟机的信息
cp vm_centos7.xml vm.xml
vim vm.xml 将虚拟机名、虚拟机磁盘文件位置、uuid、mac地址修改一下
virsh define vm.xml
3.5、kvm磁盘管理(qemu-img的使用)
1)kvm支持的磁盘类型
raw:这并非是一种真正的磁盘格式,而是代表虚拟机所使用的原始镜像;它并不存储元数据,因此可以作为保证虚拟机兼容性的候选方案,然而也正因为它不存储元数据,因此不能支持某些高级特性,比如快照和压缩等。格式简单,容易转换为其他格式;需要文件系统的支持才能支持sparse file。
qcow2:相对于raw来讲,性能较低。但是特点就是支持压缩、快照、克隆。
2)qcow2盘的支持的磁盘类型
实盘:分配所有磁盘空间并置零,预分配后的虚拟磁盘属于厚盘
稀疏盘:与实盘相反
差异盘:允许以一个虚拟机磁盘为底盘,可节省空间,但相应的I/O性能下降
3)操作
创建一个20G的qcow2的磁盘文件:
qemu-img create -f qcow2 /kvmdir/vmdir/vm01.qcow2 20G
创建一个20G的raw的磁盘文件:
qemu-img create -f raw /kvmdir/vmdir/vm02.raw 20G
将raw格式的磁盘文件转换为qcow2格式:
qemu-img convert -f raw -O qcow2 /kvmdir/vmdir/vm02.raw /kvmdir/vmdir/vm02.qcow2
基于vm01.qcow2创建一个差异盘:
create -f qcow2 -o backing_file=/kvmdir/vmdir/vm01.qcow2 /kvmdir/vmdir/vm03.qcow2
4)通过差异盘创建虚拟机
qemu-img create -f qcow2 -o backing_file=/kvmdir/vmdir/vm_centos7.qcow2 /kvmdir/vmdir/from_vm_centos7.qcow2
cd /etc/libvirt/qemu/
cp vm_centos7.xml from_vm_centos7.xml
vim from_vm_centos7.xml 主机名和UUID一定要修改
virsh define from_vm_centos7.xml
virsh list --all
3.6、KVM文件管理
该部分是通过不开启虚拟机的情况下,通过libguestfs-tools对虚拟机的文件进行操作
3.7、KVM虚拟机添加硬盘
1)创建一块新硬盘
qemu-img create -f qcow2 /home/kvm/centos7-add.qcow2 2G
2)查看新创建的硬盘信息
qemu-img info /home/kvm/centos7-add.qcow2
3)为虚拟机添加硬盘
virsh attach-disk centos7_kvm /home/kvm/centos7-add.qcow2 vdb --live --cache=none --subdriver=qcow2
说明:attach-disk 附加磁盘设备
vdb 第二块硬盘
--live 热添加
--sudbriver 驱动类型
detach-disk 分离磁盘设备 这是分离
4)格式化磁盘(在虚拟机里操作)
mkfs.xfs /dev/vdb
挂载后就可以使用了
https://blog.csdn.net/qq_29113041/article/details/79412016