虚拟化

六月ゝ 毕业季﹏ 提交于 2021-01-30 05:51:21

1、了解虚拟化 
2、常见虚拟化软件 
3、虚拟化架构
4、kvm介绍
5、Centos7上安装KVM
6、配置网卡
7、创建虚拟机安装CentOS7
8、虚拟机管理
9、克隆虚拟机
10、快照管理
11、磁盘格式
12、磁盘扩容(raw)
13、磁盘扩容(qcow2)
14、调整cpu内存和网卡
15、迁移虚拟机

 

一、了解虚拟化

VMware Workstation就是虚拟化
虚拟化简单讲,就是把一台物理计算机虚拟成多台逻辑计算机,每个逻辑计算机里面可以运行不同的操作系统,相互不受影响,这样就可以充分利用硬件资源
关键词Hypervisor(VMM) ---> 虚拟机管理器,用来管理逻辑计算机的
虚拟化技术分为全虚拟化和半虚拟化
早期的CPU硬件不支持虚拟化,虚拟机上虚拟化出来的操作系统(guestos)要想使用cpu资源,需要通过VMM来翻译指令,这个过程比较耗费资源,这种虚拟化技术叫做全虚拟化(VMware Workstation)
半虚拟化技术通过修改guestos内核,让guestos可以直接使用CPU资源,而不需要翻译指令了,从而节省了资源,但修改内核比较鸡肋(XEN使用半虚拟化)
后续cpu厂商直接支持虚拟化,不需要通过VMM翻译指令了,无所谓半虚拟化和全虚拟化
全虚拟化和半虚拟化的区别,参考 http://www.cnblogs.com/xusongwei/archive/2012/07/30/2615592.html  
http://itoedr.lofter.com/post/1472ba_69c62fa

二、常见虚拟化软件

VMware系列:
VMware workstation、VMware vsphere(VMware esxi)、VMware Fusion(Mac) 
Xen 开源 半虚拟化
XenServer 商业,厂商Ctirx,基于Xen的
KVM 开源 基于linux内核模块
Hyper-V 商业,厂商微软
Openvz 开源  基于linux 虚拟机和宿主机共用一个内核   #必须要宿主机和guestos使用同一个内核
VirtualBox 开源  Sun公司开发  Oracle收购Sun
http://developer.huawei.com/ict/forum/thread-23385-1-1.html

三、虚拟化架构

 参考 http://developer.huawei.com/ict/forum/thread-23385-1-1.html

四、kvm介绍

KVM是以色列初创公司Qumranet开发,2008年9月RedHat公司收购了Qumranet
KVM是Linux内核的一个模块,它把Linux内核变成了一个Hypervisor(管理程序)
KVM是完全开源的,RedHat基于KVM的虚拟化解决方案叫做RHEV(收费)
KVM在Linux操作系统里面以进程的形式出现,由标准的Linux调度程序进行调度,这使得KVM能够使用Linux内核的已有功能
只有一个KVM内核模块还不能实现虚拟化的全部功能,就好比操作系统只有内核还不能成为一个完整的操作系统一样
QEMU是一个开源的虚拟化软件,纯软件,可以虚拟化所有的硬件,性能不强
KVM基于QEMU开发了一个能够运行在用户空间的工具QEMU-KVM;操作系统分为内核空间和用户空间,两个空间是相互隔离的
磁盘、网络设备等都是通过QEMU-KVM这个工具模拟出来的
KVM和QEMU-KVM通信是通过/dev/kvm实现的
libvirt是用来管理KVM虚拟机的API,其命令为virsh
KVM可以动态调整内存和cpu,不需要重启,配置文件需要事先定义好最大的内存和cpu数量

KVM架构图、从下往上看

五、Centos7上安装KVM

前提是CPU支持虚拟化
虚拟机设置内存2G,增加一个50G的虚拟磁盘,处理器2核,处理器中的虚拟化引擎两个虚拟化相关的选项打上对勾

关闭iptables或者firewalld
    systemctl stop firewalld
    systemctl stop iptables
取消开机启动:
    systemctl disable firewalld
    systemctl disable iptables
关闭selinux   , 查看状态:    getenforce     
    setenforce 0

检查cpu参数是否支持虚拟化:

