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

article/2025/8/23 14:19:40

文章目录

    • 【KVM虚拟化实践与编程】云平台管理系统
      • 一、KVM/QEMU虚拟化环境的搭建
        • 1. 安装QEMU
        • 2.构建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.jarjna-4.4.0.jar
图11 下载jar包拷贝至宿主机

二、需求分析

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

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

三、系统设计

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

  1. 连接
    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;}
  1. 启动
        if (e.getActionCommand().equals("启动")) {try {domain = JavaLibvirt.init();domain.create();System.out.println(domain.getName() + "虚拟机已启动!");} catch (LibvirtException e1) {// TODO Auto-generated catch blocke1.printStackTrace();} catch (DocumentException e1) {// TODO Auto-generated catch blocke1.printStackTrace();}}
  1. 挂起
        if (e.getActionCommand().equals("挂起")) {try {domain = JavaLibvirt.init();domain.suspend();System.out.println(domain.getName() + "虚拟机已挂起!");} catch (LibvirtException e1) {// TODO Auto-generated catch blocke1.printStackTrace();} catch (DocumentException e1) {// TODO Auto-generated catch blocke1.printStackTrace();}}
  1. 唤醒
        if (e.getActionCommand().equals("唤醒")) {try {domain = JavaLibvirt.init();domain.resume();System.out.println(domain.getName() + "虚拟机已唤醒!");} catch (LibvirtException e1) {// TODO Auto-generated catch blocke1.printStackTrace();} catch (DocumentException e1) {// TODO Auto-generated catch blocke1.printStackTrace();}}
  1. 保存
        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 blocke1.printStackTrace();} catch (DocumentException e1) {// TODO Auto-generated catch blocke1.printStackTrace();}}
  1. 恢复
        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 blocke1.printStackTrace();} catch (DocumentException e1) {// TODO Auto-generated catch blocke1.printStackTrace();}}
  1. 重启
        if (e.getActionCommand().equals("重启")) {try {domain = JavaLibvirt.init();domain.reboot(0);System.out.println(domain.getName() + "虚拟机已重启!");} catch (LibvirtException e1) {// TODO Auto-generated catch blocke1.printStackTrace();} catch (DocumentException e1) {// TODO Auto-generated catch blocke1.printStackTrace();}}
  1. 正常关机
        if (e.getActionCommand().equals("正常关机")) {try {domain = JavaLibvirt.init();domain.shutdown();System.out.println(domain.getName() + "虚拟机已正常关机!");} catch (LibvirtException e1) {// TODO Auto-generated catch blocke1.printStackTrace();} catch (DocumentException e1) {// TODO Auto-generated catch blocke1.printStackTrace();}}
  1. 强制关机
        if (e.getActionCommand().equals("强制关机")) {try {domain = JavaLibvirt.init();domain.destroy();System.out.println(domain.getName() + "虚拟机已强制关机!");} catch (LibvirtException e1) {// TODO Auto-generated catch blocke1.printStackTrace();} catch (DocumentException e1) {// TODO Auto-generated catch blocke1.printStackTrace();}}
  1. 打印运行信息
        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 blocke1.printStackTrace();} catch (DocumentException e1) {// TODO Auto-generated catch blocke1.printStackTrace();}}
  1. 启动网络
        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 blocke1.printStackTrace();} catch (DocumentException e1) {// TODO Auto-generated catch blocke1.printStackTrace();}}
  1. 关闭网络
        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 blocke1.printStackTrace();} catch (DocumentException e1) {// TODO Auto-generated catch blocke1.printStackTrace();}}

四、系统实现

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

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

  3. 创建类
    图16 创建类

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

  5. 编写java代码
    图20 编写java代码

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

  7. 运行代码,打开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 关闭网络和启动网络


http://chatgpt.dhexx.cn/article/dArH0Bpf.shtml

相关文章

云平台系统如何进行资源纳管

资源管理-纳管对象 1、物理机资源管理 物理服务器可被手动发现或根据预定义策略自动发现并成为可被管理和调度的计算资源 2、存储资源管理 NAS、SAN等共享存储纳入管理,使其成为可用的存储资源 3、网络资源管理 接入交换机、防火墙、负载均衡器以及虚拟交换机&…

服务器云平台 系统,服务器云平台 系统

服务器云平台 系统 内容精选 换一换 云服务器创建后区域固定,不能将云服务器转移到另一个区域,也不能将云服务器转移到另一个帐号。您可以通过镜像迁移方式实现云服务器的跨帐号跨区域迁移。服务器迁移的常见场景与常用的迁移方式请参考常见的服务器迁移…

物联网云平台系统设计【一】

物联网云平台系统设计 ##物联网云平台系统设计 下面将谈到几个关键问题: 设备如何接入网络?设备间如何通信?物联网数据的用途?如何搭建起一个物联网系统框架呢?它的技术架构又是怎么样呢?物联网终端软件系统架构&am…

正商职业学校预付费云平台系统 的设计与应用

王兰 安科瑞电气股份有限公司,上海 嘉定 201801 摘要:介绍正商职业学校预付费云平台系统,采用智能预付费仪表进行智能预付费远程控制。系统采用现场网关就地组网的方式,组网后通过网络将数据远传云服务器后台,通过Acre…

学校预付费云平台系统 的设计与应用

概述 项目为新建学生宿舍楼的电能管理系统。将现场男生宿舍楼和女生宿舍楼的配电箱内安装安科瑞预付费计量仪表。从而实现宿舍学生用电的智能化管理,采用云平台系统方便学校对宿舍用电情况进行了解及收费。针对本项目配置安科瑞预付费电能表ADM130来分别计量每个房…

服务器云平台 系统,服务器云平台系统

服务器云平台系统 内容精选 换一换 您可以选择在云服务器上安装一个或多个应用。如需在云服务器上安装其他应用,请参考如下操作进行添加。暂时仅允许支持VR应用的云服务器安装VR应用。暂时仅允许支持3D应用的云服务器安装3D应用。暂时仅允许支持VR应用的云服务器有多…

物联网云平台系统设计

##物联网云平台系统设计 下面将谈到几个关键问题: 设备如何接入网络?设备间如何通信?物联网数据的用途?如何搭建起一个物联网系统框架呢?它的技术架构又是怎么样呢?物联网终端软件系统架构?物联网云平台…

Java中数据类型详解

文章目录 一,数据类型的作用二,两种数据类型1,基本数据类型(1)第一类:整数型(2)第二类:浮点型(3)第三类:布尔型(4)第四类&…

JAVA基本数据类型及转换规则

JAVA基本数据类型及转换规则 java数据类型分为两大类: 一:基本数据类型 由程序设计语言系统所定义,不可再分的数据类型。在JAVA语言中,基本数据类型所占的内存空间大小是固定不变的,与所处的平台无关,基本…

JAVA基本数据类型及练习题

目录 8种基本数据类型 类型转换 题目 JAVA的数据类型分为:基本数据类型和引用数据类型。本篇博客会介绍基本数据类型及其使用的注意事项,其中包括隐式类型转换、显示类型转换、编译器的常量优化,结尾会给出10道练习题。 8种基本数据类型 …

java基础:java基本数据类型详解

1.java基本数据类型 java有八种基本数据类型: 4种整型 :byte,short,int,long2种浮点型:float,double (3.14F位浮点型,没有F默认为double)一种字符型&#x…

Java基础(一) 八大基本数据类型

Java基础(一) 八大基本数据类型 自从Java发布以来,基本数据类型就是Java语言的一部分,分别是byte, short, int, long, char, float, double, boolean. 其中: 整型:byte, short, int, long 字符型:char 浮点型&…

GitHub 宣布两个重磅消息:发布移动端、封存代码

By 超神经 AI 无处不在的时代,每天都有新的技术与研究成果出现。无论学术界还是商界,技术还是产品,AI 的新发现都源源不断,在带给我们全新视角的同时,也引起我们更深的思考。 想知道最近的 AI 动态吗?Hyper…

OpenAI 是如何被10亿美元收买了“非盈利”灵魂的?

编译 | 陈彩娴、琰琰 近日,一篇名为“How OpenAI Sold its Soul for $1 Billion”(OpenAI是如何因为 10 亿美元出卖自己的灵魂)的文章在 Reddit 上引起了热议。 文章作者 Alberto Romero 抨击知名的非营利机构OpenAI 为了金钱而出卖自己原有…

可怕!程序员要被革命了,微软推出自己会编程的 “AI 程序员” 插件

loonggg 读完需要 7分钟 速读仅需 3 分钟 大家好,我是校长。 这几天微软和 GitHub 推出了一款 AI 程序员智能插件,它自己会编程,会自动生成代码,有人说: 软件开发领域的「第三次工业革命」似乎正缓缓揭开序幕。 01 到底…

程序员提前下班的福音来了!GitHub、OpenAI 联手推出 AI 代码生成神器

整理 | 苏宓 出品 | CSDN(ID:CSDNnews) 编程门槛正在降低,编程效率正在提升,我们距离「人人都能成为开发者」的目标更近一步。这不,微软正式宣布发布了一个人工智能代码建议方案——GitHub Copilot&#xf…

2020 最好的Linux网络监控工具(翻译)

前言 虽然这个清单包含开源的和闭源的产品,但它着重于介绍基于 Linux 的网络监控工具, 少数常用工具只能在 Windows,Pandora 或其他系统上运行,但是大多数网络监视工具都在Linux系统上运行,因为 Linux 通常是 IT 专家…

MySQL高可用管理工具:orchestrator

orchestrator 是一个MySQL高可用复制拓补的管理和可视化工具,同时也是GitHub官方在使用的一个复制拓补管理工具,它允许: 1)发现: orchestrator主动发现拓补结构并读取基本的MySQL信息,如复制状态和配置。…

GitHub 源代码疑遭泄漏

聚焦源代码安全,网罗国内外最新资讯! 编译:奇安信代码卫士团队 TypeScript的开发者Resynth 发布题为《GitHub 源代码泄漏》的文章指出,GitHub.com 的所有源代码被公开。 (泄漏者在 Readme 中指出,文档包括日…

2020 最好的Linux网络监控工具

前言 虽然这个清单包含开源的和闭源的产品,但它着重于介绍基于 Linux 的网络监控工具, 少数常用工具只能在 Windows,Pandora 或其他系统上运行,但是大多数网络监视工具都在Linux系统上运行,因为 Linux 通常是 IT 专家的…