kvm总结复习

一、虚拟化概念

1、虚拟化技术:在计算机技术中,虚拟化(技术)或虚拟技术(英语:Virtualization)是一种资源管理技术,是将计算机的各种实体资源(CPU、内存、磁盘空间、网络适配器等),予以抽象、转换后呈现出来并可供分区、组合为一个或多个电脑配置环境。

2、虚拟化:也就是指通过虚拟化技术将一台计算机虚拟为多台逻辑计算机

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

二、虚拟化分类

1、虚拟化层次种类:

(1)完全虚拟化:hypervisor(VMWare vsPhere,VirtualPC,KVM)

(2)准虚拟化(Xen)

(3)系统虚拟化

(4)桌面虚拟化

2、虚拟化架构分类:

(1)1型虚拟化(Xen,VMWare vsPhere)

(2)2型虚拟化(KVM,VirtualBox,VMWare Workstation)

三、kvm组成

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

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

  (1)libvirtd是服务程序,接收和处理 API 请求;
  (2)API 库使得其他人可以开发基于 Libvirt 的高级工具,比如 virt-manager,这是个图形化的 KVM 管理工具;
  (3)virsh 是我们经常要用的 KVM 命令行工具。作为 KVM 和 OpenStack 的实施人员,virsh 和 virt-manager 是一定要会用的。

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

四、kvm虚拟机管理

1、virt-manager图形化

2、virsh命令行

(1)基础操作

virsh list   #列出当前宿主机上处于运行状态的虚拟机
virsh list --all   #列出当前宿主机上所有的虚拟机
virsh start vm1 (虚拟机name)   #开启某一台虚拟机
virsh shutdown vm1 (虚拟机name)   #正常关闭一台虚拟机
virsh destroy vm1   #强制关闭某一台虚拟机
virsh autostart vm1   #开机自启动虚拟机vm1
virsh autostart --disable vm1   #关闭开机自启动
virsh edit vm1   #编辑某个虚拟机的配置文件
virsh pool-list   #列出存储池

(2)创建磁盘镜像

如:qemu-img create -f qcow2 -o size=9G /export/kvm/test.qcow2
创建一个大小为 50G 的,格式为 qcow2 的磁盘镜像

(3)查看磁盘信息

qemu-img info /export/kvm/test.qcow2

(4)创建&&管理虚机

Virt-install:命令行下创建虚拟机的命令,不过在它后面需要跟上很多的参数
  --name: 虚拟机的名字。
  --disk Location: 磁盘映像的位置。
  --graphics : 怎样连接 VM ,通常是 SPICE 。
  --vcpu : 虚拟 CPU 的数量。
  --ram : 以兆字节计算的已分配内存大小。
  --location : 指定安装源路径
  --network : 指定虚拟网络,通常是 virbr0 或者自己设定的 br0
例如:
virt-install --name=test --disk path=/export/kvm/test.qcow2 --ram=1024 --vcpus=1 --graphics spice --location=/export/download/software/iso/CentOS-7.3-x86_64-DVD.iso --network bridge=br0

(5)通过XML文件定义和删除虚机

virsh destroy   #删除一个域
virsh define   #从一个 XML 文件定义(但不开始)一个域
virsh undefine   #删除一个虚机域

(6)克隆虚机(关机情况下)

virt-clone -o vm2 -n vm4 -f /var/lib/libvirt/images/vm4.qcow2

五、kvm通过virsh console 连入虚机

  centos7开启虚拟机的console功能:

grubby --update-kernel=ALL --args="console=ttyS0"
reboot

  连入虚机:

virsh console vm-name

  退出console连接的虚机:按 ctrl+] 组合键退出virsh console

六、kvm虚拟化透传

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

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

grep vmx /proc/cpuinfo

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

options kvm_intel nested=1

(2)重新加载 kvm 模块

modprobe -r kvm_intel   #-r参数:remove掉kvm_intel模块
modprobe kvm_intel     #加载kvm_intel模块

(3)验证是否加载成功

cat /sys/module/kvm_intel/parameters/nested

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

3、编辑需要做虚拟化透传的虚拟机的配置文件

virsh edit centos7 ( Virtual Machine Name )
<cpu mode=‘host-passthrough‘/>

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

lsmod | grep kvm

七、kvm存储管理

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

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

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

  fdisk:磁盘分区,是Linux发行版本中最常用的分区工具

m 查看全部可用的参数
n  添加新的分区
d 删除某个分区信息
l 列出所有可用的分区类型(查看)
t 改变某个分区的类型
p  打印分区信息(查看分区表信息)
w  保存分区信息并退出
q  不保存直接退出

  mkfs:进行格式化,就是安装文件系统的过程mkfs(meke xfs)

  lsblk:用来查看block设备的信息

