目录
什么是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、内存、磁盘、网络、鼠标、键盘都有,把这些资源给它进行逻辑上的划分,功能上的划分,划分之后再提供给另外一个客户机的操作系统,就相当于在自己的操作系统上构建出了一个虚拟机。
在这些性能过剩的软件之上我们去安装一个软件,叫虚拟化操作槽,称之为VMN,将底下的硬件逻辑上划分为虚拟硬件,在提供给客户机操作系统,客户机操作系统之上再去运行我们想运行的app。也就是说应用业务,软件,服务都可以运行。节约系统性能,合理的去利用物理机上性能过剩的硬件。
虚拟化是建立在操作系统之上的,也就是说物理硬件所安装的操作系统之上我们还要安装一个VMM层,虚拟化软件层,利用软件的形式去支持虚拟化,提供给上方的进程虚拟机,进行资源的合理利用。
虚拟化的两种方式
最理想的虚拟化两个目标如下:
- 客户机完全不知道自己运行在虚拟化环境中,还以为自己运行在原生环境里。
- 完全不需要VMM介入客户机的运行过程。
半虚拟化:
通过软件的方式在操作系统之上控制我们的虚拟机的运行
全虚拟化:
采用硬件(intel VT-x、VT-d)在硬件上编码支持虚拟化,它能达到的性能比软件层达的高,不需要操作系统进行相应的介入,只需要去安装一个工具,在操作系统之上能将底层的一些cpu、内存、磁盘进行合理的逻辑上的划分就可以了,完全实现一个虚拟化。
支持虚拟化的硬件进行沟通,这时候理论上所能达到的虚拟化效率是98%的,几乎只有2%的损耗,所以全虚拟化是重中之重的。
计算任务主要是透过kvm,去管理一些虚拟的cpu、磁盘,还是通过全虚拟化去进行的。
kvm是一种虚拟化技术,配合QEMU这个工具可以配合我们在一个宿主机中创建虚拟机的请求,kvm也是采用全虚拟化的解决方案去实现的虚拟化。
kvm虚拟化的原理
运行在操作系统之上的一些进程都是通过我们的操作系统与内核里面的一些模块进行沟通,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虚拟化网络解析
KVM中支持三种网络模式,分别为NAT模式、bridge桥接模式、host-only仅主机模式:NAT模式通常用来在个人虚拟化桌面中应用广泛,桥接模式在服务器虚拟化使用广泛,host-only一般在超级大的服务厂商内部使用。
NAT模式
宿主机作为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可以出,不可以进。
桥接网络
宿主机中有虚拟机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、图形的方式去创建使用存储池
centos7里面有4个标签,(centos8和9)有3个标签,存储池的名字叫default,对应的目录/var/lib/libvirt/images
如果磁盘空间不够了,怎么扩容?
1.把虚拟机的镜像先挪出来,挂一个远程的存储挂载到这个目录下,再挪回去就扩容了
2.建立一个全新的存储池,建立的存储池放哪都行,然后挂一个远程存储
新建存储池,起一个名字,类型就默认的就行,路径放在其他地方,比如根下创建一个目录,叫teststorage。
创建好了,名字可以随便改,打了对勾就是开机自动启动。
这个存储池,创建虚拟机的时候就可以把磁盘镜像文件指定到这个位置,就可以用了。
平时想创建一个全新的卷,这个卷就是磁盘镜像文件。这里它是开的,相当于全新的硬盘。
删除卷 xx
停掉池,停了之后就变灰了。
删池,先停止,在删掉
2、命令的方式去创建使用存储池
mkdir /testst1 先创建目录
virsh pool-define-as st2--type dir --target /testst1
pool池 define定义 as起个名 类型 对应的目录是/testst1
现在只是定义了关系还没创建, 创建已经定义的池
virsh pool-build st2
池创建完了,创建卷
virsh vol-create-as st2 vm16.qcow2 2G --format qcow2或
qemu-img create -f qcow2 vm16.qcow2 2G
放在st2池里 叫vm16.qcow2 大小是2个G 格式是qcow2
之前创建好没有激活,现在给它激活
virsh pool-start st2
virsh vol-create-as st2 vm16.qcow2 2G --format qcow2 再运行一遍
创建好了,就可以当做虚拟机的卷用了。
存储池相关管理命令
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目标
发现原来的镜像还是能用vm12.qcow2 vm12.raw就是新出来的镜像 但是里面的内容一样
vim /etc/libvirt/qemu/vm12.xml
假如现在有很多数据,哪天让做快照保存一下现在的状态,万一有问题可以把快照恢复过来
1、用图形方式做快照
因为是raw所以做不了快照,用命令行会报错
先关机,因为要给它换磁盘,转换成qcow2格式,
改配置文件 virsh define /etc/libvirt/qemu/vm12.xml
开机
开完机之后就可以做快照了。
做快照
恢复快照
2、用命令行去做快照
去看帮助
凡是中括号的都是可选项
生成了,去检验一下,刷新
恢复快照
可以用图形点,也可以用命令。
去看它的帮助
好了
快照不是天天用, 快照什么时候用,比如公司一个月做一次快照,或者半个月,几个星期做一次,总不能手动去做,用命令,计划任务加快照,定期的做快照。
克隆
是灰色的不能点,因为在开机状态不能克隆,
没有链接克隆,默认就是完整克隆。这样就好了
命令克隆
virt-clone -o vm2 --auto-clone
kvm虚拟机基本管理和网络管理
kvm基本管理
virsh是一个很大的命令,跟kvm对接的,只不过是命令行模式的。
如果里面的命令忘了怎么写,光一个dom开头的这么多,平时不怎么用的如果忘了,比如domiflist --help它单独的就是查看的这条命令的帮助。
virsh list查看当前运行的虚拟机有哪些
virsh list --all查看所有的,虚拟机(包含关闭和开启)
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和网络是属于网络,桥接是属于接口,因为在创建网络里面没有桥接的选项
创建NAT网络
1、用图形的方式创建
在centos8和9里面只能创建两种,桥接的不能创建了,7里面还能创建,但是不介意,容易出错。
网段不能冲突,ipv6和dns域名不用管,点完成就好了
如果要再创建一个网段就得改了,圆圈是dhcp的地址池也可以改
2、用脚本的方式去创建网络
cd /etc/libvirt/
cd /qemu/
cd networks/ 在这个里面创建,自己创建网络,只需要创建一个新的配置文件就行
默认有一个default,假装那些网络都没有,就有一个default,把default拷贝一下
拷贝完,打开配置把名字改一下,uuid,模式是nat,mac地址,网段改一下,dhcp的网段改一下
:wq! 保存 让它生效
在kvm里的网络里面不管是什么网络设备都叫桥,bridge name nat模式的都是vir开头,br0是第一个 br1是第二个只要不同名就行,数数就行。
拿图形的去验证一下,多了一个nat2,但是没有激活
激活
命令行激活 virsh net-start nat2
开机启动,点上就开机启动
命令开机启动,virsh --help | grep net 查看一下帮助
virsh net-autostart nat2
3、创建隔离网络
用图形创建隔离网络
网段要改不一样的
4、用脚本去创建隔离网络
拷贝default
去编辑它 vim isolated1.xml
forward mode='nat' 隔离和NAT就差这一行,删了就是隔离,加上就是NAT,
改名字,uuid,设备名字(只要不一样就行,不一定非要连着),mac地址,网段,
:wq!保存
virsh net-define isolated1.xml 发现多了一个
virsh net-start isolated1 发现不是灰色的了
网络创建好了,现在和虚拟机还没有关系。
比如vm11,默认的是NAT1网络,他想要用NAT1的网络,需要去改网卡
改配置文件,这是虚拟机配置文件的一部分,网卡的配置
5、创建桥接网络
桥接在公司用的不多,因为它占ip,还不大安全,NAT外网访问不到内网,安全。隔离在公司用的也用的不多。
做桥接,配置文件不是在kvm目录下,在自己宿主机网卡配置文件。
cd /etc/sysconfig/network-scripts/
编辑成这样
把原来配置文件的IP地址去掉
vim ifcfg-ens33
改成这样
我的物理网卡,桥到我做的那个桥接网卡,相当于两个网卡对在一起了,只不过ip地址原来设置在物理网卡,现在设置在桥接网卡上,其实两个网卡ip地址是通用的。
reboot
最终结果ip能用,而且ip跑到了br0上。
ip a 看br0有ip,ens33已经没有ip了 master是br0,说明它是桥到br0上的
做了这个之后,虚拟机就可以使用桥接的方式,和vmware不一样
重启一下,选完桥,里面的ip地址还没有设置,要设置成和外网的ip是同一个ip
dhcp自动获取了。这样就好了
怎么调回来,就比如这台机器现在是桥接模式,想改回来,就把配置文件删了,改成原来的样子,把ens33搞回来,重启系统,不重启会出问题,一定要重启。
【注意】做好网络,跟虚拟机还没关系,虚拟机想使用什么网络,要去调虚拟机的配置文件,虚拟机要设置自己的ip地址。
在vmware里想创建第二个NAT,创建不了
能创建多个仅主机的模式,想创建NAT
添加一个网络,起一个名字,其实它就是要给弄一个新的网络设备
把模式改成NAT,报错
不是不能实现,是因为桌面版的,企业级不可能只能创建一个NAT
【注意】多看书,少熬夜。