grep -Ei 'vmx|svm' /proc/cpuinfo   vmx是英特尔的cpu,svm是AMD的cpu,出现关键字代表支持虚拟化

把新增的硬盘格式化并挂载,挂载到/kvm_data:

mkfs.ext4 /dev/sdb  挂载成ext4格式
mkdir /kvm_data
mount /dev/sdb /kvm_data/

vim /etc/fstab 编辑配置文件,开机时直接挂载硬盘

安装kvm:

yum install -y virt-* libvirt bridge-utils qemu-img

六、配置网卡

创建桥接网卡:
配置网卡,增加桥接网卡,使用桥接模式的话,需要虚拟一个桥接网卡出来,用来提供虚拟机和物理机之间连接的

设置一个br0网卡,TYPE为Bridge,IP地址设置为ens33的ip

cd /etc/sysconfig/network-scripts/
cp ifcfg-ens33 ifcfg-br0

ens33配置文件里把IP地址去掉,增加BRIDGE=br0(桥接到br0)

vim ifcfg-ens33

重启网卡 :  /etc/init.d/network restart

检查KVM模块是否加载

lsmod | grep kvm

启动libvirtd服务:

systemctl start libvirtd

brctl show

brctl show可以看到两个网卡br0(桥接网卡)和virbr0(libvirtd服务启动起来的桥接网卡),决定网卡所属类型,取决于目标桥接网卡是哪一个,如果是br0就是桥接模式,virbr0就是NAT模式

七、创建虚拟机安装CentOS7

iso文件可以先在本地下载完成,使用xftp上传到服务器

使用命令行安装centos7:

virt-install --name=tobe02 --memory=512,maxmemory=1024 --vcpus=1,maxvcpus=2 --os-type=linux --os-variant=rhel7 --location=/tmp/CentOS-7-x86_64-DVD-1810.iso --disk path=/kvm_data/tobe02.img,size=10 --bridge=br0 --graphics=none --console=pty,target_type=serial  --extra-args="console=tty0 console=ttyS0"
name 虚拟机名字
memory内存大小
maxmemory最大内存,可以在线调整,不需要关机也可以调整
vcpus 数量
maxvcpus 最大cup数量2
os-type  操作系统类型
os-variant   具体版本rhel7,即centos7
location 指定iso镜像文件所在路径,注意镜像名字
disk path  虚拟硬盘所在路径,名字,大小
bridge  桥接网卡名字
graphics  是否开启图形
console和extra-args  定义终端相关属性

开始安装,选择页面

1、设置语言
2、时区
3、安装源
4、软件选择
5、目的地
6、Kdump可以不用设置
7、网络配置,不用设置
8、root密码,需要设置
9、创建用户

输入要进行设置的序号->回车

按回车后,输入语言前面的序号,在回车进行选择,下面选中文简体,设置完成后,对应的序号前面变成'x'

选择第5个Installation Destination

安装提示选择磁盘,选择完成按c继续

下面选择使用所有空间

然后输入1选择标准模板,按c继续

都设置完成后,选择b,会进行下面的安装和分区

安装完虚拟机需要重启,要退出虚拟机使用快捷键ctrl ]

/kvm_data/tobe02.img  tobe02.img就是第一个虚拟机的虚拟磁盘

八、虚拟机管理

要退出虚拟机使用快捷键ctrl ]

ps aux |grep kvm //查看kvm进程
virsh list //查看虚拟机列表,只能看到运行的虚拟机
virsh list --all //查看虚拟机列表,包括未运行的虚拟机

virsh shutdown tobe02 //关闭虚拟机

virsh start tobe02 //开启虚拟机

virsh console tobe02//进入指定虚拟机

出现红框中的提示,按回车,才会出现用户名输入提示

此时还无法连接外网
使用dhclient eth0 自动获取ip地址,可以连接外网,ip地址是和物理机同一个网段的

此时这个ip是自动获取的,开机启动,固定这个ip需要设置静态ip

查看内存、cpu、硬盘的信息:

free -m
cat /proc/cpuinfo
df -h

virsh undefine tobe02//彻底销毁虚拟机,会删除虚拟机配置文件,但不会删除虚拟磁盘文件,virsh list --all就看不到了
ls /etc/libvirt/qemu/  //可以查看虚拟机配置文件,xml格式的

