【KVM虚拟化实践与编程】云平台管理系统

您所在的位置:网站首页 虚拟云服务实验报告册答案 【KVM虚拟化实践与编程】云平台管理系统

【KVM虚拟化实践与编程】云平台管理系统

2023-10-16 08:17| 来源: 网络整理| 查看: 265

文章目录 【KVM虚拟化实践与编程】云平台管理系统一、KVM/QEMU虚拟化环境的搭建1. 安装QEMU2.构建KVM环境3.安装虚拟化管理工具4.配置JDK环境 二、需求分析三、系统设计四、系统实现

【KVM虚拟化实践与编程】云平台管理系统 一、KVM/QEMU虚拟化环境的搭建 1. 安装QEMU

使用命令“apt-get install qemu”安装QEMU。 图1 QEMU的apt-get安装

2.构建KVM环境

(1)打开VMware对CPU的虚拟化支持。 图2 打开VMware对CPU的虚拟化支持 (2)使用命令“cat /etc/issue”查看Ubuntu操作系统版本。 图3 查看Ubuntu操作系统版本 (3)使用命令“uname -r”或“cat /proc/version”查看Linux内核版本,如果内核版本低于2.6.20,则需要下载KVM进行编译和安装。 图4 查看Linux内核版本 (4)使用命令“lsmod | grep kvm”查看Linux内核是否已安装KVM内核模块。 图5 查看KVM模块 (5)确认KVM 相关的模块加载成功后,使用命令“ls -l /dev/kvm”检查/dev/kvm文件。 检查/dev/kvm文件

3.安装虚拟化管理工具

(1)安装libvirt,使用命令“apt-get install libvirt-bin”和“apt-get install libvirt-dev”安装libvirt-bin和libvirt-dev两个包。 图7 libvirt-bin的apt-get安装图8 libvirt-dev的apt-get安装 (2)安装virt-manager,使用命令“apt-get install virt-manager”安装virt-manager。 图9 virt-manager的apt-get安装

4.配置JDK环境

(1)由于使用java程序设计语言做开发,因此需要配置JDK环境。IDE工具可以使用eclipse。可以使用“apt-get install eclipse”命令安装eclipse,会自动配置JDK环境。 图10 eclipse的apt-get安装 (2)由于libvirt是使用C语言开发的,因此使用java进行系统开发需要使用libvirt对java的绑定,需要下载libvirt-0.5.0.jar和jna-4.4.0.jar。 图11 下载jar包拷贝至宿主机

二、需求分析

云平台管理系统的功能包括:

通过镜像管理虚拟机,包括虚拟机创建、启动、暂停、恢复、删除等镜像的添加与删除功能虚拟机网络模式设置,网络的断开和连接对虚拟机做快照功能(选做)虚拟机挂载存储磁盘(选做) 三、系统设计

云平台管理系统是对虚拟机进行管理和操作,该系统采用Libvirt Java API 进行分析和设计,使用编程语言java作为开发语言,使用ecplise作为开发平台,通过jfinal框架展示给用户,能够很好的实现系统的开发及测试。使用java的GUI实现了按钮对虚拟机的启动,重启,正常关机,强制关机,挂起,唤醒挂起的虚拟机,保存当前虚拟机状态,读取已保存的虚拟机,也可以实现对当前运行的虚拟机状态的打印输出,还可以实现对网络的启动和关闭。

