云计算虚拟化技术基础与实践:KVM及QEMU虚拟化应用实践_第1页
云计算虚拟化技术基础与实践:KVM及QEMU虚拟化应用实践_第2页
云计算虚拟化技术基础与实践:KVM及QEMU虚拟化应用实践_第3页
云计算虚拟化技术基础与实践:KVM及QEMU虚拟化应用实践_第4页
云计算虚拟化技术基础与实践:KVM及QEMU虚拟化应用实践_第5页
已阅读5页,还剩51页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

云计算虚拟化技术基础与实践

KVM及QEMU虚拟化应用实践目录CONTENT01.Libvirt02.Virt-Manager03.基于Libvirt的配置与开发04.KVM及QEMU虚拟化应用案例本章重点掌握Libvirt的安装和使用。掌握Virsh中的常用命令。掌握Virt-Manager的安装和使用。理解Libvirt域的XML配置文件。熟悉常用的Libvirt的API。掌握使用LibvirtAPI进行虚拟化管理的基本操作。掌握轻量级虚拟机管理系统的应用开发。LibvirtLibvirt简介Libvirt的yum安装libvirtd进程Virsh的常用命令011.Libvirt简介Libvirt包含一个守护进程和一个管理工具,不仅能提供对虚拟机的管理,也提供了对虚拟化网络和存储的管理。可以说,Libvirt是一个软件集合,便于使用者管理虚拟机和使用其他虚拟化功能,比如存储和网络虚拟化管理等等。Libvirt的主要目标是提供一种统一的方式,管理多种不同的虚拟化提供方式和Hypervisor。当前主流Linux平台上常用的虚拟化管理工具Virt-Manager,Virsh,Virt-Install等都是基于Libvirt开发而成。Libvirt支持多种不同的Hypervisor,针对不同的Hypervisor,Libvirt提供了不同的驱动,有对Xen的驱动,有对QEMU的驱动,有对VMware的驱动。Libvirt屏蔽了底层各种Hypervisor的细节,对上层管理工具提供了一个统一的、稳定的API。因此,通过Libvirt这个中间适配层,用户空间的管理工具可以管理多种不同的Hypervisor及其上运行的虚拟客户机。1.Libvirt简介节点、Hypervisor和域之间的关系Libvirt中有几个重要的概念,一个是节点,一个是Hypervisor,一个是域。1.节点(Node)通常指一个物理机器,在这个物理机上通常运行着多个虚拟客户机。2.Hypervisor通常指VMM(VirtualMachineManager),例如KVM,Xen,VMware,Hyper-V等。3. 域(Domain),指的是在Hypervisor上运行的一个虚拟机操作系统实例。1.Libvirt简介Libvirt的主要功能包括:1.虚拟机管理:对节点上的各虚拟机生命周期的管理,比如启动、停止、暂停、保存、恢复和迁移;也支持对多种设备类型的热插拔操作,包括:磁盘、网卡、内存和CPU等。2.远程节点的管理:只要物理节点上运行了Libvirtdaemon(Libvirt守护进程),那么,远程节点上的管理程序就可以连接到该节点,然后进行管理操作,所有的Libvirt功能就都可以访问和使用。3.存储管理:创建不同格式的文件映像(qcow2、vmdk、raw等)、挂接NFS共享、列出现有的LVM卷组、创建新的LVM卷组和逻辑卷、对未处理过的磁盘设备分区、挂接iSCSI共享等等。1.Libvirt简介Libvirt的主要功能包括:4.网络接口管理:任何运行了Libvirtdaemon的主机,都可以通过Libvirt管理物理和逻辑的网络接口。可以列出现有的网络接口卡,配置网络接口、创建虚拟网络接口,以及创建网络桥接,进行VLAN管理等。5.虚拟NAT和基于路由的网络:任何运行了Libvirtdaemon的主机,都可以通过Libvirt管理和创建虚拟网络。Libvirt虚拟网络使用防火墙规则作为路由器,让虚拟机可以透明访问主机的网络。1.Libvirt简介Libvirt架构Libvirt概括起来包括一个应用程序编程接口库(API库)、一个daemon(libvirtd守护进程)和一个命令行工具(Virsh)。API库为其他的虚拟机管理工具提供编程的程序接口库。libvirtd负责对节点上的域进行监管,在使用其他工具管理节点上的域时,libvirtd需要一直在运行状态。Virsh是Libvirt默认给定的一个对虚拟机进行管理的命令行工具。2.Libvirt的yum安装在CentOS中可以使用yum命令安装Libvirt。Libvirt的官方网站是/。2.Libvirt的yum安装注意事项:在使用Libvirt前需要确保机器已开启硬件虚拟化,KVM内核模块已加载,QEMU已安装。[root@localhost~]#yuminstallLibvirt[root@localhost~]#whichlibvirtd/usr/sbin/libvirtd[root@localhost~]#libvirtd--versionlibvirtd(libvirt)4.5.0[root@localhost~]#whichvirsh/usr/bin/virsh[root@localhost~]#virsh--version4.5.0[root@localhost~]#servicelibvirtdstatus3.libvirtd进程01020304Libvirt的客户端工具(包括virsh、virt-manager等)可以连接到本地或远程的libvirtd进程,用于管理节点上的客户机状态,包括启动、关闭、重启、迁移等,收集节点上的宿主机和客户机的配置和资源使用状态。libvirtd是Libvirt虚拟化管理工具的服务器端的守护程序。libvirtd负责执行其他管理工具发送给它的虚拟化管理操作指令。对libvirtd常用的操作方式有“{start|stop|restart|try-restart|reload|force-reload|status}”在CentOS7中libvirtd作为一个服务(service)配置在系统中的,可以通过service命令来对其进行操作。4.Virsh的常用命令Virsh通过调用LibvirtAPI来实现虚拟化的管理,是一个完全在命令行文本模式下运行的工具,系统管理员可以通过脚本程序方便的进行虚拟化的自动部署和管理。Libvirt在安装时会自动安装一个SHELL工具Virsh。Virsh是一个虚拟化管理工具,是一个用于管理虚拟化环境中客户机和Hypervisor的命令行工具。4.Virsh的常用命令Virsh命令行工具非常强大,功能非常丰富,它可以全生命周期的管理KVM虚拟化,比如创建虚拟机,查看虚拟机,动态热插拔硬盘,给虚拟机做快照,迁移、启动、停止、挂起、暂停、删除虚拟机等操作。Virsh管理虚拟化操作时,可以使用两种工作模式,一种是交互模式,直接连接到相应的Hypervisor上,在命令行输入virsh命令执行操作并查看返回结果,使用“quit”命令退出连接;另外一种是非交互模式,在终端输入一个virsh命令,建立到指定URI的一个连接,执行完成后将结果返回到当前的终端并同时断开连接。4.Virsh的常用命令1.基本命令virshlist#获取当前节点上所有域的列表virshconsole<ID>#连接到一个域上。virshdomid<Name|UUID>#根据名称或UUID返回域的ID值virshdomname<ID|UUID>#根据ID或UUID返回域的名称virshdomstat<[ID|Name|UUID]>#获取一个域的运行状态virshdominfo<ID>#获取一个域的基本信息pwd#打印当前位置cd<NewDir>#进入到某一个目录下quit|exit#退出4.Virsh的常用命令2.定义和创建、关闭、暂停域virshdefine<VM.xml>#定义一个VM域,使其永久有效,并可使用start来启动VM。VM.xml会被复制一份到/etc/libvirt/qemu/下。virshcreate<VM.xml>#它可通过VM.xml来启动临时VMvirshsuspend<ID>#在内存挂起一台VMvirshresume<ID>#唤醒一台VMvirshsave<ID><file.img>#类似于VMware上的暂停,并保存内存数据到image文件。virshrestore<file.img>#重新载入暂停的VMvirshstart<VMName>#重新启动managedsave保存的VMvirshshutdown<ID>#关闭虚拟机virshreboot<ID>#重新启动虚拟机virshreset<ID>#强制重启虚拟机virshdestroy<ID>#删除一个虚拟机virshundefine<VM.xml>#取消定义的虚拟机4.Virsh的常用命令3.快照管理virshsnapshot-create<VMName|xxx.xml>#创建一个VM快照virshsnapshot-list<VMName>#显示当前VM的所有快照virshsnapshot-edit<VMName><SnapName>#编辑指定的快照virshsnapshot-delete<VMName><SnapName>#删除指定的快照virshsnapshot-info<VMName><SnapName>#显示快照的详情4.Virsh的常用命令5.VM磁盘管理virshdomblklist<VMName>#显示VM当前连接的块设备virshdomblkinfo<VMName></path/to/img.img>#显示img.img的容量信息。virshdomblkstat<VMName>[--human]</path/to/img.img>#显示img.img的读写等信息的统计结果4.网络及接口管理virshdomiflist<VMName>#显示VM的接口信息virshiface-list#显示物理主机的网络接口列表virshnet-dumpxml<NetName|UUID>#导出一份xml格式的虚拟网络配置信息virshnet-create<net.xml>#根据网络xml配置信息文件创建一个虚拟网络4.Virsh的常用命令7.内存相关virshdommemstat<ID>#获取一个VM内存使用情况统计信息。virshsetmem<ID><MemSize>#设置一个VM的内存大小(默认单位:KB)virshfreecell#显示当前MUMA单元的可用空闲内存virshnodememstats<cell>#显示VM的(某个)内存单元使用情况的统计6.vCPU相关virshvcpinfo<ID>#查看指定ID的域的vCPU信息virshvcppin<ID><vCPU><pCPU>#将一个VM的vCPU绑定到指定的物理核心上virshsetvcpus<ID><vCPU-Num>#设置一个VM的最多vCPU个数virshnodecpustats<CPU-Num>#显示VM(某个)CPU使用情况的统计4.Virsh的常用命令8.其它virshdumpxml<ID>#显示一个运行中的VM的xml格式的配置信息.virshversion#显示libvirt和Hypervisor的版本信息virshsysinfo#以xml格式打印宿主机的系统信息virshnodeinfo#显示当前连接节点的基本信息virshuri#显示当前连接节点的URIvirshhostname#显示当前主机名virshconnect<URI>#连接到URI指定的Hypervisorvirshqemu-monitor-commanddomain[--hmp]CMD#直接向Qemumonitor中发送命令。Virt-ManagerVirt-Manager的yum安装Virt-Manager的使用02Virt-ManagerVirt-Manager是一个由红帽公司发起,全名为VirtualMachineManager的开源虚拟机管理程序。Virt-Manager是用Python编写的GUI程序,底层使用了Libvirt对各类Hypervisor进行管理。Virt-Manager主要用于管理基于KVM的虚拟机,但是也能管理基于Xen等其他Hypervisor的虚拟机。Virt-Manager提供了图形化界面来管理KVM的虚拟机,可以同时管理多个宿主机上的虚拟机,前提是宿主机上必须安装Libvirt。Virt-ManagerVirt-Manager通过丰富直观的界面给用户提供了方便易用的虚拟化管理功能,包括:创建、编辑、启动或停止虚拟机;查看并控制每个虚拟机的控制台;查看每部虚拟机的性能以及使用率;查看每部正在运行中的虚拟机以及主控端的实时性能及使用率信息;不论是在本机或远程,皆可使用KVM、Xen、QEMU。Virt-Manager支持绝大部分Hypervisor,并且可以连接本地和网络上的Hypervisor。用户在Virt-Managerr中使用图形界面做的配置会被转为Libvirt中的XML格式的配置文件,保存在Libvirt相关目录下。使用Virt-Manager生成Libvirt中虚拟机的配置文件是一个不错的选择。1.Virt-Manager的yum安装Virt-Manager的官方网站是/,在CentOS中使用“yuminstallvirt-manager”安装即可。2.Virt-Manager的使用在CentOS中打开Virt-Manager在CentOS中使用Virt-Manager非常方便,安装Virt-Manager后,在“Applications”的“SystemTools”中可以看到“VirtualMachineManager”的图标,鼠标点击即可。Virt-Manager应用2.Virt-Manager的使用2.在Virt-Manager中创建虚拟机在Virt-Manager管理界面中,将鼠标放置在“QEMU/KVM”上双击,会打开界面“QEMU/KVMConnectionDetails”界面。点击左上角的电脑小图标,也可以将鼠标放置在“QEMU/KVM”上右键,点击里面的“New”选项创建虚拟机。2.Virt-Manager的使用2.在Virt-Manager中创建虚拟机2.Virt-Manager的使用2.在Virt-Manager中创建虚拟机2.Virt-Manager的使用2.在Virt-Manager中创建虚拟机在客户机创建成功后,Virt-Manager会在/etc/libvirt/qemu路径下生成一个名称为“ubuntu16.04.xml”的XML配置文件,文件名即为创建的虚拟机名称ubuntu16.04,该配置文件配置了虚拟机的所有配置信息2.Virt-Manager的使用2.在Virt-Manager中创建虚拟机虚拟机启动后界面如下所示。使用“cirros”用户名,“cubswin:)”密码登录后,可以正常使用该系统。2.Virt-Manager的使用2.在Virt-Manager中创建虚拟机虚拟机ubuntu16.04的详细配置信息2.Virt-Manager的使用3.在Virt-Manager中管理虚拟机处于运行状态的虚拟机的状态为“Running”,点击“Open”图标打开虚拟机窗口界面,点击图标启动虚拟机。图标“”后有几个选项,包括“Reboot”、“ShutDown”、“ForceReset”、“ForceOff”和“Save”。点击“ShutDown”进行虚拟机的正常关闭,使用“ForceOff”进行虚拟机的强制关机,一般尽量避免使用“ForceOff”来强制关机。点击“Reboot”进行虚拟机的正常重启,点击“ForceReset”强制重启,点击“Save”会保存当前客户机的运行状态。2.Virt-Manager的使用4.建立一个新的连接通过Virt-Manager的菜单“File”中的“AddConnection”,可以在Virt-Manager中建立一个本地或者远程Hypervisor的连接。Virt-Manager管理本地和远程主机的虚拟机基于Libvirt的配置与开发Libvirt的配置文件Libvirt中域的XML配置文件含义LibvirtAPI简介Libvirt建立到Hypervisor的连接LibvirtAPI的C语言使用示例LibvirtAPI的Python语言使用示例031.Libvirt的配置文件Libvirt的配置文件默认放置在/etc/libvirt目录下:libvirt.conf配置文件:用于配置常用Libvirt远程连接的别名。文件中以“#”号开头的行为注释内容。libvirtd.conf配置文件是libvirtd守护进程的配置文件,配置了许多libvirtd的启动设置。qemu.conf是Libvirt对QEMU的配置文件,包括VNC、SPICE的设置,以及连接它们的权限认证方式的配置,也包括内存大页、SELinux、Cgroups等相关配置。qemu目录:Libvirt使用XML文件对虚拟机进行配置,其中包括虚拟机名称、分配内存、vCPU等多种信息,定义、创建虚拟机等操作都需要XML配置文件的参与。如果底层虚拟化使用QEMU,那么这个XML配置文件通常放置在Libvirt特定的“qemu”目录下。2.Libvirt中域的XML配置文件含义1.域的配置最外层是<domain>标签<!---->中间的内容为注释部分。<domain>标签有两个属性,“type”属性指定运行该虚拟机的Hypervisor,“id”属性是一个唯一标识虚拟机的唯一整数标识符。<name></name>标签内为虚拟机的简称。<uuid></uuid>标签内为虚拟机的全局唯一标识符。其他的元数据标签,例如<title>、<description>和<metadata>等。以8.2.2小节中的/etc/libvirt/qemu路径下的ubuntu16.04..xml配置文件为例,介绍该配置文件的含义。2.Libvirt中域的XML配置文件含义2.内存,CPU,启动顺序等配置<memoryunit=‘KiB’></memory>标签内容表示客户机最大可使用的内存。<currentMemory></currentMemory>标签内容表示启动时分配给客户机使用的内存。<vcpu></vcpu>标签内表示客户机中vCPU的个数。<os></os>标签内定义客户机系统类型及客户机硬盘和光盘的启动顺序。<clock></clock>标签定义时钟设置。<on_poweroff>destroy</on_poweroff>,<on_reboot>restart</on_reboot>和<on_crash>destroy</on_crash>都是libvirt配置文件中对事件的配置。2.Libvirt中域的XML配置文件含义3.设备配置<devices></devices>标签内放置着客户机所有的设备配置。<emulator></emulator>标签内容放置使用的设备模型模拟器的绝对路径。<disk>标签表示对域的存储配置。2.Libvirt中域的XML配置文件含义4.网络配置<interfacetype=‘network’></interface>标签内是对域的网络接口配置。<macaddress='52:54:00:e4:5f:ad'/>用来配置客户机中网卡的MAC地址。<sourcenetwork='default'/>表示网络配置方式使用默认方式。<modeltype='virtio'/>表示客户机中使用的网络设备类型。<addresstype='pci'domain='0x0000'bus='0x00'slot='0x03'function='0x0'/>表示该网卡在客户机中的PCI设备编号值。2.Libvirt中域的XML配置文件含义5.其他配置<inputtype=‘tablet’bus=‘usb’/>表示提供tablet这种类型的设备。<inputtype='mouse'bus='ps2'/>表示会让QEMU模拟PS2接口的鼠标。<inputtype='keyboard'bus='ps2'/>表示会让QEMU模拟PS2接口的键盘。<graphics></graphics>标签内放置连接到客户机的图形显示方式的配置。<video></video>标签内放置的是显卡配置。<memballoonmodel=‘virtio’></memballoon>标签放置内存的ballooning相关的配置。3.LibvirtAPI简介LibvirtAPI提供了一系列管理虚拟机的应用程序接口,支持多种语言,最基本最主要的是C语言。LibvirtAPI的官网是/docs.html。在官网中,应用开发的API中“APIreference”是C语言的API。“LanguagebindingandAPImodules”是Libvirt支持的其他语言的API。3.LibvirtAPI简介3.LibvirtAPI简介1.libvirt-domain:管理Libvirt域的API,提供了一系列以virDomain开头的函数。2.libvirt-event:管理事件的API,提供了一系列以virEvent开头的函数。3.libvirt-host:管理宿主机的API。4.libvirt-network:管理网络的API,提供了一系列以virConnect和virNetwork开头的函数。5.libvirt-nodedev:管理节点的API,提供了一系列以virNode开头的函数。6.libvirt-storage:管理存储池和卷的API,提供了一系列以virStorage开头的函数。7.libvirt-stream:管理数据流的API,提供了一系列以virStream开头的函数。8.virterror:处理libvirt库的错误处理接口。4.Libvirt建立到Hypervisor的连接1.连接本地Hypervisor使用Libvirt连接本地的Hypervisor时,URI的一般格式如下:driver[+transport]:///[path][?extral-param]其中,“driver”是连接Hypervisor的驱动名称(如qemu,xen等),本书中以QEMU为例,因此为qemu。“transport”是连接所使用的传输方式(可以为空,也可以为“unix”这样的值)。“path”是连接到Hypervisor的路径。“?extral-param”表示额外需添加的参数。连接QEMU有两种方式,一种是系统范围内的特权驱动(“system”实例),一种是用户相关的无特权驱动(“session”实例)。常用的本地连接QEMU的URI如下:qemu:///systemqemu:///session4.Libvirt建立到Hypervisor的连接2.连接远程Hypervisor使用Libvirt连接远程的Hypervisor时,URI的一般格式如下:driver[+transport]:///[user@][host][:port]/[path][?extral-param]其中,driver和本地连接时含义一样。transport表示传输方式,取值通常是ssh,tcp等。user表示连接远程主机时使用的用户名。host表示远程主机的主机名或者是IP地址。port表示远程主机的端口号。path和extral-param和本地连接时含义一样。在进行远程连接时,也有system和session两种连接方式。4.Libvirt建立到Hypervisor的连接3.使用URI建立连接使用virsh命令的create参数由demo.xml配置文件创建并启动一个虚拟机,虚拟机名称为demo。使用“virsh-cqemu:///session”来建立到本地的连接,查看本地运行的虚拟机。可以使用“list”命令查看虚拟机,“shutdown虚拟机名”关闭虚拟机,“quit”命令退出virsh。5.LibvirtAPI的C语言使用示例编译运行libvirt-conn.c并使用virsh查看当前节点情况在使用virsh启动demo.xml定义的虚拟机后,将libvirt-conn.c文件使用gcc编译为可执行文件libvirt-conn,编译时需要连接virt库,然后执行该文件即可看到虚拟机的信息。使用LibvirtAPI查询某个域的信息源码文件名为libvirt-conn.c,在该例子中使用LibvirtAPI查询某个域的信息。在该代码中包含两个自定义函数,一个是virConnectPtrgetConn(),一个是intgetInfo(intid)。getConn()函数建立一个到Hypervisor的连接。getInfo(intid)函数获取id为1的客户机的信息。5.LibvirtAPI的C语言使用示例使用virsh查看虚拟机的相关信息,“domiddemo”命令表示通过虚拟机的name属性查看虚拟机的ID编号。“domname1”命令表示通过虚拟机的ID编号查看其name属性。“dominfo1”表示通过虚拟机的ID编号值查看虚拟机信息。libvirt-conn.c代码的执行结果和virsh命令下显示的ID号,运行状态,CPU个数,最大内存,已用内存都保持一致。5.LibvirtAPI的C语言使用示例virsh#domiddemo1virsh#domname1demovirsh#dominfo1……[内容省略]virsh#shutdowndemoDomaindemoisbeingshutdown注意事项:本例是通过使用LibvirtAPI的C语言程序对KVM虚拟机进行查看,虚拟机通过Libvirt中的Virsh命令行工具进行定义并启动。C语言代码和Libvirt建立连接,查询该连接中的虚拟机状态信息并打印。demo虚拟机是由Libvirt生成并管理,因此虚拟机状态信息也可以在Virsh的命令行中进行查看。6.LibvirtAPI的Python语言使用示例1.使用LibvirtAPI查询某个域的信息自定义函数createConnection()用来创建并打开到本地的Libvirt连接,连接失败打印“FailedtoopenconnectiontoQEMU/KVM”,连接成功打印“-----Connectioniscreatedsuccessfully-----”。自定义函数closeConnection(conn)用来关闭连接conn。关闭成功后打印“Connectionisclosed”。自定义函数getDomInfoByName(conn,name)用于在连接conn中查询并打印名称为name的域信息,包括域的ID号,名称,运行状态值,基本信息,最大内存值,vCPU的个数等。自定义函数getDomInfoByID(conn,id)用

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论