手机版
你好,游客 登录 注册
背景:
阅读新闻

libvirt Java API使用教程

libvirt C/Java API介绍与jna/libvirt Java SDK引入

[日期:2017-06-28] 来源:csdn.net/kyyee  作者:kyyee [字体: ]

libvirt API 简介

libvirt 为很多操作系统(如 QEMU,KVM,Xen,LXC 等)提供一套轻便、高效、长期稳定的 API ,libvirt API 最初是用 C 语言实现的,在原生 C API 的基础上提供了 Python,Perl,Java,Ruby,PHP,C# 等众多语言的 API。本系列文章先介绍 C API,然后主要讲解 Java API。官方 Python API 的文档最全,本文的 Java API(2017-06-24 13:00 浏览 libvirt 官网找到 java API 文档) 讲解主要参考自 python API。

libvirt 术语

在介绍 API 之前,先了解一下 libvirt 中几个重要的术语,如表所示。

名词解释
Hypervisor 一个虚拟机的软件层,也称为虚拟机监视器(VMM)
Domain 域,在 Hypervisor 上运行的一台客户机操作系统实例。客户机操作系统(Guest OS)和虚拟机(Virtual Machine)同义
Node 节点,一台物理机,也就是宿主机,上面运行着多台虚拟机。Hypervisor 和 Domain 都运行在 Node 之上
Storage pool 存储池,比如物理硬盘。存储池可被划分为小的容器,称作存储卷。通常是宿主机(物理机)的硬盘,默认名称为 default
Storage Volume 存储卷,从存储池分配的存储空间。一个存储卷被分配给一个域,通常被作为域的虚拟硬盘,实际使用中主要是 qcow2 镜像文件

Node、Hypervisor、Domain、Storage Pool 和 Storage Volume 之间的关系如图所示。
图1

libvirt C API

libvirt C API 可分为如下几类。

  • 连接 Hypervisor 的 API,以 virtConnect 开头的一系列函数;
  • Domain(客户机)管理 API,以 virtDomain 开头的一系列函数;
  • Node(宿主机)管理 API,以 virtNode 开头的一系列函数;
  • 网络管理 API,以 virtNetwork 和 virtInterface 开头的一系列函数;
  • 存储卷管理 API,以 virtStorageVol 开头的一系列函数;
  • 存储池管理 API,以 virtStorage Pool 开头的一系列函数;
  • 事件管理 API,以 virtEvent 开头的一系列函数。

libvirt Java API

Java 本身不能与用 C 开发的函数库直接交互,但我们仍然要使用 libvirt C 库。这时,JNI(Java Native Interface,Java 本地接口)就派上用场了,它可以与使用 C、C++ 开发的函数库进行交互。然而 JNI 很麻烦,可移植性糟糕。于是出现了 JNA(Java Native Access),它本质上是 JNI 的一个抽象层,JNA 在功能上和 JNI 相差无几。相比于 JNI,它开发简便,不需要编写额外的本地代码,直接在接口中调用 C 的函数。这样 libvirt Java API 调用 libvirt C API 的过程就变成了:Java 微服务=>libvirt Java API=>JNA=>JNI=>libvirt C API。

libvirt Java API 可分为如下几类。

  • 连接 Hypervisor 的 API,与 Connect 对象相关的属性与方法。
  • Domain(客户机)管理 API,与 Domain,DomainInfo 等 Domain 开头的对象相关的属性与方法。
  • Node(宿主机)管理 API,与 Connect,NodeInfo 对象相关的属性与方法。
  • 网络管理 API,与 Network,Interface 开头的对象相关的属性与方法。
  • 存储卷管理 API,与 StorageVol,StorageVolInfo 对象相关的属性与方法。
  • 存储池管理 API,与 StoragePool,StoragePoolInfo 对象相关的属性与方法。
  • 事件管理 API,暂未发现有 Java API 事件管理相关 API。

libvirt 动态链接库安装

针对 java 微服务程序所在的服务器或容器未安装 libvirt-bin 的情况,若已安装 libvirt-bin 可忽略本节。

使用 libvirt Java API 管理虚拟机,Java 微服务程序所在的服务器或容器需要安装 libvirt 的动态链接库,在 Ubuntu 16.04 下使用 APT 源和 Docker 容器的方式安装 libvirt-dev 包。

Linux 系统环境

虚拟机:VMware 12.1.0
系统版本:Ubuntu 16.04 64 位

APT 源安装

sudo apt-get install -y libvirt-dev

安装完成后,在 usr/lib 或 /usr/lib/x86_64-Linux-gnu 中可以看到以 libvirt 开头的相关链接库文件。如图所示。

图1

docker 容器安装(如不使用 docker 容器可忽略)

提供一种基于 Java 基镜像制作 libvirt-dev 基镜像的方法。

制作 libvirt-dev 镜像的 Dockerfile 文件内容如下。

FROM java

MAINTAINER kyyee "kyyeeyoung@163.com"

RUN apt-get update -y
RUN apt-get upgrade -y

# Installing the Dynamic Link Library: libvirt-dev
RUN apt-get install -y libvirt-dev

# clean the backup
RUN apt-get clean

在安装 libvirt-dev 过程中有一个 Error,但这个基镜像仍然可以正常使用,暂不知道会有什么其他影响。

后续的微服务程序可基于此基镜像打包。

项目加入 jar 包依赖

maven

引入 JNA 和 libvirt Java SDK 库。

mvnrepository 搜索 libvirt,选择最新版本 0.5.1,网页下面可以看到 JNA 依赖,JNA 的依赖版本为 3.5.0,也可引入 JNA 最新版 4.4.0

<!-- https://mvnrepository.com/artifact/org.libvirt/libvirt -->
<dependency>
    <groupId>org.libvirt</groupId>
    <artifactId>libvirt</artifactId>
    <version>0.5.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/net.java.dev.jna/jna -->
<dependency>
    <groupId>net.java.dev.jna</groupId>
    <artifactId>jna</artifactId>
    <version>3.5.0</version>
</dependency>

gradle

和 maven 类似,不在过多介绍。

// https://mvnrepository.com/artifact/org.libvirt/libvirt
compile group: 'org.libvirt', name: 'libvirt', version: '0.5.1'
// https://mvnrepository.com/artifact/net.java.dev.jna/jna
compile group: 'net.java.dev.jna', name: 'jna', version: '3.5.0'

jar 直接导入

jar 下载传送门:JNAlibvirt Java SDK,下载后复制到 libs 然后加入到 classpath 即可使用。依然推荐使用 maven 或 gradle 的方式管理项目依赖,关于 gradle 的使用可参考:传送门

linux
【内容导航】
第1页:KVM/QEMU区别与libvirt简介 第2页:u 16.04安装QEMU与libvirt
第3页:libvirt C/Java API介绍与jna/libvirt Java SDK引入 第4页:libvirt Java API使用详解
第5页:解决Unable to load library 'virt'
相关资讯       libvirt  libvirt Java API 
本文评论   查看全部评论 (0)
表情: 表情 姓名: 字数

       

评论声明
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款