目录

什么是kvm

云计算的定义

云计算的服务类型

虚拟化技术定义

虚拟化的两种方式

kvm虚拟化的原理

kvm虚拟化网络解析

kvm存储池

1、图形的方式去创建使用存储池编辑 编辑

2、命令的方式去创建使用存储池

 存储池相关管理命令

kvm快照和克隆

1、用图形方式做快照

  恢复快照

2、用命令行去做快照

kvm虚拟机基本管理和网络管理

kvm基本管理

kvm网络管理

NAT和桥接的区别:

创建NAT网络 

1、用图形的方式创建

2、用脚本的方式去创建网络

3、创建隔离网络

4、用脚本去创建隔离网络

5、创建桥接网络 


kvm里主要去介绍它的虚拟化技术,包括云计算的组成和云计算的背景。

kvm的运行原理,虚拟机的创建,虚拟机的生命周期管理。

什么是kvm

虚拟化,即为在一物理机上,同时运行多个独立的操作系统。由 hypervisor (虚拟机管理程序) 创建一抽象层以完成对硬件的控制与分离,并为 guest (客户机) 提供对硬件的访问途径。

KVM 即为 Kernel-based Virtual Machine 的缩写,是一种 Linux 完全虚拟化的解决方案,并借由处理器硬件的特性,为客户机提供底层的实体抽象,以至于使客户机并不知自己身处虚拟化的环境中。

云计算的定义

它不是一种技术,它是一种收费模式,就是通过互联网把一些主机的硬件(cpu、内存、磁盘、网络)这些硬件把它们都统一的组合在一起,通过编码进行组合,组合到一起之后去售卖给用户,用户如果有需要用到cpu、内存、磁盘、网络这些需求的时候,直接去我们的云平台上面进行购买,让其他任务在上面运行,随用随销,用完了之后就直接可以抛弃掉这部分资源,让云平台回收回去,只需要在计算的一个时间段的那些资源进行付费就可以了,这种方式我们称为云计算,它可以极大的提高物理硬件的利用率,同样也能方便用户对它们的计算任务,去进行集中性的计算,而且资源不会得到浪费。

云计算的服务类型

云服务是指由第三方提供商托管的基础架构、平台或软件,可通过互联网提供给用户。"即服务型"解决方案主要有 3 种类型:IaaS、PaaS 和 SaaS。每种解决方案都能促进用户数据从前端客户端通过互联网流向云服务提供商的系统,或是反向流动,但具体情况会因服务内容而异。

虚拟化技术定义

通过操作系统里面内置好一个功能或者软件,将我们的物理资源逻辑上进行划分,划分成不同的来自相同源地址的物理硬件,划分成不同的逻辑单元,它们里面的cpu、内存、磁盘、网络、鼠标、键盘都有,把这些资源给它进行逻辑上的划分,功能上的划分,划分之后再提供给另外一个客户机的操作系统,就相当于在自己的操作系统上构建出了一个虚拟机。

kvm vms 快照 kvm快照原理_NAT

 在这些性能过剩的软件之上我们去安装一个软件,叫虚拟化操作槽,称之为VMN,将底下的硬件逻辑上划分为虚拟硬件,在提供给客户机操作系统,客户机操作系统之上再去运行我们想运行的app。也就是说应用业务,软件,服务都可以运行。节约系统性能,合理的去利用物理机上性能过剩的硬件。

虚拟化是建立在操作系统之上的,也就是说物理硬件所安装的操作系统之上我们还要安装一个VMM层,虚拟化软件层,利用软件的形式去支持虚拟化,提供给上方的进程虚拟机,进行资源的合理利用。

虚拟化的两种方式

最理想的虚拟化两个目标如下:

  • 客户机完全不知道自己运行在虚拟化环境中,还以为自己运行在原生环境里。
  • 完全不需要VMM介入客户机的运行过程。

半虚拟化:

通过软件的方式在操作系统之上控制我们的虚拟机的运行

全虚拟化:

采用硬件(intel VT-x、VT-d)在硬件上编码支持虚拟化,它能达到的性能比软件层达的高,不需要操作系统进行相应的介入,只需要去安装一个工具,在操作系统之上能将底层的一些cpu、内存、磁盘进行合理的逻辑上的划分就可以了,完全实现一个虚拟化。

