云平台管理应用开发.docx
- 文档编号:10108301
- 上传时间:2023-02-08
- 格式:DOCX
- 页数:24
- 大小:3.10MB
云平台管理应用开发.docx
《云平台管理应用开发.docx》由会员分享,可在线阅读,更多相关《云平台管理应用开发.docx(24页珍藏版)》请在冰豆网上搜索。
云平台管理应用开发
准备环境
桌面版,vmware12(注意打开虚拟化)
安装软件:
apt-getinstallkvm
apt-getinstallqemu-kvm
apt-getinstallgcc
apt-getinstallbridge-utils(配置网络)
brctladdbrbr0
brctladdifbr0eth0
brctlshow
Virtio半虚拟化驱动的使用
1、分别制作安装了Virtio半虚拟化驱动的Linux磁盘镜像和Windows磁盘镜像。
宿主机:
客户机:
centos,windows系统
Virtio目前已经是一个成熟的技术了,宿主机中比较新的KVM都支持它,及以上的Linux内核版本都是支持virtio的。
客户机centos自带有virtio不需要重新安装。
重点介绍windowsxp系统。
WindowsXP系统安装virtio步骤:
1)创建镜像文件
qemu-imgcreate-fqcow250G
镜像名称为,镜像大小为50G
2)安装winxp系统到镜像文件中
qemu-system-x86_64-localtime-smp2-vgaqxl-m2048-drivefile=,cache=writeback,if=virtio-cdrom../ISO/-netnic,model=virtio-nettap-bootorder=d,menu=on-usbdevicetablet-devicevirtio-balloon-pci,id=balloon0,bus=,addr=0x5--enable-kvm-vnc:
11用VNC连入进行系统安装
3)启动winxp系统,安装驱动
root@xp:
~#qemu-system-x86_64-localtime-smp2-vgaqxl-m2048-hda-cdrom-netnic,model=virtio-nettap-bootorder=c-usbdevicetablet-deviceAC97-devicevirtio-balloon-pci,id=balloon0,bus=,addr=0x5-vnc:
5--enable-kvm
VNC连入进行系统安装virtio_ballon、virtio_net、virtio_serial:
在依次安装完成这3个驱动程序后,在“DeviceManager“中的“Networkadapter”项目中有“RedHatVirtioEthernetAdapter”设备,在“Systemdevices”项目中增加了“VirtIOBalloonDriver”和“VirtIOSerialDriver”这两个设备。
安装virtio_scsi驱动:
先建立一个伪镜像文件,然后将其作为window客户机的一个非启动盘
root@xp:
~#qemu-imgcreate-fqcow210M
root@xp:
~#qemu-system-x86_64-drivefile=,if=virtio-smp2-m2048-cdrom-vnc:
5-usbdevicetablet
在windows客户机的“DeviceManager”中会看到“Otherdevices”项目下没有驱动程序的“SCSIController”。
同前面步骤一样选择“更新驱动”选择virtio-win中的viostor目录下的对应驱动进行安装。
重启后
2、通过QEMU命令行参数启动带有Virtio网卡驱动、Virtio磁盘驱动、VirtioBalloon设备驱动的虚拟机。
通过命令启动centos系统:
root@xp:
~#qemu-system-x86_64-smp1-m2048-hda-netnic,model=virtio-nettap-usbdevicetablet-devicevirtio-balloon-pci,id=balloon0,bus=,addr=0x5--enable-kvm-vnc:
5
通过vnc连接:
在客户机里面输入:
[root@localhost~]#lsmod|grepvirtio
Winxp安装好后virtio驱动后,用下面命令启动,使用virtio驱动:
Kvm中virtio的基本框架
PCI设备直接分配
VT-d概述:
在QEMU/KVM,客户机可以使用的设备大致可分为如下3种类型。
1)Emulateddevice:
QEMU纯软件模拟。
2)Virtiodevice:
实现VIRTIOAPI的半虚拟化驱动的设备。
3)PCIdeviceaddignment:
PCI设备直接分配。
PCI设备直接分配,他允许将宿主机中的在物理PCI(或PCI-E)设备直接分配给客户机完全使用。
KVM中通过VT-d技术使用一个PCI-E网卡的系统架构示例如图所示
VT-d环境配置:
1.硬件支持和BIOS设置
目前很多硬件平台支持VT-d,除了硬件还需要在BIOS将VT-d功能打开。
根据不同品牌电脑可以XX一下。
2.宿主机内核配置
打开处理器的虚拟化引擎选择虚拟化IntelVT-x/EPT或AMD-v/RVI(V)
检查支持虚拟化输入命令:
kvm-ok
3.在宿主机中隐藏设备
使用pci_stub这个内核模块来对需要分配给客户机的设备进行隐藏,从而让宿主机和未被分配的客户机都无法使用该设备,达到隔离和安全使用的目的,需要通过如下三步来隐藏一个设备。
1)加载pci_stub驱动
2)查看设备的vendorID和deviceID(假设此设备的BDF为02:
上面lspci命令行,-D:
显示设备的domain
-n:
数字方式显示设备的vendorID和deviceID
-s:
显示后面指定的一个设备的信息
3)绑定设备到pci_stub驱动
echo-n"808610b9">/sys/bus/pci/drivers/pci-stub/new_id
echo0000:
08:
>/sys/bus/pci/devices/0000:
08:
driver/unbind
echo0000:
08:
>/sys/bus/pci/drivers/pci-stub/bind
#lspci-k-s08:
设备驱动是intel的e1000e,绑定后为pci_stub
4.通过QEMU命令行分配设备给客户机
利用qemu-kvm命令行中“-device”选项可以为客户机分配一个设备,配合其中的“pciassign”作为子选项可以实现设备直接分配。
-devicedriver[,prop[=value][,...]]
其中driver是设备使用的驱动,有很多种类,如pci-assign表示PCI设备直接分配、virtio-balloon-pci(又为virtio-balloon)表示ballooning设备这与第4章中提到的“-balloonvirtio”的意义相同)。
prop[=value]是设置驱动的各个属性值。
“-device?
”可以查看有哪些可用的驱动,“-devicedriver,
”可查看某个驱动的各个属性值,如下面命令行所示。
qemu-kvm命令行工具在启动时分配一个设备给客户机:
qemu-system-x86_64-m1024-devicepci-assign,host=08:
id=mydev0,addr=0x6
如果要一次性分配多个设备给客户机,只需在qemu-kvm命令行中重复多次“-devicepci-assign,host=$BDF”这样的选项即可。
5.除了在客户机启动时就直接分配设备之外,QEUM/KVM还支持设备的热插拔(hot-plug)在客户机运行时添加所需的直接分配的设备,这需要在QEMUmonitor中运行相应的命令。
在QEMUmonitor可以对宿主机进行各种操作。
SR-IOV技术概述
为了实现多个虚拟机能够共享同一个物理设备的资源,并且达到设备直接分配的性能,PCI-SIG组织发布了SR-IOV(SingRootI/OVirtualizationandSharing)规范,该规范定义了一个标准化的机制用以原生地支持实现多个共享的设备。
R-IOV最广泛的应用还是在以太网卡设备的虚拟化方面。
PhysicalFunction(PF,物理功能)
PF是一个普通的PCI-e设备(带有SR-IOV功能),可以放在宿主机中配置和管理其它VF,它本身也可以作为一个完整独立的功能使用。
VirtualFunction(VF,虚拟功能)
由PF衍生而来的“轻量级”的PCI-e功能,包含数据传送所必需的资源,简而言之,VF通过PF的配置之后,可以分配到客户机中作为独立功能使用。
SR-IOV的优势
真正实现了设备的共享(多个客户机共享一个SR-IOV设备的物理端口)
接近原生系统的高性能(比纯软件模拟和Virtio设备的性能都要好)
相比于VT-d,SR-IOV可以用更少的设备支持,更多的客户机,可以提高数据中心的空间利用率
SR-IOV的不足之处
对设备有依赖,只有部分PCI-e设备支持SR-IOV
使用SR-IOV时,不方便动态迁移客户机
虚拟机的动态迁移
1.动态迁移(LiveMigration):
就是在保证虚拟机上服务正常运行的同时,将一个虚拟机系统从一个物理主机移动到另一个物理主机的过程。
该过程不会对最终用户造成明显的影响,从而使得管理员能够在不影响用户正常使用的情况下,对物理服务器进行离线维修或者升级。
虚拟机迁移主要增强了系统的可维护性,其主要目标就是在客户机没有感觉的情况下,将客户机,迁移到另一个物理机器上,从而保证了服务器正常使用。
可以从如下三个方面来衡量虚拟机迁移的效率:
整体迁移时间,服务器停机时间,对服务的性能影响。
NFS服务器:
操作系统版本:
ubuntu16,桥接IP为,服务目录为/mnt/vg/。
2.下面介绍在kVM上进行动态迁移的具体操作步骤,这里的客户机镜像文件存在NFS共享存储上面,源宿主机(vt-nhm9)目的宿主机(vt-snb9)都对NFS上的镜像文件具有可读写权限。
1)下载配置nfs
(1)KVM虚拟机动态迁移无需拷贝虚拟机配置文件和磁盘文件,但是需要迁移的主机之间有相同的目录结构放置虚拟机磁盘文件(本例为“/root/kvm”目录),这里的动态迁移是基于共享存储动态迁移,通过NFS来实现,需要以上版本支持。
(2)在NFS服务器上,下载安装NFS,kernel-server相当于server端,common是client端,使用命令“sudoapt-getinstallnfs-kernel-servernfs-commonportmap”安装NFS。
(3)配置NFS服务器,IP为,将NFS服务器上的“/mnt/vg”目录设为服务目录。
首先使用命令“sudomkdir/mnt/vg”创建该目录,然后使用命令“sudochmod777/mnt”修改该目录权限,接下来使用vim修改“/etc/exports”文件添加共享目录,在该文件中添加“/root/*(rw,sync,no_root_squash)”即可。
*(rw,sync)是命令参数,表示包括读写权限。
(4)“/etc/exports”文件修改后,使用命令“sudoexportfs–r”刷新。
然后启动NFS服务,命令如下:
sudo/etc/portmaprestart
sudo/etc/nfs-kernel-serverrestart
(5)NFS服务启动后,在节点1上使用命令“showmount–e”查看共享目录,如图1所示:
2)在源宿主机挂载NFS的上客户机镜像,并启动客户机
root@xp:
~#mount-tnfs:
/root/kvm//mnt
这里没有指定客户机中的CPU模型,默认是qemu64这个基本的模型,当然也乐意自行设置为“-cpuSandyBridge”或“-cpuWestmere”等,要保证在目的主机上也用相同的命令。
启动虚拟机,进入monitor执行命令:
root@xp:
~#qemu-system-x86_64-hda/mnt/-m1024-localtime-netnic-nettap,ifname=tap1,script=no,downscript=no-monitorstdio-vnc:
5
在客户机中运行一个程序(这里执行了“top”命令),以便在动态迁移后检查它是否仍然正常地继续执行。
3)目的宿主机上也挂载NFS上的客户机镜像的目录,并且启动一个客户机用于接收动态迁移过来的内存内容
root@ubuntu:
~#mount-tnfs:
/root/kvm//mnt
注意:
nfs挂载目录必须与源主机上保持一致;启动客户机命令一致,但是需要增加-incoming选项:
-incomingtcp:
0:
6666这个参数他表示在6666端口建立一个tcpsocket连接用于接收来源主机的动态迁移的内容。
其中0表示:
任何允许来自任何主机的连接“-incoming”这个参使qem-kvm进程进入到迁移监听(migration-listen)模式,而不是真正以命令行中的镜像文件运行客户机,从vnc里面看,客户机黑色没任何显示,在等待动态迁移的数据传入。
启动虚拟机:
root@ubuntu:
~#qemu-system-x86_64/mnt/-smp2-m2048-netnic-nettap-incomingtcp:
0:
6666-vnc:
5
通过VNC查看:
4)在源宿主机的QEMUmonitor命令行中输入migratetcp:
vt-snb9:
6666即可进入动态迁移的流程vt-snb9就是目的宿主机ip,tcp协议和6666端口与目的宿主机上命令行的-incoming参数一致.
5)在migrate命令从开始到执行完成,大约十秒钟,在执行完成迁移后,在目的主机上,之前处于迁移监听模式的客户机就开始运行了,其中运行的正是动态迁移过来的客户机可以看到客户机的top命令迁移后继续运行。
QEMU/KVM中也支持增量复制磁盘修改部分数据的动态迁移,以及直接复制整个客户机磁盘镜像的动态迁移。
使用相同后端镜像文件的动态迁移过程如下,与前面直接使用NFS共享存储非常相似。
(1)在源宿主机上,根据一个后端镜像文件,创建一个qcow2格式的镜像文件,并启动客户机
#qemu-imgcreate-fqcow2-obacking_file=/mnt/,size=20G
qemu-system-x86_64-smp2-m2048-netnic-nettap
这里使用前面挂载的NFS上的镜像文件作为qcow2的后端镜像
(2)在目的宿主机上,也建立相同的qcow2的后端镜像,并带有“-incoming”参数来启动客户机使其处于迁移监听状态
#qemu-imgcreate-fqcow2-obacking_file=/mnt/,size=20G
#qemu-system-x86_64-smp2-m2048-netnic-nettap-incomingtcp:
0:
6666
3)在源宿主机上的客户机的QEMUmonitor中,运行“migrate
KVMonKVM嵌套虚拟化的实现
1.嵌套虚拟化的基本概念
嵌套虚拟化是指在虚拟化的客户机中运行一个Hypervisor,从而再虚拟化运行一个客户机。
嵌套虚拟化不仅包括相同Hypervisor的嵌套(如KVM嵌套KVM、Xen嵌套Xen等),也包括不同Hypervisor的相互嵌套(如KVM嵌套嵌套Xen等)根据嵌套虚拟化的概念可知,其不仅包括两层嵌套(如KVM嵌套KVM),还包括多层的嵌套(如KVM嵌套KVM再嵌套KVM)
2.嵌套虚拟化的五大应用场景
1)IaaS类型的云计算提供商
2)为测试和调试Hypervisor带来了非常大的便利
3)在一些为了起到安全作用的带有Hypervisor的固件上
4)嵌套虚拟化的支持,对虚拟机系统的动态迁移也提供了新的功能
5)嵌套虚拟化的支持,对于系统隔离性、安全性方面也提供更多的实施方案
KVM嵌套KVM,既是在KVM上面运行的第一级客户机中再加载kvm和kvm_intel(或kvm_amd)模块,然后在第一级的客户机中用qemu-kvm启动带有kvm加速的第二级客户机。
“KVM嵌套KVM”的基本架构示意图如下:
3.“KVM嵌套KVM”功能的配置和使用
宿主机:
vmware12,,客户机L1:
ubuntu16-server,
客户机L2:
windows-XP
1)在L0中加载kvm-intel(或kvm-amd)模块时需要添加“nested=1”的选项以打开“嵌套虚拟化”的特征
2)启动L1客户机时,在qemu-kvm命令中加上“-cpuhost”或“-cpuqemu64,+vmx”选项以便将CPU的硬件虚拟化扩展特性暴露给L1客户机
root@xp:
~#qemu-system-x86_64-m3096-smp2-netnic-nettap-cpuhost--enable-kvm-vnc:
5
“-cpuhost”参数的作用是尽可能将宿主机L0的CPU特性暴露给L1客户机;而“-cpuqemu64,+vmx”以qemu64这个CPU模型为基础,然后加上IntelVMX特性(即CPU的VT-x支持)。
3)在L1客户机中,查看CPU的虚拟化支持,然后加载kvm和lvm_intel模块,启动一个L2客户机
通过vnc连接
#cat/proc/cpuinfo|grepvmx
#modprobekvm
#modprobekvm_intel
#lsmod|grepkvm
root@ubuntu:
~#qemu-system-x86_64-m2048-smp2-vnc:
5
通过vnc连接
如果L0没有向L1提供硬件虚拟化的CPU环境,则加载kvm_intel模块时会有错误,kvm_intel模块会加载失败。
在L1中启动客户机,就与在普通KVM环境中的操作完全一样
4)在L2客户机中查看是否正常运行,如下图所示“KVM嵌套KVM”虚拟己运行环境,L0启动了L1,然后在L1中启动L2系统。
由于KVM是全虚拟化Hypervisor,对于其他L1Hypervisor(如Xen)嵌套运行在KVM上情况,在L1中启动L2客户机的操作就完全与普通的Hypervisor中的操作步骤完全一样,因为KVM为L1提供了有硬件辅助虚拟化特性的透明的硬件环境。
主要算法和程序清单:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 平台 管理 应用 开发