1、详解虚拟化,KVM
虚拟化:
在计算机技术中,虚拟化(Virtualization)是⼀种资源管理技术,是将计算机的各种实体资源(CPU、内存、磁盘空间、⽹络适配器等),予以抽象、转换后呈现出来并可供分割、组合为⼀个或多个计算机配置环境,并重新分割、重新组合,以达到最⼤化合理利⽤物理资源的⽬的。
虚拟化可以提⾼ IT 敏捷性、灵活性和可扩展性,同时⼤幅节约成本,实现更⾼的⼯作负载移动性、更⾼的性能和资源可⽤性、⾃动化运维 - 这些都是虚拟化的优势,虚拟化技术可以使 IT 部⻔更轻松地进⾏管理以及降低拥有成本和运维成本。其他优势包括:
虚拟化技术分类:
模拟器:
在一个host之上通过虚拟化模拟器软件,模拟出一个硬件或者多个硬件环境,每个环境都是一个独立的虚拟机,CPU、IO、内存等都是模拟出来的,可以在宿主机模拟出不同于当前物理机CPU指令集的虚拟机,比如可以在Windows 模拟出mac OS、unix系统,比较出名的模拟器有:pearpc、QEMU、Bochs。
全虚拟机化 full virtualization / 准虚拟化 native virtualization:
全虚拟化/准虚拟化不做CPU和内存模拟,只对CPU和内存做相应的分配等操作,全虚拟化需要物理硬件的支持,比如需要CPU必须支持并且打开虚拟化功能,例如Intel 的 Intel VT-X/EPT,AMD的AMD-V/RVI,以在CPU 层面支持虚拟化功能和内存虚拟化技术,因此完全虚拟化也是基于硬件辅助的虚拟化技术。
全虚拟化软件(硬件辅助全虚拟化):
vmware workstation
#https://www.vmware.com/cn/products/workstation-pro.html
vmware esxi
paralles desktop
KVM
Microsoft Hyper-V
VirtualBox
KVM 是硬件辅助的虚拟化技术,主要负责 比较繁琐的 CPU 和内存虚拟化,而 Qemu 则负责 I/O 虚拟化,两者合作各自发挥自身的优势
半虚拟化 para virtualization:
半虚拟化要求guest OS 的内核是知道自己运行在虚拟化环境当中的,因此guest OS的系统架构必须和宿主机的系统架构相同,并且要求对guest OS的内核做相应的修改,因此半虚拟化只支持开源内核的系统,不支持闭源的系统,比较常⻅的半虚拟化就是早期版本的XEN,但是Xen 从其3.0 版本开始,可以支持利用硬件虚拟化技术的支持(http://wwwarchive.xenproject.org/files/xen_3.0_datasheet.pdf),实现了完全虚拟化,可以在其平台上不加修改的直接运行如Linux/Windows 等系列的操作系统,使得系统具备了更好的兼容性。
半虚拟化软件:
Xen
Domain 0:
Domain 0 是一个修改过的 Linux kernel,是唯一运行在 Xen Hypervisor 之上的虚拟机,它拥有访问物理 I/O 资源的权限,同时和系统上运行的其他虚拟机进行交互。Domain 0 需要在其它 Domain 启动之前启动。
Domain U:
运行在 Xen Hypervisor 上的所有半虚拟化(paravirtualized)虚拟机被称为"Domain U PV Guests",其上运行着被修改过内核的操作系统,如Linux、Solaris、FreeBSD 等其它 UNIX 操作系统。所有的全虚拟化虚拟机被称为“Domain U HVM Guests”,其上运行着不用修改内核的操作系统,如 Windows 等。
Hypervisor类型:
Hypervisor是一种运行在基础物理服务器和操作系统之间的中间软件层,其可以允许多个操作系统和应用共享底层的内存、CPU、磁盘等物理硬件,也可叫做VMM( virtual machine monitor ),即虚拟机监视器。
Hypervisor是所有虚拟化技术的核心,非中断地支持多工作负载迁移的能力是Hypervisor的基本功能,当服务器启动并执行Hypervisor时,它会给每一台虚拟机分配适量的内存、CPU、网络和磁盘,并加载所有虚拟机的客户操作系统。
直接运行到物理机:
vmware esxi
rhev hypervisor
需要运行到操作系统:
KVM,XEN
vmware workstation
paralles desktop
Microsoft Hyper-V
VirtualBox
常见的hypervisor类型:
类型I-裸机型:直接运行在硬件设备上的,这种架构搭建的虚拟化环境称为裸机虚拟化环境(Bare-Metal Hardware Virtualization),比如:VMware ESXI、KVM
类型II-主机托管型,运行在具有虚拟化功能的操作系统上的,构建的是主机虚拟化环境(Hosted Virtualization),比如:VMware Workstation、VirtualBox
#Redhat将KVM划分到类型I即裸机型:
https://www.redhat.com/zh/topics/virtualization/what-is-KVM
2、使用KVM创建nat和bridge网络虚拟机
nat网络虚拟机
上传镜像并安装Centos 7.X虚拟机:
[root@localhost ~]# ll /data/ISOs/CentOS-7.iso
-rw-r--r-- 1 qemu qemu 4649385984 Dec 15 10:53 /data/ISOs/CentOS-7.iso
#创建qcow2格式磁盘
[root@localhost ~]# qemu-img create -f qcow2 /var/lib/libvirt/images/centos.qcow2 10G
# 创建默认网络虚拟机
virt-install --virt-type kvm --name centos7 \
--ram 1024 \
--vcpus 2 \
--cdrom=/data/ISOs/CentOS-7.iso \
--disk path=/var/lib/libvirt/images/centos.qcow2 \
--network network=default \
--graphics vnc,listen=0.0.0.0 \
--noautoconsole
# --ram 等同于 --memory
# 打开manager安装
[root@localhost ~]# virt-manager
双击刚创建的虚拟机,开始安装。
bridge网络虚拟机
创建br0桥接网卡:
[root@localhost network-scripts]# pwd
/etc/sysconfig/network-scripts
[root@localhost network-scripts]# cat ifcfg-br0
TYPE=Bridge
BOOTPROTO=static
NAME=br0
DEVICE=br0
ONBOOT=yes
IPADDR=192.168.206.201
NETMASK=255.255.255.0
GATEWAY=192.168.206.2
DNS1=114.114.114.114
DNS2=223.5.5.5
[root@localhost network-scripts]# cat ifcfg-eth0
TYPE=Ethernet
BOOTPROTO=none
NAME=eth0
DEVICE=eth0
ONBOOT=yes
BRIDGE=br0
systemctl restart network
上传镜像并安装虚拟机:
[root@localhost ~]# ll /data/ISOs/CentOS-7.iso
-rw-r--r-- 1 qemu qemu 4649385984 Dec 15 10:53 /data/ISOs/CentOS-7.iso
#创建系统磁盘:
# qemu-img create -f qcow2 /var/lib/libvirt/images/centos7-bridge.qcow2 10G
Formatting '/var/lib/libvirt/images/centos7-bridge.qcow2',fmt=qcow2 size=10737418240 cluster_size=65536 lazy_refcounts=off refcount_bi ts=16
#创建基于桥接网络的虚拟机
# virt-install \
--virt-type kvm \
--name centos7-bridge \
--ram 1024 \
--vcpus 2 \
--cdrom=/data/ISOs/CentOS-7.iso \
--disk path=/var/lib/libvirt/images/centos7-bridge.qcow2 \
--network bridge=br0 \
--graphics vnc,listen=0.0.0.0 \
--noautoconsole
# 注意: bridge和nat的区别是--network 参数
# 打开manager安装
[root@localhost ~]# virt-manager
3、使用KVM创建windows10虚拟机
创建镜像
cd /var/lib/libvirt/images/
qemu-img create -f qcow2 win10.qcow2 60G
下载virtio驱动
https://fedorapeople.org/groups/virt/virtio-win/
创建基于桥接网络的win10
virt-install \
--virt-type kvm \
--name Win10 \
--memory 2048 \
--vcpus=2 \
--os-type=windows \
--cdrom=/data/ISOs/win10.iso \
--disk path=/var/lib/libvirt/images/win10.qcow2,format=qcow2,bus=virtio \
--disk path=/data/ISOs/virtio-win-0.1.190.iso,device=cdrom \
--network bridge=br0,model=virtio \
--graphics vnc,listen=0.0.0.0 \
--noautoconsole
# --disk path=/data/ISOs/virtio-win-0.1.190.iso,device=cdrom 这个指向virtio的驱动,如果是软驱device=floppy.
打开virt-manager继续以下的操作
以后的操作跟在真机操作没有区别了
4、如何快速创建虚拟机
快速创建虚拟机有两种方式
第一:复制已经按照完成的虚拟机image文件,创建新虚拟机时,指定成刚才复制的。
cd /var/lib/libvirt/images
cp centos7-bridge.qcow2 centos72-bridge.qcow2
virt-install \
--virt-type kvm \
--name centos72-bridge \ # 名字不能重复,这里需要改
--ram 1024 \
--vcpus 2 \
--cdrom=/data/ISOs/CentOS-7.iso \
--disk path=/var/lib/libvirt/images/centos72-bridge.qcow2 \ # 这里指定复制后的文件名
--network bridge=br0 \
--graphics vnc,listen=0.0.0.0 \
--noautoconsole
virt-manager
看到此界面,直接重启就好
第二种方法:把已经按照好的虚拟机当模版,用virt-manager克隆
稍等片刻,虚拟机克隆完成
5、将vmvare虚拟机迁移到KVM环境。
找到vmware的磁盘文件
上传此文件到kvm服务器/var/lib/libvirt/images/
执行格式转换
qemu-img convert -f vmdk -O qcow2 /root/centos.vmdk centos7.qcow2
qemu-img convert -O qcow2 /root/centos.vmdk centos7.qcow2
# -f 源文件格式
# -O 输出文件格式
# /root/centos.vmdk 源文件路径加名字,只写名字会在当前目录查找
# centos7.qcow2 输出文件路径加名字,只有名字会在当前目录生成
# 经过测试 -f 参数可省略
kvm导入虚拟机
打开vitr-manager
选择刚才转换过的磁盘文件
正常启动即可