支持虚拟化的硬件进行沟通,这时候理论上所能达到的虚拟化效率是98%的,几乎只有2%的损耗,所以全虚拟化是重中之重的。

计算任务主要是透过kvm,去管理一些虚拟的cpu、磁盘,还是通过全虚拟化去进行的。

kvm是一种虚拟化技术,配合QEMU这个工具可以配合我们在一个宿主机中创建虚拟机的请求,kvm也是采用全虚拟化的解决方案去实现的虚拟化。

kvm虚拟化的原理

kvm vms 快照 kvm快照原理_虚拟化_02

 运行在操作系统之上的一些进程都是通过我们的操作系统与内核里面的一些模块进行沟通,linux内核里的模块与底层的硬件进行沟通,以此完成计算任务的发布与完成。

在kvm里面它的完成效果是在虚拟出来的kvm虚拟机由安装在虚拟主机的应用像,虚拟cpu向操作系统里面的内核的kvm模块发起计算请求,kvm模块通过一些驱动,调用我们底层的硬件,cpu,内存,以此完成计算任务之后再返回给cpu,然后由虚拟cpu再返回给上层的应用,它的数据流向是这样的,虚拟cpu、内存、磁盘分别是由qemu硬件虚拟化器创建出来的虚拟硬件,创建出来之后会被绑定到一个进程里面作为进程资源,进程里面每一个cpu都是一个线程,以此完成虚拟机里面的计算任务,在进程资源里面还包含着一些内存,磁盘,网络的io设备,同样它也属于进程资源里面所使用虚拟硬件安装的操作系统去使用的。如果放眼到宿主机中去看,就可以把kvm虚拟机看成一个进程,进程运行在我们的系统上,进程想要去调用底层的cpu就是这个进程去联系系统中的内核去调用底层的内存cpu。

可以把kvm虚拟机看做操作系统/宿主机操作系统里的一个进程,这个进程比较特殊,这个进程里面是一个操作系统而且是完全封闭的一个操作系统。

原理:在一个进程里面去加载虚拟的硬件,虚拟硬件之上安装操作系统,操作系统之上安装一些n机,redis,slb等等应用。

kvm虚拟机向下调用硬件,物理,cpu,网络,磁盘的时候都是以一个进程的身份向linux内核中的kvm模块发起计算请求,kvm模块去控制计算的任务,放入到物理的cpu中进行计算,计算结果再返回给相应的物理机中的虚拟机,虚拟机里面的一个应用。

kvm vms 快照 kvm快照原理_虚拟化_03

kvm虚拟化网络解析

KVM中支持三种网络模式,分别为NAT模式、bridge桥接模式、host-only仅主机模式:NAT模式通常用来在个人虚拟化桌面中应用广泛,桥接模式在服务器虚拟化使用广泛,host-only一般在超级大的服务厂商内部使用。

NAT模式

kvm vms 快照 kvm快照原理_桥接_04

  宿主机作为centos的主机,在主机之上会创建出相应的虚拟机(kvm01)对外提供一个web server的服务器里面安装了一个nginx服务,网卡是ens33,在kvm环境部署的时候有个网卡叫virbr0,就是我们在宿主机中的一个nat网卡,主要起的作用就是地址的转换,相当于变种的防火墙,主要接收来自ens33的请求,或者是由kvm向外部(百度,新浪)发送一些数据请求,沿这条线再回来相应的响应,在kvm01中也会有自己的一张虚拟网卡(eth0),eth0会br0发送相应的一个请求,br0会将请求转发到ens33这张网卡中,ens33网卡会将请求转发到互联网的服务器中(百度),在这个过程中百度在解析到请求之后,会向你返回相应的响应,这个响应可以接收到的,因为我们触发的条件是kvm01作为源地址向外进行请求被br0,被ens33记录,响应回来的时候根据记录的源地址会进行不断的地址转换一直到eth0,eth0接收到响应的数据包之后在kvm01中通过osi七层模型进行相应的一个解封装过程,一直达到最高层的nginx那个地方去解析网页。这个就是在kvm里采用nat模式的数据流传过程。

值得一提的是nat模式这种网络可以出,不可以进的,对象是针对虚拟机而已,虚拟机的网络对外可以通,对内不通的。

