2021-7-20-KVM虚拟化基础

KVM虚拟化基础

1,虚拟化介绍

虚拟化使用软件的方法重新定义划分 IT 资源,可以实现 IT 资源的动态分配、灵活调度、跨域共享,提高 IT 资源利用率,使 IT 资源能够真正成为 会基础设施,服务于各行各业中灵活多变的应用需求。

虚拟化是云计算的基础。简单的说,虚拟化使得在一台物理的服务器上可以跑多台虚拟机,虚拟机共享物理机的 CPU、内存、IO 硬件资源,但逻辑上虚拟机之间是相互隔离的。

物理机我们一般称为宿主机(Host),宿主机上面的虚拟机称为客户机(Guest)。

那么 Host 是如何将自己的硬件资源虚拟化,并提供给 Guest 使用的呢br> 这个主要是通过一个叫做 Hypervisor 的程序实现的。

虚拟化层次种类:

  • 完全虚拟化:hypervisor(VMWare vsPhere,VirtualPC,KVM)
  • 准虚拟化(Xen)
  • 系统虚拟化
  • 桌面虚拟化

根据 Hypervisor 的实现方式和所处的位置,虚拟化又分为两种:

  • 全虚拟化
  • 半虚拟化

全虚拟化:
Hypervisor 直接安装在物理机上,多个虚拟机在 Hypervisor 上运行。Hypervisor 实现方式一般是一个特殊定制的 Linux 系统。Xen 和 VMWare 的 ESXi 都属于这个类型

理论上讲:

全虚拟化一般对硬件虚拟化功能进行了特别优化,性能上比半虚拟化要高;
半虚拟化因为基于普通的操作系统,会比较灵活,比如支持虚拟机嵌套。嵌套意味着可以在KVM虚拟机中再运行KVM。

虚拟化优点:

  • 降低运营成本
  • 提高应用兼容性
  • 加速应用部署
  • 提高服务可用性
  • 提升资源利用率
  • 动态调度资源
  • 降低能源消耗

2,KVM介绍

kVM 全称是 Kernel-Based Virtual Machine。也就是说 KVM 是基于 Linux 内核实现的。
KVM有一个内核模块叫 kvm.ko,只用于管理虚拟 CPU 和内存。

那 IO 的虚拟化,比如存储和 络设备则是由 Linux 内核与Qemu来实现。

作为一个 Hypervisor,KVM 本身只关注虚拟机调度和内存管理这两个方面。IO 外设的任务交给 Linux 内核和 Qemu。

1、KVM:运行在内核空间,提供CPU和内存的虚拟化

Libvirt 就是 KVM 的管理工具,Libvirt 除了能管理 KVM 这种 Hypervisor,还能管理 Xen,VirtualBox 等。

Libvirt 包含 3 个东西:后台 daemon 程序 libvirtd、API 库和命令行工具 virsh

  • libvirtd是服务程序,接收和处理 API 请求;
  • API 库使得其他人可以开发基于 Libvirt 的高级工具,比如 virt-manager,这是个图形化的 KVM 管理工具;
  • virsh 是我们经常要用的 KVM 命令行工具

2、QEMU:运行在用户空间,提供硬件I/O虚拟化

3、kvm虚拟化所需组件介绍
  kvm:核心套件
  virt-manager:图形化 KVM 管理软件
  libvirt:提供虚拟机与宿主相互通信的机制
  libvirt-python:允许使用 libvirt API
  python-virtinst:CLI 下创建 KVM 的工具
  libvirt-client:提供 client 访问 kvm 服务器的机制 ,并包含 virsh 命令进行 管理和控制VMs
  qemu-kvm:提供用户级 KVM 环境
  qemu-img:VMs 磁盘管理