八、kvm网络管理

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 二层协议交换的设备

2、linux bridge命令:

brctl addbr <bridge>        add bridge  #添加网桥
brctl delbr <bridge>        delete bridge  #删除网桥
brctl addif <bridge> <device>   add interface to bridge  #向网桥添加接口
brctl delif <bridge> <device>   delete interface from bridge   #删除网桥上接口
brctl show [ <bridge> ]        show a list of bridges  #查看网桥列表

3、Linux bridge 实现 vlan

(1)查看核心是否提供VLAN功能

dmesg | grep -i 802

  如果8021q模块没有载入系统,则可以通过使用modprobe模组命令载入802.1q模组,并利用lsmod命令确认模组是否已经载入到核心内。

modprobe 8021q
 lsmod | grep 8021q

(2)安装用于查看VLAN配置的工具---vconfig

(3)创建VLAN接口

vconfig add ens37 10
vconfig add ens37 20
vim ifcfg-ens37.10 && ens37.20
#############################
VLAN=yes      #启用vlan
TYPE=vlan      #类型vlan
PHYSDEV=ens37    #物理设备网卡
VLAN_ID=10      #vlan_id
NAME=ens37.10      
ONBOOT=yes      #自启
ZONE=trusted      #开启作用域
DEVICE=ens37.10      #设备名
BRIDGE=brvlan-10      #网桥
#################################

(4)分别建立网桥brvlan-10,brvlan-20

brctl addbr brvlan-10
brctl addbr brvlan-20

(5)编辑网桥brvlan-10和brvlan-20配置文件:

#vim ifcfg-brvlan-10
TYPE=bridge
BOOTPROTO=static
NAME=brvlan-10
DEVICE=brvlan-10
ONBOOT=yes
#vim ifcfg-brvlan-20
TYPE=bridge
BOOTPROTO=static
NAME=brvlan-20
DEVICE=brvlan-20
ONBOOT=yes

(6)将网桥brvlan-10接到网口ens37.10,brvlan-20接到网口ens37.20

brctl addif brvlan-10 ens34.10
brctl addif brvlan-20 ens34.20

(7)重启网络服务

4、网卡配置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”支援及设定。

(四)网卡配置bond

1、编辑bond配置文件

TYPE=Ethernet
BOOTPROTO=none
DEVICE=ens37
ONBOOT=yes
MASTER=bond0
SLAVE=yes

2、导入bonding模块

modprobe bonding
lsmod | grep bonding

3、创建bond0,并桥接到br1

#vim ifcfg-bond0
DEVICE=bond0
TYPE=Bond
NAME=bond0
BONDING_MASTER=yes
BOOTPROTO=static
USERCTL=no
ONBOOT=yes
BONDING_OPTS="mode=6 miimon=100"
BRIDGE=br1

4、创建br1网桥

# vim ifcfg-br1
TYPE=Bridge
DEVICE=br1
ONBOOT=yes
BOOTPROTO=static
NAME=br1

5、创建虚拟网口vlan10,vlan20的配置文件

# vim ifcfg-br1.10 && 20
VLAN=yes
TYPE=vlan
PHYSDEV=br1
VLAN_ID=10
NAME=br1.10
ONBOOT=yes
ZONE=trusted
DEVICE=br1.10
BRIDGE=brvlan-10

6、创建vlan的网桥

]# vim ifcfg-brvlan-10 &&20
TYPE=bridge
BOOTPROTO=static
NAME=brvlan-10
DEVICE=brvlan-10
ONBOOT=yes

7、连接网桥和虚拟网口

brctl addif brvlan-10 br1.10
 brctl addif brvlan-20 br1.20

8、重启网络服务

九、虚机迁移

  系统的迁移是指把源主机上的操作系统和应用程序移动到目的主机,并且能够在目的主机上正常运行。

1、冷迁移

  使用scp将一台宿主机里的虚拟机配置XML文件及磁盘qcow2文件拷贝到另一台宿主机上,来克隆虚拟机;使用virsh define定义配置文件,安装时如果报错,需要删除虚拟机,修改配置文件信息(disk文件位置和interface类型),再重新使用virsh define定义安装。

2、热迁移

  热迁移(又叫动态迁移、实时迁移),即虚拟机保存( save ) / 恢复 (restore) :将整个虚拟机的运行状态完整保存下来,同时可以快速的恢复到原有硬件平台甚至是不同硬件平台上。恢复以后,虚拟机仍旧平滑运行,用户不会察觉到任何差异。

  迁移的要求:两边的宿主机硬件要一致,一定有共享存储

3、nfs搭建过程

相关推荐