如果是从互联网中,某一个用户去访问kvm01虚拟机的话,我们的源地址就是客户端的地址,目标地址就是kvm01的地址,client机器与kvm01并不在同一个网段中,ens33可以与client进行通信,一旦到virbr0的时候只有ens33这台机器的ip是被virbr0能转换到eth0身上的,原因在于virbr0设置的规则,

总结:nat模式可以出,访问外网,通过宿主机的ens33对外网进行访问,而如果从外网访问虚拟机的时候,虚拟机被接收请求的时候(client发出请求的时候)可以到达virbr0这个设备上,但是这个设备会拦截你向内进行访问,nat可以出,不可以进。

kvm vms 快照 kvm快照原理_虚拟化_05

桥接网络

宿主机中有虚拟机kvm01,kvm02,他们两个中分别有两张网卡,eth0,如果想用桥接的网络对外进行上网,宿主机的网卡ens33,外部会有百度服务器,想用通过ens33访问百度服务器,桥接网络在内部的访问状态,在内部会创建一张桥接网卡bridge0,eth0连接bridge0,两台虚拟机的eth0连接虚拟网卡,桥接网卡连接到ens33上对外进行服务,所创建的br0设备也在宿主机之上的,br0设备被当作是一个虚拟的交换机,ens33这张网卡也是接到了br0身上,通过br设备访问百度,与宿主机所在网段的交换机进行连接,并且从宿主机所在网段的dhcp获取相应的ip,bridge0相当于宿主机中的虚拟交换机,在虚拟交换机中连接着不同的虚拟机的网卡,包括宿主机的一张网卡,以此来完成桥接网络,

host-only仅主机模式

相当于在宿主机中创建了一个私有的网段:1.不对外进行通信,2只在该虚拟网段中进行通信。相当于自己创建出来了一个虚拟交换机,虚拟交换机与外部并没有任何的相连,仅在宿主机中进行相应的网络流转实现。在特别大的厂商才能看见(阿里,天翼)

kvm存储池

在vmware里面的虚拟机可以装在系统里的任何位置

在kvm只能装在存储池,存储池本质就是一个目录,KVM必须要配置一个目录当作他存储磁盘镜像(存储卷)的目录,我们称这个目录为存储池。

存储池是专门存储磁盘镜像文件,它有各种类型,最常见的就是目录。

只有在刚开始安装虚拟机的时候去定义一下存储池,一般情况下都使用默认存储池。如果存储池所在目录空间不够了,可以在定义一个其他的存储池,可以同时使用多个存储池的。

1.图形的方式去创建使用存储池

2.命令的方式去创建使用存储池

3生产环境存储池使用

用命令唯一的原因就是,因为它快,方便,能批量执行,当不需要批量执行还是图形快。

默认存储池

1、图形的方式去创建使用存储池

kvm vms 快照 kvm快照原理_云计算_06

kvm vms 快照 kvm快照原理_NAT_07

 centos7里面有4个标签,(centos8和9)有3个标签,存储池的名字叫default,对应的目录/var/lib/libvirt/images

 

kvm vms 快照 kvm快照原理_桥接_08

如果磁盘空间不够了,怎么扩容?

1.把虚拟机的镜像先挪出来,挂一个远程的存储挂载到这个目录下,再挪回去就扩容了

2.建立一个全新的存储池,建立的存储池放哪都行,然后挂一个远程存储

kvm vms 快照 kvm快照原理_虚拟化_09

 新建存储池,起一个名字,类型就默认的就行,路径放在其他地方,比如根下创建一个目录,叫teststorage。

kvm vms 快照 kvm快照原理_kvm vms 快照_10

创建好了,名字可以随便改,打了对勾就是开机自动启动。

kvm vms 快照 kvm快照原理_虚拟化_11

 这个存储池,创建虚拟机的时候就可以把磁盘镜像文件指定到这个位置,就可以用了。

平时想创建一个全新的卷,这个卷就是磁盘镜像文件。这里它是开的,相当于全新的硬盘。

kvm vms 快照 kvm快照原理_桥接_12

 

kvm vms 快照 kvm快照原理_kvm vms 快照_13

  删除卷 xx

kvm vms 快照 kvm快照原理_虚拟化_14

 停掉池,停了之后就变灰了。

kvm vms 快照 kvm快照原理_NAT_15

 删池,先停止,在删掉