4、KVM 的虚拟化需要硬件支持(需要处理器支持虚拟化:如 Intel 厂商的 Intel-VT ( vmx )技术&&AMD 厂商的 AMD-V ( svm )技术。

查看是否支持虚拟化:cat /proc/cpuinfo | grep -e vmx -e nx -e svm 或者 egrep ‘(vmx|svm)’ /proc/cpuinfo

5、kvm虚拟机配置文件位置:/etc/libvirt/qemu

kvm虚拟机磁盘文件位置:/var/lib/libvirt/images

3、kvm虚拟化透传

KVM 虚拟化需要处理器对虚拟化技术的支持,当我们需要进行虚拟机嵌套虚拟机时,我们需要让虚拟机中处理器对 VT 功能的支持达到透传的效果。
  nested 虚拟机嵌套( kvm on kvm ):nested 技术,简单的说,就是在虚拟机上跑虚拟机。

1、查看一层客户端是否支持 VT

2、在物理服务器上为嵌套虚拟机做准备 — CPU 虚拟化透传
(1)# vim /etc/modprobe.d/kvm-nested.conf (新建配置文件)

(2)重新加载 kvm 模块

(3)验证是否加载成功

Y —“Y” 表示 cpu 虚拟化透传功能开启

4、进入虚拟机中查看cpu是否透传成功

4,KVM存储管理

KVM 的存储虚拟化是通过存储池(Storage Pool)和卷(Volume)来管理的。
  Storage Pool 是宿主机上可以看到的一片存储空间,可以是多种型;
  Volume 是在 Storage Pool 中划分出的一块空间,宿主机将 Volume 分配给虚拟机,Volume 在虚拟机中看到的就是一块硬盘。

厚置备:厚置备是传统存储置备模型。对于厚置备,预先提供大量存储空间以满足未来的存储需要。但是,空间可能一直未被使用,这样会导致无法充分利用存储容量。
  精简置备:此方法与厚置备相反,通过以灵活的按需方式分配存储空间,可帮助您消除无法充分利用存储的问题。可以通过 ESXi,使用两种模型的精简置备(阵列级别和虚拟磁盘级别)。

KVM 将宿主机目录 /var/lib/libvirt/images/ 作为默认的 Storage Pool,Volume 是该目录下面的文件了,一个文件就是一个 Volume。

使用文件做 Volume 有很多优点:存储方便、移植性好、可复制

KVM 支持多种 Volume 文件格式:
  raw:是默认格式,即原始磁盘镜像格式,移植性好,性能好,但大小固定,不能节省磁盘空间。
  qcow2:是推荐使用的格式,cow 表示 copy on write,能够节省磁盘空间,支持 AES 加密,支持 zlib 压缩,支持多快照,功能很多。
  vmdk:是 VMWare 的虚拟磁盘格式,也就是说 VMWare 虚机可以直接在 KVM上 运行。

5,KVM 络管理

3.5.1、kvm的三种 络模式

(1)NAT(默认上 ):虚拟机利用 host 机器的 ip 进行上 。对外显示一个 ip;

(2)自带的bridge:将虚拟机桥接到 host 机器的 卡上 ,vm和 host 机器都通过 bridge 上 ;对外有同 段的不通 ip,此种方式host却不能和vm联通

(3)Linux bridge:基本原理就是创建一个桥接接口 br0 ,在物理 卡和虚拟 络接口之间传递数据。此种方式host也可以和vm连通;是 Linux 上用来做 TCP/IP 二层协议交换的设备

3.5.2、linux bridge命令:

3.5.3、 卡配置bond(绑定)

(一) 卡bond(绑定),也称作 卡捆绑。就是将两个或者更多的物理 卡绑定成一个虚拟 卡。 卡是通过把多张 卡绑定为一个逻辑 卡,实现本地 卡的冗余,带宽扩容和负载均衡,在应用部署中是一种常用的技术。

多 卡绑定实际上需要提供一个额外的软件的bond驱动程序实现。通过驱动程序可以将多块 卡屏蔽。对TCP/IP协议层只存在一个Bond 卡,在Bond程序中实现 络流量的负载均衡,即将一个 络请求重定位到不同的 卡上,来提高总体 络的可用性。

(二) 卡绑定的目的
1.提高 卡的吞吐量。
2.增强 络的高可用,同时也能实现负载均衡。

(三) 卡配置bond(绑定)bond模式:

1、Mode=0(balance-rr) 表示负载分担round-robin,平衡轮询策略,具有负载平衡和容错功能
  bond的 卡MAC为当前活动的 卡的MAC地址,需要交换机设置聚合模式,将多个 卡绑定为一条链路。
  2、Mode=1(active-backup) 表示主备模式具有容错功能,只有一块 卡是active,另外一块是备的standby,这时如果交换机配的是捆绑,将不能正常工作,因为交换机往两块 卡发包,有一半包是丢弃的。
  3、Mode=2(balance-xor) 表示XOR Hash负载分担(异或平衡策略),具有负载平衡和容错功能
  每个slave接口传输每个数据包和交换机的聚合强制不协商方式配合。(需要xmit_hash_policy)。
  4、Mode=3(broadcast) 表示所有包从所有interface发出,广播策略,具有容错能力,这个不均衡,只有冗余机制…和交换机的聚合强制不协商方式配合
  5、Mode=4(802.3ad) 表示支持802.3ad协议(IEEE802.3ad 动态链接聚合) 和交换机的聚合LACP方式配合(需要xmit_hash_policy)。
  6、Mode=5(balance-tlb) 适配器传输负载均衡,并行发送,无法并行接收,解决了数据发送的瓶颈。 是根据每个slave的负载情况选择slave进行发送,接收时使用当前轮到的slave。
  7、Mode=6(balance-alb) 在5的tlb基础上增加了rlb。适配器负载均衡模式并行发送,并行接收数据包

5和6不需要交换机端的设置, 卡能自动聚合。4需要支持802.3ad。0,2和3理论上需要静态聚合方式,但实测中0可以通过mac地址欺骗的方式在交换机不设置的情况下不太均衡地进行接收。

常用的有三种:
  mode=0:平衡负载模式,有自动备援,但需要”Switch”支援及设定。
  mode=1:自动备援模式,其中一条线若断线,其他线路将会自动备援。
  mode=6:平衡负载模式,有自动备援,不必”Switch”支援及设定。

3.5.4,VLAN介绍

LAN 表示 Local Area Network,本地局域 ,通常使用 Hub 和 Switch 来连接 LAN 中的计算机。一般来说,两台计算机连入同一个 Hub 或者 Switch 时,它们就在同一个 LAN 中。
  一个 LAN 表示一个广播域。 其含义是:LAN 中的所有成员都会收到任意一个成员发出的广播包。
  VLAN 表示 Virtual LAN。一个带有 VLAN 功能的switch 能够将自己的端口划分出多个 LAN。计算机发出的广播包可以被同一个 LAN 中其他计算机收到,但位于其他 LAN 的计算机则无法收到。 简单地说,VLAN 将一个交换机分成了多个交换机,限制了广播的范围,在二层将计算机隔离到不同的 VLAN 中。
  比方说,有两组机器,Group A 和 B,我们想配置成 Group A 中的机器可以相互访问,Group B 中的机器也可以相互访问,但是 A 和 B 中的机器无法互相访问。 一种方法是使用两个交换机,A 和 B 分别接到一个交换机。 另一种方法是使用一个带 VLAN 功能的交换机,将 A 和 B 的机器分别放到不同的 VLAN 中。

VLAN 的隔离是二层上的隔离,A 和 B 无法相互访问指的是二层广播包(比如 arp)无法跨越 VLAN 的边界。但在三层上(比如IP)是可以通过路由器让 A 和 B 互通的。
  现在的交换机几乎都是支持 VLAN 的。 通常交换机的端口有两种配置模式: AccessTrunk。如下图

eth0 是宿主机上的物理 卡,有一个命名为 eth0.10 的子设备与之相连。 eth0.10 就是 VLAN 设备了,其 VLAN ID 就是 VLAN 10。 eth0.10 挂在命名为 brvlan10 的 Linux Bridge 上,虚机 VM1 的虚拟 卡 vent0 也挂在 brvlan10 上。

这样的配置其效果就是: 宿主机用软件实现了一个交换机(当然是虚拟的),上面定义了一个 VLAN10。 eth0.10,brvlan10 和 vnet0 都分别接到 VLAN10 的 Access口上。而 eth0 就是一个 Trunk 口。VM1 通过 vnet0 发出来的数据包会被打上 VLAN10 的标签。
eth0.10 的作用是:定义了 VLAN10
brvlan10 的作用是:Bridge 上的其他 络设备自动加入到 VLAN10 中

增加一个 VLAN20,如下图

//启动服务

//验证安装结果

//测试并验证安装结果

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2021年6月18日
下一篇 2021年6月18日

相关推荐