Skip to main content
NetApp virtualization solutions
日本語は機械翻訳による参考訳です。内容に矛盾や不一致があった場合には、英語の内容が優先されます。

QEMUとLibvirtを使用したKVM仮想化について学ぶ

共同作成者 netapp-jsnyder kevin-hoke

KVM 仮想化について、またそれが QEMU および Libvirt と連携して包括的な Linux 仮想化プラットフォームを作成する方法について学習します。これらのコンポーネントにより、エンタープライズ環境のコンピューティング、ストレージ、ネットワーク リソースの柔軟な管理機能を提供しながら、ネイティブに近いパフォーマンスの仮想マシンを実現する方法を説明します。

コンポーネントの概要

  1. KVM (カーネルベースの仮想マシン):

    • 役割: KVM は、CPU のハードウェア支援仮想化拡張機能 (Intel VT-x や AMD-V など) を活用してコア仮想化機能を提供するカーネル モジュールです。

    • 機能: KVM を使用すると、Linux カーネルがタイプ 1 ハイパーバイザーとして機能し、CPU およびメモリ操作のネイティブに近いパフォーマンスで仮想マシンを作成および管理できるようになります。

    • 最下位層: KVM は最下位レベルのコンポーネントであり、ハードウェアと直接対話して、完全な仮想化に必要なインフラストラクチャを提供します。

  2. QEMU (クイックエミュレータ):

    • 役割: QEMU は、ネットワーク インターフェイス、ディスク コントローラー、グラフィック カードなど、ゲスト システムのその他の仮想化ハードウェア コンポーネントを提供するマシン (ハードウェア) エミュレーターです。

    • 機能性: KVM が利用できない場合、QEMU はタイプ 2 ハイパーバイザーとして動作できますが、ゲスト CPU をソフトウェアでシミュレートする必要があるため、速度が大幅に低下します。 KVM と組み合わせると、QEMU は KVM を使用して CPU とメモリの操作を高速化し、QEMU は周辺機器やその他のハードウェア デバイスのエミュレーションを処理します。

    • KVM との対話: QEMU は、ioctl() システム コールを使用してデバイス ファイル (例: /dev/kvm) を介して KVM と対話し、仮想マシン プロセスを管理して KVM と通信します。

  3. "リブバート"

    • 役割: Libvirt は、KVM/QEMU、Xen、VMware ESXi などのさまざまな仮想化プラットフォームに高レベルの管理インターフェイスを提供する仮想化ライブラリおよび API です。

    • 機能性: Libvirt は、統一されたインターフェースとツール セットを提供することで、仮想マシンの管理を簡素化します。これは抽象化レイヤーとして機能し、ユーザーとアプリケーションが基盤となるハイパーバイザーの特定のコマンドや API と直接対話することなく VM を管理できるようにします。

    • 主な機能:

      • VM ライフサイクル管理: VM の起動、停止、一時停止、保存、復元、移行。

      • リモート管理: SSH またはその他のプロトコルを介してリモート ホスト上の VM を制御します。

      • ストレージ管理: VM のストレージ プールとボリュームを作成および管理します。

      • 仮想ネットワーク: NAT、ブリッジ、その他のモードを使用して仮想ネットワークを構成します。

      • セキュリティ: VM のセキュリティ制限のために SELinux および AppArmor と統合します。

      • ホットプラグ: VM の実行中にディスクやネットワーク インターフェイスなどのデバイスを追加または削除します。

      • ツール: Libvirt には、VM を管理するための virsh などのコマンドライン ツールと virt-manager などのグラフィカル ツールが含まれています。

    • どのように連携するか:

      • KVM: カーネルレベルの仮想化インフラストラクチャを提供します。

      • QEMU: エミュレートされたハードウェアを提供し、VM プロセスを管理します。

      • Libvirt: 管理レイヤーとして機能し、KVM/QEMU やその他のハイパーバイザーを制御するための API とツールを提供します。

    • 本質的には、KVM は仮想化のためのハードウェア アクセラレーションを提供し、QEMU はエミュレートされたハードウェアを提供し VM を実行し、Libvirt はセットアップ全体を制御するためのユーザーフレンドリーな管理インターフェイスと API を提供します。

Libvirt クライアント ツールを使用すると、コックピット マシンを使用して CLI、GUI、または Web ベースから VM または操作を管理できます。 libvirtを使用するアプリケーションのリストについては、 "ここをクリックしてください。"