kvm vms 快照 kvm快照原理_云计算_16

2、命令的方式去创建使用存储池

mkdir /testst1 先创建目录

virsh pool-define-as st2--type dir --target /testst1

pool池    define定义  as起个名   类型   对应的目录是/testst1   

kvm vms 快照 kvm快照原理_云计算_17

 现在只是定义了关系还没创建, 创建已经定义的池

virsh pool-build st2  

kvm vms 快照 kvm快照原理_桥接_18

 池创建完了,创建卷

virsh vol-create-as st2 vm16.qcow2 2G --format qcow2

qemu-img create -f qcow2 vm16.qcow2 2G

放在st2池里  叫vm16.qcow2   大小是2个G  格式是qcow2

kvm vms 快照 kvm快照原理_桥接_19

 之前创建好没有激活,现在给它激活

virsh pool-start st2

kvm vms 快照 kvm快照原理_虚拟化_20

virsh vol-create-as st2 vm16.qcow2 2G --format qcow2       再运行一遍 

kvm vms 快照 kvm快照原理_NAT_21

创建好了,就可以当做虚拟机的卷用了。

kvm vms 快照 kvm快照原理_云计算_22

 存储池相关管理命令

1、在存储池中删除虚拟机存储卷virsh vol-delete --pool st2 oeltest03.qcow2

2、取消激活存储池virsh pool-destroy st2

3、删除存储池定义的目录/data/vmfs virsh pool-delete st2

4、取消定义存储池virsh pool-undefine st2

3、生产环境存储池使用

一定要考虑它的扩容,如果是用的本地存储,尽量做lvm,带扩容的,存储池不够的时候可以扩容,或者是用之前给它挂载一个远程存储。将来在扩容的时候非常容易扩容。

kvm快照和克隆

因为我这儿没有raw格式的镜像,先把qcow2的转换成raw,放到我虚拟机里,就当做我原始的虚拟机了,实验里第一步应该是直接用raw的镜像,转换成qcow2的做快照再换回去,我现在没有raw的先转换

格式转换

qemu-img convert -f  qcow2 -0 raw vm12.qcow2 vm12.raw  把qcow2格式转换成raw叫vm12

convert转换    -f 现在的格式   -o目标       

kvm vms 快照 kvm快照原理_kvm vms 快照_23

 发现原来的镜像还是能用vm12.qcow2     vm12.raw就是新出来的镜像  但是里面的内容一样

vim /etc/libvirt/qemu/vm12.xml

kvm vms 快照 kvm快照原理_云计算_24

kvm vms 快照 kvm快照原理_kvm vms 快照_25

kvm vms 快照 kvm快照原理_NAT_26

 假如现在有很多数据,哪天让做快照保存一下现在的状态,万一有问题可以把快照恢复过来

1、用图形方式做快照

kvm vms 快照 kvm快照原理_云计算_27

 因为是raw所以做不了快照,用命令行会报错

先关机,因为要给它换磁盘,转换成qcow2格式,

kvm vms 快照 kvm快照原理_虚拟化_28

改配置文件 virsh define /etc/libvirt/qemu/vm12.xml

kvm vms 快照 kvm快照原理_NAT_29

开机

kvm vms 快照 kvm快照原理_kvm vms 快照_30

开完机之后就可以做快照了。

 做快照

kvm vms 快照 kvm快照原理_桥接_31

 

kvm vms 快照 kvm快照原理_kvm vms 快照_32

 

kvm vms 快照 kvm快照原理_NAT_33

  恢复快照

kvm vms 快照 kvm快照原理_NAT_34

 

kvm vms 快照 kvm快照原理_kvm vms 快照_35

2、用命令行去做快照

去看帮助

kvm vms 快照 kvm快照原理_虚拟化_36

凡是中括号的都是可选项

kvm vms 快照 kvm快照原理_NAT_37

kvm vms 快照 kvm快照原理_云计算_38

 生成了,去检验一下,刷新

kvm vms 快照 kvm快照原理_桥接_39

  恢复快照

可以用图形点,也可以用命令。

kvm vms 快照 kvm快照原理_云计算_40

去看它的帮助

kvm vms 快照 kvm快照原理_云计算_41

好了

