kvm总结复习
一、虚拟化概念
1、虚拟化技术:在计算机技术中,虚拟化(技术)或虚拟技术(英语:Virtualization)是一种资源管理技术,是将计算机的各种实体资源(CPU、内存、磁盘空间、网络适配器等),予以抽象、转换后呈现出来并可供分区、组合为一个或多个电脑配置环境。
2、虚拟化:也就是指通过虚拟化技术将一台计算机虚拟为多台逻辑计算机。
3、虚拟化使用软件的方法重新定义划分 IT 资源,可以实现 IT 资源的动态分配、灵活调度、跨域共享,提高 IT 资源利用率,使 IT 资源能够真正成为社会基础设施,服务于各行各业中灵活多变的应用需求。
虚拟化技术的趋势:
(1)降低运营成本;
(2)提高应用兼容性;
(3)加速应用部署;
(4)提高服务可用性;
(5)提升资源利用率;
(6)动态调度资源;
(7)降低能源消耗。
二、虚拟化分类
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
5、kvm虚拟机配置文件位置:/etc/libvirt/qemu
kvm虚拟机磁盘文件位置:/var/lib/libvirt/images
四、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搭建过程
(1)服务端下载nfs-utils,并开启rpvbind 和nfs
(2)写入配置文件:
# vim /etc/exports /PATH HOSTNAME(rw,sync)/(ro)
(3)showmount -e
(4)客户端下载nfs-utils,并启动
(5)showmount -e 检查挂载信息,并挂载