连接 public static Domain init() throws LibvirtException, DocumentException { conn = new Connect("qemu:///system", false); SAXReader reader = new SAXReader(); Document docu = reader.read(new File("/etc/libvirt/qemu/demo.xml")); String xmlDesc = docu.asXML(); Domain domain = conn.domainDefineXML(xmlDesc); return domain; } 启动 if (e.getActionCommand().equals("启动")) { try { domain = JavaLibvirt.init(); domain.create(); System.out.println(domain.getName() + "虚拟机已启动!"); } catch (LibvirtException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } catch (DocumentException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } } 挂起 if (e.getActionCommand().equals("挂起")) { try { domain = JavaLibvirt.init(); domain.suspend(); System.out.println(domain.getName() + "虚拟机已挂起!"); } catch (LibvirtException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } catch (DocumentException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } } 唤醒 if (e.getActionCommand().equals("唤醒")) { try { domain = JavaLibvirt.init(); domain.resume(); System.out.println(domain.getName() + "虚拟机已唤醒!"); } catch (LibvirtException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } catch (DocumentException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } } 保存 if (e.getActionCommand().equals("保存")) { try { domain = JavaLibvirt.init(); JFileChooser jf = new JFileChooser(); jf.setFileSelectionMode(JFileChooser.SAVE_DIALOG | JFileChooser.DIRECTORIES_ONLY); jf.showDialog(null, null); File fi = jf.getSelectedFile(); String f = fi.getAbsolutePath() + "/save.img"; System.out.println("save: " + f); domain.save(f); System.out.println(domain.getName() + "虚拟机状态已保存!"); System.out.println(); } catch (LibvirtException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } catch (DocumentException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } } 恢复 if (e.getActionCommand().equals("恢复")) { try { domain = JavaLibvirt.init(); JFileChooser chooser = new JFileChooser(); chooser.showOpenDialog(null); File f = chooser.getSelectedFile(); if (f != null) { String path = chooser.getSelectedFile().getPath(); System.out.println(path); domain.getConnect().restore(path); System.out.println(domain.getName() + "虚拟机状态已恢复!"); System.out.println(); } } catch (LibvirtException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } catch (DocumentException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } } 重启 if (e.getActionCommand().equals("重启")) { try { domain = JavaLibvirt.init(); domain.reboot(0); System.out.println(domain.getName() + "虚拟机已重启!"); } catch (LibvirtException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } catch (DocumentException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } } 正常关机 if (e.getActionCommand().equals("正常关机")) { try { domain = JavaLibvirt.init(); domain.shutdown(); System.out.println(domain.getName() + "虚拟机已正常关机!"); } catch (LibvirtException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } catch (DocumentException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } } 强制关机 if (e.getActionCommand().equals("强制关机")) { try { domain = JavaLibvirt.init(); domain.destroy(); System.out.println(domain.getName() + "虚拟机已强制关机!"); } catch (LibvirtException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } catch (DocumentException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } } 打印运行信息 if (e.getActionCommand().equals("打印运行信息")) { try { domain = JavaLibvirt.init(); for (int id : JavaLibvirt.conn.listDomains()) { domain = JavaLibvirt.conn.domainLookupByID(id); System.out.println("id is " + domain.getID() + " name is " + domain.getName() + " state is " + domain.getInfo().state); System.out.println(); } } catch (LibvirtException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } catch (DocumentException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } } 启动网络 if (e.getActionCommand().equals("启动网络")) { try { domain = JavaLibvirt.init(); domain.getConnect().networkLookupByName("default").create(); String netname = domain.getConnect().networkLookupByName("default").getName(); if (domain.getConnect().networkLookupByName("default").isActive() == 0) { System.out.println("网络" + netname + "已经被关闭!"); } else { System.out.println("网络" + netname + "正在使用中!"); } } catch (LibvirtException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } catch (DocumentException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } } 关闭网络 if (e.getActionCommand().equals("关闭网络")) { try { domain = JavaLibvirt.init(); domain.getConnect().networkLookupByName("default").destroy(); String netname = domain.getConnect().networkLookupByName("default").getName(); if (domain.getConnect().networkLookupByName("default").isActive() == 0) { System.out.println("网络" + netname + "已经被关闭!"); } else { System.out.println("网络" + netname + "正在使用中!"); } } catch (LibvirtException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } catch (DocumentException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } } 四、系统实现

在eclipse中配置工作目录 图12 配置工作目录

创建java项目 图13 创建java项目1 图14 创建java项目2 图15 创建java项目3

创建类 图16 创建类

在eclipse中配置需要的jar包 图17 配置需要的jar包1 图18 配置需要的jar包2 图19 配置需要的jar包3

编写java代码 图20 编写java代码

运行之前,打开virsh使用命令“virsh list --all”或virt-manager查看虚拟机状态。 图21 未运行之前查看虚拟机状态

运行代码,打开virsh使用命令“virsh list --all”或virt-manager查看虚拟机状态。 图22 云平台管理系统主界面 图22 云平台管理系统主界面 图23 启动后查看虚拟机状态 图23 启动后查看虚拟机状态 图24 挂起后查看虚拟机状态 图24 挂起后查看虚拟机状态 图25 唤醒后查看虚拟机状态 图25 唤醒后查看虚拟机状态 图26 保存操作 图26 保存操作 图27 保存后查看虚拟机状态 图27 保存后查看虚拟机状态 图28 恢复操作 图28 恢复操作 图29 恢复后查看虚拟机状态 图29 恢复后查看虚拟机状态 图30 重启后查看虚拟机状态 图30 重启后查看虚拟机状态 图31 正常关机后查看虚拟机状态 图31 正常关机后查看虚拟机状态 图32 强制关机后查看虚拟机状态 图32 强制关机后查看虚拟机状态 图33 关闭网络和启动网络 图33 关闭网络和启动网络



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3