kvm vms 快照 kvm快照原理_kvm vms 快照_42

 快照不是天天用, 快照什么时候用,比如公司一个月做一次快照,或者半个月,几个星期做一次,总不能手动去做,用命令,计划任务加快照,定期的做快照。

克隆

kvm vms 快照 kvm快照原理_云计算_43

是灰色的不能点,因为在开机状态不能克隆,

kvm vms 快照 kvm快照原理_NAT_44

没有链接克隆,默认就是完整克隆。这样就好了

命令克隆

virt-clone -o vm2 --auto-clone

kvm vms 快照 kvm快照原理_桥接_45

kvm虚拟机基本管理和网络管理

kvm基本管理

virsh是一个很大的命令,跟kvm对接的,只不过是命令行模式的。

如果里面的命令忘了怎么写,光一个dom开头的这么多,平时不怎么用的如果忘了,比如domiflist --help它单独的就是查看的这条命令的帮助。

kvm vms 快照 kvm快照原理_kvm vms 快照_46

kvm vms 快照 kvm快照原理_桥接_47

 

virsh list查看当前运行的虚拟机有哪些

virsh list --all查看所有的,虚拟机(包含关闭和开启)

  

kvm vms 快照 kvm快照原理_虚拟化_48

virsh start vm1 开机

virsh shutdown vm1 关机

virsh reboot vm1  重启虚拟机

virsh reset vm1  重置虚拟机

virsh suspend vm1  暂停虚拟机

virsh resume vm1 恢复虚拟机

virsh autostart vm1 随着libvirt服务的启动而启动的

virsh autostart --disable vm1      把 autostart的机器取消掉,加一个disable

virsh undefine vm1  删除虚拟机(它不会删除磁盘镜像文件)

virsh dumpxml vm1  直接查看虚拟机的配置文件(必须记住)

virsh dumpxml vm1 > /etc/libvirt/qemu/vm2.xml 将vm1虚拟机的配置文件保存至vm2.xml

virsh list --all --autostart 查看哪些机器是自动启动,哪些不是

kvm网络管理

kvm网络分类常见的有三种,kvm不止有这三种

桥接网络

Bridge

尽量别叫中文

NAT网络

Nat

network address transtation

隔离网络

Isolated

NAT和桥接的区别:

桥接使用的网段和物理机必须是同一个网段,不然不能用,NAT的网络,内网和物理机能上网的网络不是同一个网段。

如果细分的话,NAT和网络是属于网络,桥接是属于接口,因为在创建网络里面没有桥接的选项

kvm vms 快照 kvm快照原理_云计算_49

创建NAT网络 

1、用图形的方式创建

在centos8和9里面只能创建两种,桥接的不能创建了,7里面还能创建,但是不介意,容易出错。

kvm vms 快照 kvm快照原理_桥接_50

网段不能冲突,ipv6和dns域名不用管,点完成就好了

kvm vms 快照 kvm快照原理_kvm vms 快照_51

 

 如果要再创建一个网段就得改了,圆圈是dhcp的地址池也可以改

kvm vms 快照 kvm快照原理_虚拟化_52

 

kvm vms 快照 kvm快照原理_云计算_53

 

2、用脚本的方式去创建网络

cd /etc/libvirt/  

cd /qemu/

cd networks/  在这个里面创建,自己创建网络,只需要创建一个新的配置文件就行

默认有一个default,假装那些网络都没有,就有一个default,把default拷贝一下

kvm vms 快照 kvm快照原理_云计算_54

 拷贝完,打开配置把名字改一下,uuid,模式是nat,mac地址,网段改一下,dhcp的网段改一下

kvm vms 快照 kvm快照原理_云计算_55

kvm vms 快照 kvm快照原理_桥接_56

  :wq!  保存  让它生效

kvm vms 快照 kvm快照原理_虚拟化_57

 在kvm里的网络里面不管是什么网络设备都叫桥,bridge name   nat模式的都是vir开头,br0是第一个 br1是第二个只要不同名就行,数数就行。

kvm vms 快照 kvm快照原理_虚拟化_58

  

kvm vms 快照 kvm快照原理_虚拟化_59

 拿图形的去验证一下,多了一个nat2,但是没有激活

kvm vms 快照 kvm快照原理_kvm vms 快照_60

 

激活 

kvm vms 快照 kvm快照原理_虚拟化_61

 命令行激活 virsh net-start nat2