アプリケーションが Kubernetes 環境に移行するときは、Kubevirt を検討して、それらの環境で仮想マシンをポッドとして実行してください。

クラスター管理

通常、Virtualization Manager または virsh cli ツールは一度に 1 つのホストを管理します。クラスター内の複数のホストを管理するには、oVirt、CloudStack、OpenStack などの高レベルのアプリケーションがよく使用されます。これらのツールは、VM の配置と負荷の分散に役立ちます。小規模なクラスター環境で特定の VM の高可用性を求める場合は、Pacemaker と Corosync を使用するか、管理スタック オプションを確認します。

管理コンポーネントを備えた Libvirt スタック

コンピューティング

Libvirt は、仮想マシンのリソースと機能を管理するための包括的なフレームワークを提供します。これには、次の関連タスクが含まれます。

  1. 仮想マシン(ドメイン)管理:

    • ライフサイクル操作: Libvirt は、仮想マシン (libvirt 用語では「ドメイン」と呼ばれます) の状態を管理するための完全な操作セットを提供します。これには、VM の起動、停止、一時停止、再開、保存、復元、移行が含まれます。

    • XML 構成: 仮想マシンの構成は XML ファイルを使用して定義されます。 virsh や virt-manager などのツールを使用して、これらの XML 構成を作成、変更、削除できます。

    • リモート管理: SSH などのさまざまなネットワーク トランスポートをサポートする libvirt のリモート プロトコルを使用して、リモート ホスト上の仮想マシンを管理できます。

  2. リソースの割り当てと管理:

    • CPU 管理: Libvirt を使用すると、仮想 CPU の数の指定、CPU ピンニングの制御 (vCPU をホスト上の特定の物理 CPU に関連付ける)、CPU モードの管理 (ホストの CPU 機能をゲストに公開するホスト パススルーなど) など、ゲスト CPU を構成できます。

    • メモリ管理: 仮想マシンにメモリを割り当て、メモリのオーバーコミット (VM に割り当てられたメモリの合計がホストで使用可能な物理メモリを超えることを許可する) を構成できます。

    • ストレージ管理: Libvirt は、ディスク イメージ (qcow2、vmdk、raw などの形式)、NFS 共有、LVM ボリューム グループ、iSCSI 共有、raw ディスク デバイスなど、仮想マシンのさまざまなタイプのストレージを管理できます。

    • ホスト デバイス管理: SR-IOV や NPIV などの仮想化機能を含む、USB、PCI、SCSI、ネットワーク デバイスなどの物理および仮想ホスト デバイスを管理できます。

  3. 仮想ネットワーク:

    • 仮想ネットワーク スイッチ: Libvirt は、仮想マシンを相互に、またホスト ネットワークに接続するための仮想ネットワーク スイッチ (ブリッジ) を作成します。

    • ネットワーク モード: NAT、ブリッジ、分離、ルーティングなどのさまざまなネットワーク モードをサポートし、VM がネットワークと対話する方法を構成します。

    • ファイアウォール ルール: Libvirt は、ファイアウォール ルール (iptables を使用) を自動的に管理し、仮想ネットワークのネットワーク トラフィックを制御します。

  4. パフォーマンスの最適化:

    • CPU 固定: vCPU を特定の物理 CPU に固定すると、特に NUMA 環境でキャッシュ効率とパフォーマンスが向上します。

    • NUMA チューニング: ゲスト サイズを単一の NUMA ノード上のリソースの量に制限し、vCPU とメモリを I/O アダプタに接続されている同じ物理ソケットに固定することで、NUMA システムのパフォーマンスを最適化できます。

    • Hugepages: Hugepages を使用すると、小さなメモリ ページの管理に関連するオーバーヘッドが削減され、パフォーマンスが向上します。

  5. 他のツールとの統合:

    • virsh: libvirt と対話するためのコマンドライン インターフェイス。

    • virt-manager: 仮想マシンと libvirt リソースを管理するためのグラフィカル ツール。

    • OpenStack: Libvirt は、OpenStack でよく使用される仮想化ドライバーです。

    • サードパーティ ツール: クラウド管理プラットフォームやバックアップ ソリューションなど、他の多くのツールやアプリケーションでは、仮想マシンの管理に libvirt の API を活用しています。