virsh destroy tobe02//类似stop,这个是强制停止、关机,有可能丢失数据
virsh autostart tobe02//宿主机开机该虚拟机也开机
virsh autostart --disable tobe02//解除开机启动
virsh suspend tobe02//挂起
virsh resume tobe02//恢复

九、克隆虚拟机

virsh shutdown tobe02  克隆前先关机
virt-clone --original tobe02 --name tobe03 --file /kvm_data/tobe03.img   克隆出来的机器叫tobe003
--original指定克隆源虚拟机
--name指定克隆后的虚拟机名字
--file指定目标虚拟机的虚拟磁盘文件

如果tobe02虚拟机开机状态,则提示先关闭或者暂停虚拟机

ls /etc/libvirt/qemu  tobe03的磁盘文件

克隆完成使用 dhclient eth0   获取ip

虚拟机运行的状态下,使用快捷键ctrl ]退出,在宿主机使用ssh连接即可

十、快照管理

宿主机上操作

raw格式的虚拟磁盘不支持做快照,qcow2(虚拟磁盘的格式)支持

创建快照 :

virsh snapshot-create tobe02

qemu-img info /kvm_data/tobe02.img     //tobe02.img信息,同时会查看到快照列表

启动状态的虚拟机属主属组为qemu

virsh snapshot-list tobe02 //列出tobe02的所有快照

virsh snapshot-current tobe02//查看当前快照版本

ls /var/lib/libvirt/qemu/snapshot/tobe02//查看所有快照配置文件,每一个快照有一个配置文件
virsh snapshot-revert tobe02 1566551393//恢复指定快照,使用虚拟机名字和快照TAG
virsh snapshot-delete tobe02 1566551393//删除指定的快照

十一、磁盘格式

默认使用qcow2
虚拟磁盘常用格式raw、qcow2

qemu-img info /kvm_data/tobe02.img//查看虚拟磁盘格式
qemu-img create -f raw /kvm_data/tobe02_2.img 2G        //创建2G的raw格式磁盘,-f指定格式

把raw格式的磁盘转换为qcow2格式:

qemu-img convert -O qcow2 /kvm_data/tobe02_2.img /kvm_data/tobe02_2.qcow2          #-O指定目标格式是什么,左边是源文件,右边是目标文件,转换完成后,源文件不变,会生成一个新的qcow2格式的文件

转换后用ls -lh查看磁盘文件的大小,可以看到qcow2文件比较小,raw文件大小和我们指定空间大小一样是2G

raw格式的磁盘性能比qcow2要好,但是raw格式的磁盘无法做快照

给tobe02转换为raw格式的磁盘:

qemu-img convert -O raw /kvm_data/tobe02.img /kvm_data/tobe02_3.raw

转换完成后,修改配置文件

先关机:    virsh shutdown tobe02

virsh edit tobe02    //更改配置文件,建议使用此方法修改,会检查语法,更改格式和文件路径,改为转换后的磁盘格式
         <driver name='qemu' type='raw'/>
         <source file='/kvm_data/tobe02_3.raw'/>

virsh start tobe02     开启虚拟机,此时启动tobe02使用的已经是tobe02_3.raw磁盘文件,已经切换成功

十二、磁盘扩容 – raw格式

qemu-img resize /kvm_data/tobe02_3.raw +2G            给对应的磁盘加2G
qemu-img info /kvm_data/tobe02_3.raw       查看磁盘信息

此时的容量还没有生效,需要在宿主机上重启虚拟机才可以:

virsh destroy tobe02
virsh start tobe02
virsh console tobe02
fdisk -l 查看磁盘情况,并分新的分区

如何充分利用这2G空间:

fdisk /dev/vda    重新分区->建立新的分区(有2个G的空余空间)

/dev/vda4   这个新分区的空间是2G

除了对已有磁盘扩容外,还可以额外增加磁盘:

qemu-img create -f raw /kvm_data/tobe02_2.raw 5G    创建5G的raw格式磁盘

virsh edit tobe02     //增加<disk>…</disk>,注意更改source、target、slot(要保证和上面的还有下面的不重复)

编辑完成后:    
virsh destroy tobe02  或者     virsh shutdown tobe02

