KVMとは
KVMとは、Kernel-based Virtual Machineの略称で、Linuxカーネル上で動作する仮想化技術のことである。RedHatが中心となり、OSSのソリューションとして開発が進められてきた。
仮想基盤としてはVMWare製品が有名であるが、RedHat Enterprise Linux 7やCentOS 7のKVMの管理ソフトウェアであるvirt-managerは、VMWareと比べると機能的にも劣っていた。しかし、RedHatの製品であるRedHat Virtualizationは、機能改善が進み、KVMを使った仮想基盤として非常に使いやすいものとなっている。また、RedHat Virtualizationのコミュニティ版の位置付けであるoVirtもリリースされている。そのため、KVMはVMWare以外のソリューションとして注目されている。
KVMの稼働条件
KVMは、Linuxカーネルの2.6.20以降では、カーネル内に標準搭載され、カーネルモジュールとして動作する。Intel VT、AMD-VのどちらかのCPUの仮想化支援機構が必須である。ただし、PowerPC、IA-64などへも移植されている。KVM上では、Linux、BSD、Solaris、Windowsなど、多くのOSが動作する。
KVMの歴史
KVMは、当初Qumranet社のAvi Kivity氏が開発を始め、2006年に公開された。IBMのエンジニアが準仮想化の実装であるVirtIOを開発し、入出力を高速化することに成功した。その結果、仮想ブロックデバイスと仮想ネットワークの性能が飛躍的に向上したと言われている。
2007年にはLinux Kernel 2.6.20にマージされた。2008年には、RedHatがQumranetを買収し、Qumranetは、RedHatの子会社となっている。2009年には、Red Hat Enterprise Linux 5.4で正式に採用された。2010年にリリースされたRed Hat Enterprise Linux 6以降は、一貫してKVMが採用されている。また、このころから各種のパブリッククラウドの基盤として採用されるようになった。
KVMの仕組みと優位性
KVMは、Linuxカーネルに完全に組み込まれている。そのため、Linuxカーネルその物がハイパーバイザーとして動作する。仮想マシンは、Linux上のプロセスとして/dev/kvmというデバイスドライバを経由して動作する。
ハイパーバイザーには、仮想マシンを動かすための機能として、メモリ管理、プロセス管理、スケジューラ、入出力管理、デバイス管理、セキュリティ管理、ネットワークスタックなど、本来はOSが提供する機能が必要になる。しかし、KVMでは、これらの機能はLinuxに実装されているものを、そのまま利用する。このことは、他のハイパーバイザーと比べて、非常に優れている。
KVMとVMWare ESXiとの違い
VMWare ESXiは、専用のハイパーバイザーとして開発されている。そのため、様々な管理機能やデバイスドライバは、独自に開発する必要がある。その結果、対応するハードウェアが限定されてしまったり、新しいハードウェアへの対応には時間が掛かる。セキュリティの対応についても、独自に行われる。
KVMとXenやHyper-Vとの違い
XenやHyper-Vなどの実装では、各種のデバイスドライバのエミュレーションや仮想サーバの管理に専用のプロセスを割り当てて処理を行う。そのため、この管理プロセスに様々な処理を実装しなければならない。
KVMアーキテクチャーの長所
KVMでは、デバイスドライバを初め、すべてのLinuxカーネルの提供する機能が利用できる。そのため、新しい技術をいち早く取り入れられ、安定性としても優れている。セキュリティ問題への対応も迅速に行うことができる。また、オーバーヘッドも少ないため、効率よく高速に動作する。こうしたことから、OpenStackなどの仮想基盤で利用するハイパーバイザーとしては、KVMが採用されることが多い。
KVMの機能と特徴
KVMでは、次のような機能的な特徴がある。
高速なハイパーバイザー
KVMは、Linuxのリアルタイム処理の技術を利用する。そのため、仮想マシンの切り替えや制御をきめ細かく行うことができる。その結果、仮想マシンの性能を最大限に引き出すことができる。
リソース管理
KVMでは、仮想マシンはLinuxプロセスとして動作する。そのため、Linuxの機能を利用して、仮想マシンに割り当てられるリソースを細かく管理することができる。例えば、cgroupの機能を使って、割り当てられる仮想CPUの数や、使用比率などを制御することができる。
メモリ管理もLinuxカーネルの機能を踏襲している。スワップ処理なども、通常のプロセスと同様に行われるため、あまり動作していない仮想マシンのメモリを退避し、多くのメモリを必要としている仮想マシンで利用するなど、効率よく動作する。
様々なストレージに対応
KVMでは、仮想マシンが利用するストレージとしては、ローカルディスクだけでなくNFSやiSCSIなどを利用することができる。Linuxでサポートされているマルチパスデバイスを利用することで、高速化も担保することもできる。例えば、KVMを使えばローカルディスクの拡張性を担保することができる。また、DRBDのようなネットワークミラーリングのソフトウェアなども自由に利用すれば、ストレージの冗長化も行える。
オンデマンドストレージ
KVMでは、仮想マシンに割り当てるディスク領域は事前に割り当てる方式と、オンデマンドで割り当てる方式の両方を利用できる。事前割り当ては、ディスクのフラグメンテーションを防ぎ、高速に動作する。オンデマンド割り当てでは、ディスクリソースを有効に活用することができる。
柔軟なネットワーク管理
KVMでは、仮想ブリッジを利用することができる。そのため、ハイパーバイザーのネットワークインタフェースを複数の仮想マシンで共有することができ、仮想マシン間のローカルでの通信も可能である。また、NAT型での利用も可能である。
さらに、KVMでは、Linuxがサポートしているすべての種類のNICに対応できる。高速LANカードや無線LANなども、そのまま利用できる。
セキュリティ
KVMは、Linuxのサポートする拡張セキュリティであるSELinuxにも完全に対応している。そのため、仮想マシンからハイパーバイザーへのアクセスや、仮想マシン間のアクセスを厳密に制御する高いセキュリティを実現することができる。
ライブマイグレーション
KVMでは、実行中の仮想マシンを他のホストに移動するライブマイグレーションと呼ばれる機能をサポートする。この機能を利用することで、ハードウェアの故障にも無停止で対応できる。また、負荷が高いハイパーバイザーから仮想マシンを無停止で移動することができるため、状況に応じて仮想マシンの再配置を行うこともできる。
仮想マシンの自動停止と自動起動
KVMでは、動作中の仮想マシンの状態をそのままイメージとして保管し、停止することができる。保管したイメージを使って、再起動することで、元の状態に復元することも可能である。例えば、ハイパーバイザーを停止するときに、仮想マシンを自動的に停止し、ハイパーバイザーが起動したら仮想マシンの自動的に起動するという運用も可能である。
テキストベースの管理
KVM以外の多くの仮想化ソフトウェアや仮想基盤では、Webベースの管理ソフトウェアや、専用の管理ソフトウェアを利用して仮想マシンを管理するものが多い。しかし、こうした管理ツールの動作は決して早くはない。そのため、Linuxのコマンドラインに慣れたエンジニアには、面倒に感じる場合もある。KVMは、仮想マシンの操作やインストールをコマンドラインから行うことができる。
KVMの管理ツール
KVMには、いくつかの管理ツールが付属している。Red Hat Enterprise Linux、CentOSなどには、次のようなKVMの管理ツールが採用されている。
Cockpit
Cockpitは、RHEL8/CentOS8から採用されているWebベースのサーバ管理ツールで ある。Cockpitには、KVMの仮想マシンを管理する機能があり、Webベースで管理できる。
virt-install
KVMのテキストベースでのインストールを行うツールである。仮想マシンにはグラフィカル環境を求めないことも多い。Red Hat Enterprise LinuxやCentOSは、テキストインストールもサポートしているため、非常に有用である。
virt-installの様子
# virt-install --name 'centos75pa' --memory=1024 --disk=/var/lib/libvirt/images/centos75pa.img,size=8 --location=/home/admin/CentOS-7-x86_64-DVD-1804.iso --graphics none --console pty,target_type=serial --extra-args='console=tty0 console=ttyS0,115200n8'
インストールの開始中... | |
ファイル .treeinfo を読出中... ファイル vmlinuz を読出中... ファイル initrd.img を読出中... ドメイン centos75pa に接続しました エスケープ文字は ^] です |
| 354 B 00:00 | 5.9 MB 00:00 | 50 MB 00:00 ETA |
[ 0.000000] Initializing cgroup subsys cpuset [ 0.000000] Initializing cgroup subsys cpu [ 0.000000] Initializing cgroup subsys cpuacct [ 0.000000] Linux version 3.10.0-862.el7.x86_64 (builder@kbuilder.dev.centos.org) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-28) (GCC) ) #1 SMP Fri Apr 20 16:44:24 UTC 2018 [ 0.000000] Command line: console=tty0 console=ttyS0,115200n8 ........ |
virt-installでは、次の例のようにKVM上に作成する仮想マシンの各種パラメータをオプションで指定する。この例では、centos75paという名前の仮想マシンをシリアルコンソールで作成している。グラフィックコンソールは割り当てていない。インストールは、ISOイメージから行っている。
virt-clone
virt-cloneは、仮想マシンのクローンを作成するコマンドである。クローンをすると、まったく同じ設定の仮想マシンを簡単に作成することができる。
virt-cloneの様子
# virt-clone --original=centos75pa --auto-clone | |
割り当て中 'centos7.0-clone-1.qcow2' | | 9.0 GB 01:18 |
'centos75pa-clone1' のクローニングに成功しました。 |
virt-top
virt-topは、KVM上の仮想マシンの状態を一覧し、負荷の高い順に表示する。Linuxのtopコマンドに似たインタフェースで仮想マシンを見ることができる。CPU使用率、メモリ使用率、ネットワークの利用状況などをリアルタイムに表示する。
virsh
virshは、KVM上の仮想マシンの制御を行うツールである。仮想マシンの起動、終了、削除、保存、再開、ライブマイグレーションなどの処理をコマンドラインから行うことができる。
# virsh start centos7.5
ドメイン centos7.5 が起動されました
virt-manager
virt-managerは、KVMのグラフィカル管理ツールである。仮想マシンの状態を表示したり、仮想マシンのインストールや管理を行うことができる。
KVMの冗長化
2台のサーバにKVMを導入し、Pacemakerなどのクラスタソフトウェアを利用することで、冗長化を行うことができる。この時、共有ストレージなどを使って、仮想マシンのイメージを2台のサーバから参照できるようにする必要がある。NFSなどで実現することもできるが、DRBD SDSを使うと2台のサーバだけで実現することができる。「LinstorによるDRBD SDS構築について」では、このような構成に関する事例が紹介されている。
「構築事例:KVMによるプライベートクラウド(クラスタ)」へ
KVMを利用できる仮想基盤
ここまで紹介したKVMの管理ツールは、1台または冗長化されたKVMホスト上で仮想マシンを管理するツールである。たくさんの仮想マシンを稼働させるためには、これらのツールですべてを管理するのは不便である。ここでは、KVMをハイパーバイザーとして利用できる仮想基盤について紹介する。
oVirt
oVirtは、KVMをハイパーバイザーとして利用することができる仮想基盤である。VMWareなど、他のハイパーバイザーよりも高速に動作するのが特徴である。Webベースの直観的に利用できる管理ツールが用意されている。冗長性を確保しながら、スケーラブルにシステムを拡張することができる。管理コンソールは仮想基盤上に構築することができ、別ハードウェアを用意する必要はない。また、OpenStackなどに比べて、インストールも比較的簡単に行うことができる。
RedHat Virtualization
RedHat Virtuailizationは、RedHat社が販売している仮想基盤である。oVirtをベースにしている。そのため、商用サポートが必要な場合には、oVirtではなくRedHat Virtualizaitonを利用する。VMWareに比べて低価格であり、機能的にも遜色がなくなってきたことから、徐々に導入例が増加している。
OpenStack
OpenStackは、クラウド環境を構築するためのソフトウェアである。実際には1つのソフトウェアではなく、様々なオープンソースのソフトウェアを集めて仮想基盤を実現できるようになっている。KVMは、OpenStackで利用するハイパーバイザーとして利用することができる。
OpenStackを使うと、マルチテナント型で、非常に大規模な仮想基盤を実現することができる。そのため、日本国内でも、いくつかの通信事業者がIaaSを提供するために利用している。一方で、様々なソフトウェアを組み合わせて利用するため、構築の難易度が高く、小規模な構成には向いていない。
「構築事例:OpenStackによるプライベートクラウド」へ
CloudStack
CloudStackは、Apache Projectが管理しているオープンソースの仮想基盤のソフトウェアである。CloudStackは、OpenStackに比べるとインストールがしやすく、比較的小規模な構成でも利用することができる。ハイパーバイザーとしてKVMを利用することができる。
CloudStackも、日本国内のいくつかの通信時業者のIaaS基盤として採用されている。
「構築事例:CloudStackによるプライベートクラウド」へ
KVMのサポート
KVMは、10年もの歴史を持つ仮想化のソフトウェアである。安定性に関しての心配はほとんどない。そのためCentOSのようなコミュニティベースのLinuxでも十分に実用に耐えることができる。ただし、必要な場合には、Red Hat Enterprise LinuxやRedHat Virtualizationなどを使うことで、商用サポートを利用することもできる。
デージーネットの取り組み
デージーネットでは、小規模な仮想基盤としてKVMクラスタの構築サービスを行っている。また、KVMを利用できる大規模な仮想基盤として、oVirtなどの仮想基盤を用途に合わせて提案している。
【カテゴリ】:仮想基盤  Linux関連技術  オープンソースソフトウェア  
【Webセミナー】自社でOSSを採用しよう!今更聞けないOSSの基本セミナー
日程: | 11月22日(金)Webセミナー「BigBlueButton」を使用します。 |
内容: | OSSを導入したいけど、どこから手をつければいいかわからない方必見! |
ご興味のあるかたはぜひご参加ください。 |