KVM ハイパーバイザーを使用すると、通常 VM ゲストは十分に活用されていないため、CPU とメモリをオーバーコミットできます。ただし、パフォーマンスを向上させるには、監視してバランスを取る必要があります。

VM メタデータは /etc/libvirt/qemu に XML として保存されます。 VM は、virt-install または virsh cli を使用して作成できます。 UI を優先する場合、または上位管理スタックを使用する場合は、Virt-Manager を利用できます。

要約すると、libvirt は仮想化のコンピューティング面に対する包括的な管理レイヤーを提供し、仮想マシンのライフサイクルの制御、リソースの割り当て、ネットワークの構成、パフォーマンスの最適化、および他のツールやプラットフォームとの統合を可能にします。

ストレージ

VM ディスクは、ストレージ プール上で動的にプロビジョニングすることも、ストレージ管理者によって VM 用に事前にプロビジョニングすることもできます。 libvirt ではさまざまなプール タイプがサポートされています。適用可能なプール タイプとサポートされているストレージ プロトコルのリストを以下に示します。一般的な選択肢は dir です。次に netfs と logical です。iscsi と iscsi-direct は単一のターゲットを使用し、フォールトトレランスを提供しません。mpath はマルチパスを提供しますが、動的に割り当てられません。これは、vSphere の Raw デバイス マッピングのように使用されます。ファイルプロトコル(NFS/SMB/CIFS)の場合、マウントオプションは次のように指定できます。 "自動マウント"または fstab および dir プール タイプが使用されます。ブロック プロトコル (iSCSI、FC、NVMe-oF) の場合、ocfs2 や gfs2 などの共有ファイルシステムが使用されます。

ストレージ プロトコル ディレクター フェス ネットファイル 論理的 ディスク iscsi iSCSIダイレクト mpath

SMB / CIFS

はい

いいえ

はい

いいえ

いいえ

いいえ

いいえ

いいえ

NFS

はい

いいえ

はい

いいえ

いいえ

いいえ

いいえ

いいえ

iSCSI

はい

はい

いいえ

はい

はい

はい

はい

はい

FC

はい

はい

いいえ

はい

はい

いいえ

いいえ

はい

NVMe-oF

はい

はい

いいえ

はい

はい

いいえ

いいえ

いいえ1

注: 1 - 追加の構成が必要になる場合があります。

使用されるストレージ プロトコルに基づいて、ホスト上で追加のパッケージが利用可能である必要があります。サンプルリストはこちらです。

ストレージ プロトコル フェドーラ Debian パックマン

SMB / CIFS

sambaクライアント/cifs-utils

smbclient/cifs-utils

smbclient/cifs-utils

NFS

nfs-utils

nfs-共通

nfs-utils

iSCSI

iscsi-initiator-utils、device-mapper-multipath、ocfs2-tools/gfs2-utils

open-iscsi、マルチパスツール、ocfs2-tools/gfs2-utils

open-iscsi、マルチパスツール、ocfs2-tools/gfs2-utils

FC

sysfsutils、デバイスマッパーマルチパス、ocfs2-tools/gfs2-utils

sysfsutils、マルチパスツール、ocfs2ツール/gfs2ユーティリティ

sysfsutils、マルチパスツール、ocfs2ツール/gfs2ユーティリティ

NVMe-oF

nvme-cli、ocfs2-tools/gfs2-utils

nvme-cli、ocfs2-tools/gfs2-utils

nvme-cli、ocfs2-tools/gfs2-utils

ストレージ プールの詳細は、/etc/libvirt/storage の XML ファイルに保存されます。

vSphere環境からVMデータをインポートするには、"シフトツールキット"

ネットワーク

Libvirt は、仮想マシンとコンテナを管理するための強力な仮想ネットワーク機能を提供します。これは、仮想ネットワーク スイッチまたはブリッジの概念を通じて実現されます。