kvm vms 快照 kvm快照原理_kvm vms 快照_62

 开机启动,点上就开机启动 

kvm vms 快照 kvm快照原理_NAT_63

 

 命令开机启动,virsh --help | grep net 查看一下帮助

virsh net-autostart nat2

3、创建隔离网络

用图形创建隔离网络

网段要改不一样的

 

kvm vms 快照 kvm快照原理_kvm vms 快照_64

4、用脚本去创建隔离网络

拷贝default

去编辑它 vim isolated1.xml

 

kvm vms 快照 kvm快照原理_虚拟化_65

kvm vms 快照 kvm快照原理_桥接_66

  

kvm vms 快照 kvm快照原理_桥接_67

 forward mode='nat' 隔离和NAT就差这一行,删了就是隔离,加上就是NAT,

改名字,uuid,设备名字(只要不一样就行,不一定非要连着),mac地址,网段,

 

kvm vms 快照 kvm快照原理_云计算_68

 :wq!保存

virsh net-define isolated1.xml            发现多了一个

 

kvm vms 快照 kvm快照原理_桥接_69

 virsh net-start isolated1      发现不是灰色的了

kvm vms 快照 kvm快照原理_NAT_70

 

网络创建好了,现在和虚拟机还没有关系。

比如vm11,默认的是NAT1网络,他想要用NAT1的网络,需要去改网卡

kvm vms 快照 kvm快照原理_桥接_71

 改配置文件,这是虚拟机配置文件的一部分,网卡的配置 

kvm vms 快照 kvm快照原理_虚拟化_72

 

5、创建桥接网络 

桥接在公司用的不多,因为它占ip,还不大安全,NAT外网访问不到内网,安全。隔离在公司用的也用的不多。

做桥接,配置文件不是在kvm目录下,在自己宿主机网卡配置文件。

cd /etc/sysconfig/network-scripts/

 

kvm vms 快照 kvm快照原理_NAT_73

kvm vms 快照 kvm快照原理_虚拟化_74

 

 编辑成这样

kvm vms 快照 kvm快照原理_虚拟化_75

 

 把原来配置文件的IP地址去掉

vim ifcfg-ens33

kvm vms 快照 kvm快照原理_虚拟化_76

 

 改成这样

kvm vms 快照 kvm快照原理_NAT_77

我的物理网卡,桥到我做的那个桥接网卡,相当于两个网卡对在一起了,只不过ip地址原来设置在物理网卡,现在设置在桥接网卡上,其实两个网卡ip地址是通用的。

reboot

kvm vms 快照 kvm快照原理_云计算_78

最终结果ip能用,而且ip跑到了br0上。 

ip a     看br0有ip,ens33已经没有ip了   master是br0,说明它是桥到br0上的

kvm vms 快照 kvm快照原理_虚拟化_79

 做了这个之后,虚拟机就可以使用桥接的方式,和vmware不一样

kvm vms 快照 kvm快照原理_kvm vms 快照_80

 

 重启一下,选完桥,里面的ip地址还没有设置,要设置成和外网的ip是同一个ip

kvm vms 快照 kvm快照原理_云计算_81

 

dhcp自动获取了。这样就好了

怎么调回来,就比如这台机器现在是桥接模式,想改回来,就把配置文件删了,改成原来的样子,把ens33搞回来,重启系统,不重启会出问题,一定要重启。

【注意】做好网络,跟虚拟机还没关系,虚拟机想使用什么网络,要去调虚拟机的配置文件,虚拟机要设置自己的ip地址。

在vmware里想创建第二个NAT,创建不了

kvm vms 快照 kvm快照原理_桥接_82

能创建多个仅主机的模式,想创建NAT

kvm vms 快照 kvm快照原理_虚拟化_83

  

kvm vms 快照 kvm快照原理_虚拟化_84

kvm vms 快照 kvm快照原理_kvm vms 快照_85

 

 添加一个网络,起一个名字,其实它就是要给弄一个新的网络设备

 

kvm vms 快照 kvm快照原理_NAT_86

 把模式改成NAT,报错

kvm vms 快照 kvm快照原理_NAT_87

 

 不是不能实现,是因为桌面版的,企业级不可能只能创建一个NAT 

【注意】多看书,少熬夜。