KVM は新星として、OpenStack の二次開発に基づく多数のクラウド ベンダーなど、パブリック クラウド ハイパーバイザー市場を支配しています。ベテランの商用 VMware は、プライベート クラウド ハイパーバイザー市場を支配しており、依然として中小企業がプライベート クラウドを構築するための最初の選択肢となっていますが、現在は Hyper-V の挑戦にもさらされています。
ハイパーバイザー仮想化テクノロジには、KVM、QEMU、VMware、XEN、HyperV などの多くの実装方法があり、テクノロジが異なると、提供されるドライバや API も多様になり、異なります。非常に多くのハイパーバイザーがある場合、これらのハイパーバイザーを均一に管理するための統合 API インターフェイスを提供するツールはありますか? これがクラウド機能の鍵です。
コンピューター科学者の David Wheeler には、「コンピューター サイエンスにおけるあらゆる問題は、中間層を追加することで解決できる。」という有名な言葉があります。では、中間層を追加することで、基盤となるハイパーバイザー テクノロジを改善できるでしょうか? 違いを保護し、統合された API インターフェイスを提供します。上位層の管理ツール。答えは「はい」です。
Libvirt はそのようなツールであり、基礎となるハイパーバイザーと上位レベルの管理ツールの間の中間層を提供します。Libvirt は中間層として、さまざまな仮想マシンを最下層で均一にカプセル化し、上位層の管理ツールに統一された API を提供することで、仮想マシンの管理を便利に実現します。そのアーキテクチャを図 1 に示します。
使用される用語の曖昧さを避けるために、libvirt ドキュメントで使用されるいくつかの特定の概念の定義を次に示します。
コンセプト | 意味 |
---|---|
ノード | これは、ノード上でハイパーバイザーとドメインが実行されている物理マシンを指します。 |
ハイパーバイザー | これは、複数の仮想マシンを実行できるようにノードを仮想化する、仮想マシン モニターとも呼ばれる仮想化ソフトウェア層を指します。 |
域(Domain) | これはハイパーバイザー上で実行されるオペレーティング システム インスタンスであり、通常は仮想マシンです。 |
ノード、ハイパーバイザー、ドメイン間の関係は、図 2 を使用して簡単に表すことができます。
1. Libvirt の概要
1.1. Libvirt オープンソース ソフトウェア
Libvirt は無料のオープン ソース ソフトウェアであり、使用されるライセンスは LGPL です。libvirt API ライブラリを使用して呼び出すソフトウェア プログラムは、オープン ソースを選択して GPL ライセンスに準拠する必要はありません。
Libvirt は、仮想化プラットフォームを管理するための API、デーモン、および管理ツールであるソフトウェアのコレクションです。
Libvirt は仮想マシン管理、仮想化ネットワーク、ストレージ管理を実現できます。
1.2. libvirt の主な目標
Libvirt の主な目標は、基盤となるさまざまなハイパーバイザーに統合 API を提供し、上位層の管理ツールが複数の異なる仮想化テクノロジーを単一の方法で管理できるようにすることです。
1.3. libvirt の主要コンポーネント
Libvirt には、長期的に安定した C 言語 API ライブラリ、デーモン プロセス (libvirtd)、およびデフォルトのコマンド ライン ツール (virsh) を含む 3 つの主要コンポーネントがあります。
Libvirt API は、他の仮想マシン管理ツール (virsh、virt-manager など) に仮想マシン管理サポートを提供するソフトウェア ライブラリです。
Libvirtd デーモンは、ノード上のドメインの管理を担当します。virsh や virt-manager などの管理ツールはすべて、ハイパーバイザーと構成ファイルに間接的にアクセスするために libvirtd デーモンに依存する必要があるため、このデーモンが実行されている必要があります。 process を実行すると、virsh や virt-manager などの管理ツールは使用できなくなります。
Virsh は、libvirt オープン ソース プロジェクトの仮想マシン管理用のデフォルトのコマンド ライン ツールです。これについては、後続の章で詳しく説明します。
1.4. libvirt の主な機能
Libvirt の主な機能には、次の 5 つの部分が含まれます。
- ドメイン管理、起動、停止、一時停止、保存、復元、移行などのさまざまな仮想マシンのライフサイクル操作、ディスク、ネットワーク インターフェイス、メモリ、CPU などのさまざまな種類のデバイスのホットプラグ操作。
- リモート接続の場合、libvirt のすべての機能は、リモート物理ノードを含め、libvirtd デーモンを実行しているマシン上で実行できます。libvirt は、SSH、TCP プロトコル、TLS 暗号化送信など、さまざまなリモート ネットワーク接続方法をサポートしています。
- ストレージ管理: libvirtd デーモンを実行しているノードは、libvirt を使用して、さまざまなタイプのファイル イメージ (qcow2、vmdk、raw、qde、vmdk など) の作成、NFS 共有のマウント、既存の LVM の表示など、さまざまなタイプのストレージを管理できます。ボリュームグループ、新しいLVMボリュームグループと論理ボリュームの作成、ディスクデバイスのパーティション分割、iSCSI共有のマウント、CephシステムでサポートされるRDBリモートストレージの使用など。libvirt では、ストレージ管理はリモート管理もサポートします。
- ネットワーク管理、libvirtd デーモンを実行しているノードは、libvirt を使用して、物理および論理ネットワーク インターフェイスの管理、既存のネットワーク インターフェイスの表示、ネットワーク インターフェイスの構成、ブリッジ管理、VLAN 管理、ポート バインディングなどを行うことができます。
- 仮想 NAT およびルーティング ネットワークに基づいて、libvirtd デーモンを実行しているノードは、libvirt を通じて仮想ネットワークを管理および作成できます。libvirt 仮想ネットワークは、ファイアウォール ルールを使用してルーターを実装し、仮想マシンにホスト ネットワークへの透過的なアクセスを提供します。
1.5. libvirt 言語バインディング
Libvirt は、C、C++、C#、Go、Java、OCaml、Perl、PHP、Python、Ruby、D-Bus およびその他の言語を含む複数の言語パッケージをサポートしており、開発と統合に非常に便利です。
1.6. libvirt によってサポートされる仮想化
Libvirt は、KVM、QEMU、Xen、VMware、VirtualBox、Hyper-V などのプラットフォーム仮想化や、OpenVZ や LXC などのコンテナ仮想化を含む、さまざまな仮想化テクノロジをサポートします。
1.7. libvirt がサポートするオペレーティングシステム
Libvirt は、Linux、FreeBSD、Windows、OS-X などのさまざまなオペレーティング システムをサポートします。
2. Libvirt管理ツールの概要
Libvirt は業界で広く使用されており、Libvirt API に基づく管理ツールには、図 1 に示すように、コマンド ライン ツール、グラフィカル ツール、Web 管理ツール、クラウド管理プラットフォーム ツールなどが含まれます。
2.1. libvirt API に基づくコマンドラインツール
libvirt の公式 Web サイトによると、libvirt API に基づくコマンド ライン ツールの統計は表 1 に示されています。
名前 | 意味 |
---|---|
ゲストフィッシュ | Guestfish は、仮想マシンのファイル システムを検査および変更するための対話型シェルおよびコマンド ライン ツールです。libvirt を使用して、仮想マシンとそれに関連するディスクを検索します。 |
バーシュ | Virsh は、ドメイン、ネットワーク、およびストレージの管理に使用できる対話型シェルおよびバッチ スクリプト ツールであり、libvirt コア ディストリビューションの一部です。 |
仮想クローン | ディスク イメージと既存の仮想マシンの構成のクローンを作成して、新しい仮想マシンを形成できます。データが新しいディスク イメージに自動的にコピーされ、構成内の UUID、MAC アドレス、および名前が更新されます。 |
virt-df | 仮想マシン内の各ファイル システムの使用率を確認します。このツールは、仮想マシンのディスクを調べて、使用されているスペースの量を判断し、一般的な Linux ファイル システムと LVM ボリュームを処理できます。 |
仮想イメージ | 仮想アプライアンスを展開する方法を提供します。libvirt では、仮想マシン (ドメイン) の構成は移植可能な XML 形式で記述され、デプロイメント時に仮想マシンの構成が XML 形式に変換されます。 |
仮想インストール | これは、仮想マシンをインストールするための便利で使いやすい方法を提供し、CD および ISO イメージを介したローカル構成だけでなく、NFS、HTTP、および FTP を介したリモート構成もサポートします。 |
仮想トップ | これは、仮想マシンの実行ステータスと、CPU、メモリ、ネットワーク、ディスクの使用率などのリソース使用状況を表示するために使用されるツールです。 |
仮想何 | 仮想化プラットフォームの種類を検出するために使用されるシェル スクリプト。QEMU/KVM、VMware、Hyper-V、VirtualBox、OpenVZ/Virtuozzo、Xen、LXC、IBM PowerVM、Parallels などのプラットフォームの種類を検出できます。 |
ステップ | SystemTap は、実行中の Linux カーネルの動作を監視および追跡するための動的な方法であり、バージョン 2.4 以降、フロントエンド アプリケーション stap は libvirt を通じて仮想マシン データを収集できます。 |
vagrant-libvirt | Vagrant-Libvirt は、仮想マシン環境を非常に迅速かつ簡単に展開および再展開できる開発者向けのコマンドライン ツールである libvirt を通じて仮想マシンを管理する Vagrant プラグインです。 |
仮想ライトニング | Virt-Lightning は、libvirt、cloud-init、および libguestfs を使用して、誰でも新しい仮想マシンをすばやくスピンアップできるようにします。コンテナ CLI によく似ていますが、仮想マシンを使用します。 |
2.2. libvirt API に基づく移行ツール
libvirt の公式 Web サイトによると、libvirt API に基づく移行ツールの統計は表 2 に示されています。
名前 | 意味 |
---|---|
virt-p2v | P2V 移行は、物理マシンから仮想マシンへの移行です。virt-p2v 移行とは、物理マシンを KVM 仮想マシンに移行することであり、virt-p2v ツールは libguestfs に含まれています。 |
virt-v2v | V2V 移行は、異なる仮想化環境間の移行です。次に、virt-v2v の移行は仮想マシン (Xen、VMware) -> KVM 仮想マシンであり、virt-p2v ツールは libguestfs に含まれています。 |
vmware2libvirt | virt-goodies パッケージの一部である vmware2libvirt は、vmware イメージを libvirt に移行するための Python スクリプトです。 |
2.3. libvirt API に基づくグラフィカルツール
libvirt の公式 Web サイトによると、libvirt API に基づくグラフィカル ツールの統計を表 3 に示します。
名前 | 意味 |
---|---|
仮想マネージャー | これは、ローカルおよびリモート アクセス全体で仮想マシンを管理できる汎用のデスクトップ管理ツールで、主に個人および小規模オフィスのシナリオで使用され、最大 10 ~ 20 台のホストとそのホストの仮想マシンを管理できます。 |
virt-v2v | V2V 移行は、異なる仮想化環境間の移行です。次に、virt-v2v の移行は仮想マシン (Xen、VMware) -> KVM 仮想マシンであり、virt-p2v ツールは libguestfs に含まれています。 |
仮想ビューア | これは、仮想マシンを表示するためのグラフィカル インターフェイス ツールで、GTK-VNC または SPICE-GTK プロトコルを使用し、libvirt API を使用して仮想マシンの VNC または SPICE サーバー側の情報をクエリします。これは、従来の VNC クライアント ビューアの置き換えによく使用されます。これは、後者は通常、x509 認証認可による SSL/TLS 暗号化をサポートしていないのに対し、virt-viewer はサポートしているためです。 |
qt-virt-manager | VM、別の仮想エンティティ (ネットワーク、ストレージ、インターフェイス、シークレット、ネットワーク フィルターとも呼ばれます) を作成および制御するための Qt GUI。仮想マシンまたはコンテナに関連付けられたテキスト コンソールにアクセスするための統合された LXC/SPICE/VNC ビューア。 |
qt-remote-viewer | 用于访问远程桌面或虚拟机的Qt VNC/SPICE查看器。 |
2.4. IaaS云计算管理平台工具
根据libvirt官方网站的显示,基于libvirt API的IaaS云计算管理平台工具统计如表4所示。
名称 | 释义 |
---|---|
Cracow Cloud One | CC1系统为私有云计算提供了完整的解决方案。带有管理模块和简单安装程序的直观Web访问界面使您可以轻松受益于私有云计算技术。 |
Eucalyptus | Eucalyptus 是一个开源的,与AWS兼容的,本地部署的IaaS云软件平台。Eucalyptus使用libvirt 虚拟化 API直接与 Xen 和 KVM 管理程序交互。 |
Nimbus | Nimbus是一个开源工具包,专注于为科学界提供IaaS功能,它使用libvirt与所有KVM和Xen虚拟机进行通信。 |
Snooze | Snooze是一个开源的、可扩展的、自动化的、节能的虚拟机管理框架,主要用于私有云。Snooze使用libvirt API实现虚拟机的监控、实时迁移和生命周期管理。 |
OpenStack | CC1系统为私有云计算提供了完整的解决方案。带有管理模块和简单安装程序的直观Web访问界面使您可以轻松受益于私有云计算技术。 |
Cracow Cloud One | OpenStack是一个“云操作系统”,可用于公共云和私有云。它的各个部分负责计算、存储和网络资源,并使用仪表板与用户交互。计算部分使用libvirt来实现 虚拟机的监控、生命周期等的管理。 |
KubeVirt | KubeVirt是个Kubernetes的一个虚拟机管理插件,使其在原本调度容器之余能够并行调度传统虚拟机。 |
Cherrypop | Cherrypop是一个去中心化的云软件,节点自动检测其他节点并自动分配虚拟机和工作负载,宿主机也没有最低限制,非常适合在低端服务器架设云。 |
ZStack | ZStack是一款开源IaaS软件,旨在通过使用API自动管理数据中心内的所有资源(计算、存储、网络等),从而符合软件定义数据中心的原则。ZStack 在管理方面的主要优势是可扩展性、性能和快速、用户友好的部署。 |
2.5. 软件库工具
根据libvirt官方网站的显示,基于libvirt API的软件库工具统计如表5所示。
名称 | 释义 |
---|---|
libguestfs | Libguestfs是用于访问和修改虚拟机磁盘镜像的一组工具集,它提供了访问和编辑虚拟机中的文件、脚本化修改虚拟机中的信息、监控磁盘使用和空闲的统计信息、P2V、V2V等丰富的功能。 |
libvirt-sandbox | 一个库和命令行工具,用于简化虚拟化沙箱的创建,目前支持 KVM、QEMU 或 LXC 作为后端,与 systemd 的集成有助于对 apache 等系统服务进行沙箱化。 |
Ruby Libvirt Object bindings | 允许使用简单的 ruby 对象来操作管理程序、访客、存储、网络等。它基于本地 ruby 绑定。 |
2.6. 监控工具
根据libvirt官方网站的显示,基于libvirt API的监控工具统计如表6所示。
名称 | 释义 |
---|---|
collectd | Libvirt-plugin是collectd的一部分,并收集统计虚拟机操作系统信息。通过这种方式,可以搜集每个虚拟机的CPU、网络接口和块设备使用情况,而无需在虚拟机系统上安装collectd。 |
host sFlow | Host sFlow是一个在KVM管理程序上运行的轻量级代理,它链接到libvirt库并导出所有虚拟机的标准化CPU、内存、网络和磁盘指标。 |
munin | Guido Günther提供的插件允许使用Munin监控各种事物,例如网络和阻止 I/O。 |
nagios-virt | Nagios-virt是一个配置工具,用于向Nagios添加对虚拟化域的监控。您可以使用此工具为Xen或QEMU/KVM虚拟机设置新的Nagios安装,或者与现有的Nagios 安装集成。 |
PCP | PCP libvirt PMDA(插件)是PCP工具包的一部分,提供虚拟机管理程序和虚拟机信息以及完整的虚拟机性能指标集。它支持每个虚拟机的pCPU、vCPU、内存、块设备、网络接口和性能事件指标。 |
2.7. Web管理工具
根据libvirt官方网站的显示,基于libvirt API的Web管理工具统计如表7所示。
名称 | 释义 |
---|---|
AbiCloud | AbiCloud是一个开源云平台管理器,允许在您的数据中心轻松部署私有云。AbiCloud的主要区别之一是用于管理基础架构的丰富的网络界面,您只需拖放 虚拟机即可部署新服务。 |
Kimchi | Kimchi是一个基于HTML5的KVM管理工具。它旨在尽可能简单地使用KVM并创建您的第一个虚拟机。Kimchi通过libvirt管理KVM虚拟机,使用支持HTML5的浏览器通过Web访问管理界面。 |
oVirt | oVirt是一个私有云平台软件,提供了中型规模集群主机管理能力,可做服务器虚拟化,也可桌面虚拟化。 |
VMmanager | VMmanager是一种用于虚拟化管理的软件解决方案,可用于托管虚拟机和构建云。VMmanager不仅可以管理一台服务器,还可以管理大型虚拟机管理程序集群。它提供了许多功能,例如允许在集群节点之间进行负载平衡的实时迁移、监控 CPU、内存。 |
mist.io | Mist.io是一个开源项目和服务,可以帮助您以统一的方式管理您的虚拟机,为您的所有基础架构(多个公共云提供商、基于OpenStack的公共/私有云、Docker 服务器、裸机服务器和现在的 KVM 管理程序)。 |
Ravada | Ravada是用于管理虚拟桌面基础架构(VDI)的开源工具。它非常容易安装和使用。按照文档,您将在几分钟内准备好部署虚拟机。对用户的唯一要求是Web浏览器和轻量级远程查看器。 |
3. Libvirt API介绍
Libvirt的核心功能就是提供一套统一的API用来管理虚拟机,libvirt API主要划分为五个大类,如图3所示。
- virConnectPtr は
ハイパーバイザーとの接続確立を示し、virConnectOpen 関数を呼び出すことでハイパーバイザーとの接続が確立され、接続確立後はハイパーバイザーの仮想マシンを管理できるようになります。ハイパーバイザー API への接続は、他のすべての API を使用するための前提条件です。 - virConnectPtr は、
アクティブまたは定義されたドメインを表します (つまり、永続的な構成ファイルおよびストレージとして存在しますが、現在ノード上で実行されていません)。ドメインを管理するには、まずドメイン オブジェクト virConnectPtr を取得する必要があります。その後、ドメインを操作できるようになります。ドメイン オブジェクト virConnectPtr を取得した後、ドメイン クエリ、ドメイン ライフ サイクル制御、およびその他の操作を実行できます。 - virNetworkPtr は、
アクティブなネットワークまたは定義されたネットワークを表します (つまり、永続的な構成ファイルおよびストレージとして存在しますが、現在はアクティブではありません)。libvirt は、仮想ネットワークをクエリまたは制御する前に、まず virNetworkPtr オブジェクトを作成する必要があります。 - virStorageVolPtr は
、ストレージ ボリューム (通常はドメイン ブロック デバイス、つまりイメージ ファイル) を表します。libvirt によるストレージ ボリュームの管理は主にドメイン イメージ ファイルの管理であり、これらのイメージ ファイルの形式には raw、qcow2、vmdk、qed などが含まれます。libvirt を使用してストレージ ボリュームを管理するには、まずストレージ ボリューム オブジェクト virStorageVolPtr を作成する必要があります。その後、それをクエリまたは制御できるようになります。 - virStoragePoolPtr は
ストレージ プールを表します。ストレージ プールは、ストレージ ボリュームの割り当てと保存に使用される論理領域です。Libvirt のストレージ プールの管理には、ローカルの基本ファイル システム、通常のネットワーク共有ファイル システム、iSCSI 共有ファイル システム、LVM パーティションなどの管理が含まれます。libvirt は、クエリおよび制御操作を実行するために、ストレージ プール オブジェクト virStoragePoolPtr に基づいている必要があります。