virsh start tobe02

virsh console tobe02        进入tobe02后

fdisk -l  可以看到新增加的5G的磁盘,可以在进行分区,格式化和挂载,可以实现扩容

十三、磁盘扩容 – qcow2格式

qemu-img resize /kvm_data/tobe02.img +2G        如果存在快照,在增加磁盘空间时会报错,需要删除快照

给tobe03增加空间:

qemu-img resize /kvm_data/tobe03.img +2G
qemu-img info /kvm_data/tobe03.img



virsh destroy tobe03
virsh start tobe03
virsh console tobe03
fdisk -l 查看磁盘情况,并分新的分区

除了对已有磁盘扩容外,还可以额外增加磁盘: 方法和raw格式相同

qemu-img create -f qcow2 /kvm_data/tobe03_2.img 5G
virsh edit tobe03 //增加<disk>…</disk>,注意更改source、target、slot
virsh destroy tobe03
virsh start tobe03

十四、调整cpu、内存、网卡

virsh dominfo tobe02     //查看配置

virsh edit tobe02    //更改如下部分内容,更改内存和cpu

<memory unit='KiB'>1048576</memory>
 <currentMemory unit='KiB'>624288</currentMemory>
 <vcpu placement='static' current='2'>2</vcpu>


virsh shutdown tobe02
virsh start tobe02

 virsh dominfo tobe02   此时cpu变为2,但是使用内存实际是没有用这么多的,需要进入虚拟机查看

更改前的内存大小:

virsh console tobe02  进入虚拟机

更改后的内存大小,存在一定误差:

KVM可以动态调整内存和cpu,不需要重启,配置文件需要事先定义好最大的内存和cpu数量

virsh setmem tobe02 800m    //动态调整内存,内存可以减小

virsh setvcpus tobe02 2 //动态调整cpu数量,只能增加cpu数量,无法减小

动态调整后,配置文件中是不会更改的,重启后还会加载配置文件中的配置

需要把配置写入到配置文件里,重定向过去

virsh dumpxml tobe02 > /etc/libvirt/qemu/tobe02.xml   

virsh edit tobe02 使用此命令查看还是维持在之前的状态,因为它存储在内存里,在内存里调用配置文件,此时需要重启libvirtd服务,会重新加载/etc/libvirt/qemu/tobe02.xml配置文件,最简单的方法就是直接把配置文件更改即可

systemctl restart libvirtd   重启后变更

virsh domiflist tobe02    //查看网卡

virsh attach-interface tobe02 --type bridge --source virbr0//增加一块新的网卡,并设置为nat网络模式(virbr0类似vmware的vmnet8),这里如果写--source br0,则网络模式为桥接,source指定桥接到哪块网卡上

配置生效:

virsh dumpxml tobe02 > /etc/libvirt/qemu/tobe02.xml    //需要把配置写入到配置文件里,需要重启libvirtd服务,重新加载配置文件

virsh console tobe02  进入虚拟机

此处的nat网段和宿主机的virbr0是一个网段的

 

十五、迁移虚拟机

从一台机器,迁移到另一台机器,需要都按照KVM

该方式要确保虚拟机是关机状态

virsh shutdown tobe02

virsh dumpxml tobe02 > /etc/libvirt/qemu/tobe01.xml     //如果是远程机器,需要把该配置文件拷贝到远程机器上,此处在本机操作

查看虚拟机磁盘所在目录:

virsh domblklist tobe02

rsync -av /kvm_data/tobe02.img  /kvm_data/tobe01.img      //如果是迁移到远程,则需要把该磁盘文件拷贝到远程机器上,这里是迁移到本机
vim /etc/libvirt/qemu/tobe01.xml      //因为是迁移到本机,配置文件用的是tobe02子机的配置,不改会有冲突,所以需要修改该文件,如果是远程机器不用修改
    修改名称:   <name>tobe01</name>
    修改 uuid(随便改一下数字,位数不要变)
    修改磁盘路径
virsh define /etc/libvirt/qemu/tobe01.xml     //定义新虚拟机,虚拟机由配置文件所定义
virsh list --all       //会发现新迁移的tobe01子机,进入新的虚拟机后,需要配置网络及其他设置

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!