コア概念: * 仮想ネットワーク スイッチ (ブリッジ): これは、ホスト サーバー上のソフトウェア ベースのネットワーク スイッチのように機能します。仮想マシンはこのスイッチに接続し、トラフィックはスイッチを通過します。 * TAP デバイス: これらは、仮想マシンのネットワーク インターフェイスを libvirt ブリッジに接続する「仮想ケーブル」として機能する特別なネットワーク デバイスです。

  • ネットワーク モード: Libvirt はさまざまなニーズを満たすためにさまざまなネットワーク構成をサポートしています。

    • NAT (ネットワーク アドレス変換): これがデフォルトのモードです。 NAT ネットワークに接続された VM はホストの IP アドレスを使用して外部ネットワークにアクセスできますが、外部ホストは VM への接続を直接開始することはできません。

    • ブリッジ: このモードでは、仮想ネットワークはホストと同じネットワーク セグメントに直接接続されます。これにより、VM は物理ネットワークに直接接続されているかのように見えるようになります。

    • 分離: 分離されたネットワーク上の VM は相互に通信したりホストと通信したりできますが、ホスト外部にアクセスすることはできません。これはテストや安全な環境に役立ちます。

    • ルーティング: 仮想ネットワークからのトラフィックは、NAT を使用せずに物理ネットワークにルーティングされます。これには、ホストのネットワーク上で適切なルーティング構成が必要です。

    • オープン: ルーティング モードに似ていますが、libvirt によって自動的に適用されるファイアウォール ルールはありません。これは、ネットワーク トラフィックが他のシステムによって管理されることを前提としています。

  • DHCP と DNS: Libvirt は dnsmasq を使用して仮想ネットワークの DHCP サービスを管理できるため、VM に IP アドレスを割り当て、仮想ネットワーク内で DNS 解決を処理できます。

  • ファイアウォール ルール: Libvirt は、特に NAT モードで、仮想ネットワークのトラフィック フローを制御するために iptables ルールを自動的に設定します。

Libvirt ネットワークの管理:

  • virsh: virsh コマンドライン ツールは、ネットワークの一覧表示、開始、停止、定義、定義解除など、仮想ネットワークを管理するための包括的なコマンド セットを提供します。

  • 仮想マシン マネージャー (virt-manager): このグラフィカル ツールは、直感的なユーザー インターフェイスを使用して仮想ネットワークの作成と管理を簡素化します。

  • XML 構成: Libvirt は XML ファイルを使用して仮想ネットワークの構成を定義します。これらの XML ファイルを直接編集することも、virsh net-edit などのツールを使用してネットワーク構成を変更することもできます。

一般的な使用例:

  • NAT: 単一のネットワーク インターフェイスを持つホスト上の VM に対するシンプルで基本的な接続。

  • ブリッジ: VM を既存のネットワークにシームレスに統合します。

  • 分離: VM が外部からのアクセスを制限された安全な環境またはテスト環境を作成します。

  • ルーティング: 特定のルーティングが必要なより高度なシナリオ。

  • Open vSwitch (OVS): 高度なネットワーク管理と自動化を必要とする複雑で大規模な展開向け。

これらの機能を活用することで、libvirt は Linux 環境で仮想マシン ネットワークを管理するための柔軟で強力なフレームワークを提供します。

監視

NetApp Data Infrastructure Insights (旧称Cloud Insights) は、仮想マシンを含む IT インフラストラクチャの包括的な可視性を提供するクラウドベースのインフラストラクチャ監視および分析プラットフォームです。

Data Infrastructure Insights はNetAppストレージと VMware 環境の監視に重点を置いていることで知られていますが、他の種類のインフラストラクチャとワークロードを監視する機能も備えています。

NetApp Data Infrastructure Insightsを使用して Libvirt ベースの仮想マシンを監視する方法は次のとおりです。

  1. データ収集者:

    • Data Infrastructure Insights は、さまざまなデータ コレクターを使用してインフラストラクチャからデータを収集する Acquisition Unit ソフトウェアを通じて動作します。

    • Data Infrastructure Insights には、Kubernetes を含む異種インフラストラクチャとワークロード用のコレクターがあります。他のシステムとの統合を容易にするオープンな Telegraf コレクターとオープン API もあります。

  2. Libvirt との潜在的な統合:

    • カスタム データ収集: オープン Telegraf コレクターまたはData Infrastructure Insights API を使用して、Libvirt ベースのシステムからデータを収集できます。 API を使用して Libvirt からメトリックを収集するには、コレクターを作成または構成する必要があります (たとえば、virsh コマンド経由、または Libvirt の内部メトリックにアクセスすることによって)。

  3. Data Infrastructure Insightsによる Libvirt の監視の利点:

    • 統合された可視性: NetAppストレージと Libvirt ベースの VM の両方を含む仮想化環境の単一ビューを取得します。

    • パフォーマンス監視: VM 内部の問題か、VM をサポートする基盤となるインフラストラクチャに関連する問題かを問わず、パフォーマンスのボトルネックとリソース制約を特定します。

    • リソースの最適化: ワークロード プロファイルを分析して VM のサイズを適正化し、未使用のリソースを再利用し、環境全体でリソースの使用率を最適化します。

    • トラブルシューティング: VM パフォーマンス メトリックとバックエンド ストレージ メトリックを相関させてエンドツーエンドの可視性を実現し、問題を迅速に特定して解決します。

    • 予測分析: 機械学習を使用してインテリジェントな洞察を獲得し、パフォーマンスに影響する前に潜在的な問題を事前に特定します。

要約すると、 Data Infrastructure Insights はVMware を強力にサポートしていますが、カスタム データ コレクターを使用するか、オープン API を活用することで、Libvirt ベースの仮想化と統合することも可能です。これにより、Data Infrastructure Insightsプラットフォーム内の Libvirt 環境に対して、統合された可視性、強化されたパフォーマンス監視、およびリソース最適化機能が提供されます。

データ保護

NetApp ONTAPを使用した Libvirt ベースの仮想マシンのデータ保護は、いくつかの方法で実現できますが、多くの場合、ONTAP の組み込みデータ保護機能を活用します。一般的な戦略の内訳は次のとおりです。

  1. ONTAP のネイティブ データ保護機能の使用:

    • スナップショット: ONTAP のコアデータ保護テクノロジーはスナップショットです。これらは、最小限のディスク領域を必要とし、パフォーマンスのオーバーヘッドが無視できるほど小さい、データ ボリュームの高速なポイントインタイム コピーです。スナップショットを使用すると、Libvirt VM ディスクのバックアップを頻繁に作成できます ( ONTAPボリュームに保存されている場合)。

    • SnapMirror: SnapMirrorは、1 つのONTAPストレージ システムから別の ONTAP ストレージ システムに Snapshot コピーを非同期的に複製するために使用されます。これにより、リモート サイトまたはクラウドに Libvirt VM の災害復旧 (DR) コピーを作成できます。

    • SnapVault: SnapVaultは、複数のストレージ システムから中央のONTAPシステムにデータをバックアップするために使用されます。これは、さまざまなホストからの多数の Libvirt VM のバックアップを中央のバックアップ リポジトリに統合するのに適したオプションです。

    • SnapRestore: SnapRestore を使用すると、スナップショット コピーからデータをすばやく復元できます。これは、データの損失や破損が発生した場合に Libvirt VM を回復するために不可欠です。

    • FlexClone: FlexClone は、スナップショット コピーに基づいてボリュームの書き込み可能なコピーを作成します。これは、実稼働 VM データに基づいてテスト/開発環境を迅速に作成するのに役立ちます。

    • MetroCluster/ SnapMirrorアクティブ同期: 自動化されたゼロ RPO (リカバリポイント目標) とサイト間の可用性を実現するには、サイト間でストレッチ クラスターを作成できるONTAP MetroClusterまたは SMas を使用できます。

  2. サードパーティ製バックアップ ソリューションとの統合: 多くのサードパーティ製バックアップ ソリューションはNetApp ONTAPと統合され、仮想マシンのバックアップをサポートしています。これらのソリューションを使用すると、ONTAP のデータ保護機能を活用して、Libvirt VM をONTAPストレージにバックアップできます。たとえば、一部のバックアップ ソリューションでは、高速なエージェントレス バックアップのために ONTAP のスナップショット テクノロジーを使用しています。

  3. スクリプトと自動化: Libvirt VM ボリュームのONTAPスナップショットを作成するプロセスを自動化するスクリプトを作成できます。これらのスクリプトは、ONTAP のコマンドライン インターフェイスまたは API を活用してストレージ システムと対話できます。

重要な考慮事項:

  • 保存場所: ONTAP のデータ保護機能を活用するには、Libvirt VM ディスク イメージをONTAPボリュームに保存する必要があります。

  • ネットワーク接続: Libvirt ホストとONTAPストレージ システム間のネットワーク接続を確認します。

  • HBA 管理: ストレージ接続にファイバー チャネル (FC) を使用する場合は、Libvirt ホストに必要な HBA 管理パッケージがインストールされていることを確認してください。

  • 監視とレポート: データ保護操作を監視し、正常に完了していることを確認します。 Libvirt の機能と ONTAP の強力なデータ保護機能を組み合わせることで、仮想化環境に包括的なデータ保護戦略を実装できます。