Linux
Linux 女子部 第一回勉強会 女子部 第一回勉強会
KVM KVM 入門および仮想化らくらく仕事術! 入門および仮想化らくらく仕事術!
自己紹介
レッドハット株式会社 グローバルサービス本部 ソリューションアーキテクト
平 初 (たいら はじめ)
レッドハット株式会社でLinuxの標準仮想化技術Linux KVMの普及、啓蒙活動に従 事。最近では、レッドハットのクラウド・仮想化ビジネスの立ち上げを行ってい る。
The Fedora Project で日本語翻訳チームに所属。Anacondaやsystem-config-*、 virt-manager、Rhythmbox、Brasero、Solang、Pinoなどのアプリケーション や、Fedoraのリリースノート、テクニカルガイド、電力管理ガイドなどのドキュメ ント翻訳などを行う。最近ではfedoraproject.orgのウェブを翻訳中。
著書:インプレス「PS3 Linux 完全攻略ガイド」、技術評論社「Fedora Core Expert」、翔泳社「KVM徹底入門」、「Xen徹底入門」など。
趣味:カメラ、グルメ、カフェめぐり、翻訳作業
アジェンダ
KVMとは
●
誕生と進化
●
KVMと他の仮想化技術との違い
●
OSの一部であることの優位性
KVMがエミュレーションする環境
●
KVMの高速化ドライバー
●
KVMの各種リソースの制御
RHELでのKVM利用方法 <デモ>
KVM&QEMU技術詳細
仮想化らくらく仕事術
4
KVM KVM とは とは
KVM(Kernel Based Virtual Machine)
Linuxカーネルに取り込まれた標準の仮想化機能
KVMは 2006 年に Avi Kivity (現在Red Hat社員) により開始
Linuxカーネルのソースコードに取り込まれているため、
Linuxのコア開発者が長期に渡って開発・修正・改良を加えていく
Red Hat Enterprise Linuxの対応ソフトウェア、対応ハードウェアを そのまま利用可能
ゲストOSとしてRHEL、Windowsを正式サポート
x86アーキテクチャでの仮想化の進化
KVM KVM と他の仮想化技術との違い と他の仮想化技術との違い
QEMU QEMU
KVMのモデル
KVM QEMU
VM ふつうの
プロセス
Linux kernel
Hardware
VM VM
Apache, MySQL, Firefoxなどのアプリ
Xenのモデル
Hardware
Hypervisor
dom0
Device Driver
Back End driver
domU
Frontend driver
domU
Frontend driver
Virtual CPU & Memory
OSの一部であることの優位性
各種認定プロセスの簡素化
●
サーバー、ストレージ、アプリ...
Linux標準実装機能の流用
●
デバイスドライバー、スケジューラー、NUMA対応、
cgroups、Hugepage、KSM、Multiqueueなど...。
人類の開発リソースの有効活用
●
一生のうちに1人あたりが書けるコードは限られている。
ちなみにデメリットとしては
●
既存製品が好きな技術者から反発を食らうこと。
(いつの時代もあることですが... Linuxもそうでしたね)
RHEL5/RHEL6 KVM動作環境
64-bit CPU でハードウェア仮想化技術が有効なもの (AMD-
V/Intel VT-x)
●
BIOSで仮想化支援技術が有効になっていること
●
VTが有効なAtom Zは64bitモードをサポートしないので注意
ホストとなるRHEL自体に 512MB 以上のメモリ、それぞれの
ゲストに512MB以上のメモリ
※RHEL6の場合、ホストとゲストに1GB以上を推奨
KVMのゲストOSサポート
サポート
●
RHEL3 x86、RHEL4 x86/x86_64 、
●
RHEL5 x86/x86_64、RHEL6 x86/x86_64
●
Windows Server 2003 32/64 bit
●
Windows Server 2008 32/64 bit
●
Windows 7 32bit/64bit、Windows XP 32 bit
virtio ドライバの提供
●
RHEL3.9以上 x86/x86_64、RHEL4.7以上 x86/x86_64
●
RHEL5.3以上 x86/x86_64、RHEL6.0以上 x86/x86_64
●
Windows Server 2003 32/64 bit
●
Windows Server 2008 32/64 bit
●
Windows 7 32bit/64bit
●
Windows XP 32 bit (ネットワークドライバのみ)
KVM KVM がエミュレーションする環境 がエミュレーションする環境
仮想ディスクのモデル
ゲストOSから次のようなデバイスで見えます。
ide
●
IDE接続のディスク 最大4台まで
(仮想CD/DVDドライブを利用する場合、ディスク3台まで)
virtio
●
virtioで通信する。専用ドライバで高速化
※特に理由のない限り virtio を利用すること
その他
●
KVMではUSB, SCSI もエミュレーションできるが
RHELではサポート外
仮想ディスクのバックエンド
ホストOS側で対応するストレージを選択可能
デバイス(LUN、パーティション、LVM)を直接割り当てる
● LVMを割り当てるのが一番無難な方法です。
rawファイル
● ディスクイメージファイルを仮想ディスクデバイスとして見せる
● 最初に全部確保するとフラグメントしない
※ext4ファイルシステムだとfallocateで高速に作成可能
● sparceファイル(必要に応じて確保)にすると遅い
qcow2形式のファイル
● スナップショット機能、差分機能を提供
● 差分ファイルの作成はvirt-mangerで未対応なのでqemu-imgで作成
● ディスクサイズ<ファイルサイズになりうる
仮想ネットワークのモデル
低オーバーヘッドでのネットワーク
●
virtio – virtioドライバが必要、最も速い
実在するデバイスのエミュレーション
●
e1000 - Intel(R) PRO/1000 Network Connection
※virtioドライバが存在しないOSの場合e1000を推奨
●
ne2k_pci - NE2000 PCI Ethernet Adapter
●
pcnet - AMD Lance Am7990 Network Adapter
●
rtl8139 - Realtek 8139 Network Adapter
※ほとんどのOSで認識する一般的なカード
仮想ネットワークのバックエンド
QEMUで仮想NICのエミュレーションを行い
Libvirtが仮想マシン設定に従ってtapデバイスを
仮想ブリッジに接続します。
NAT接続(NAPT)
●
libvirtdによって作成されたNATブリッジ(virbr0)に
接続します。通信はホストOSでNATされて外に出ます。
ブリッジ接続
●
外部ネットワークに直接接続された仮想ブリッジに
接続します。通信は直接外に出ます。
ディスプレイ、キーボード、マウス
モデル
●
VESA BIOSのエミュレーション
●
PS/2キーボード
●
PS/2マウス
●
USBキーボード
●
USBマウス
●
USB接続のタブレット
バックエンド
●
VNCによる接続
●
SDLによる接続(ローカルマシン上でのみ利用可)
●
SPICEによる接続(RHEV for Desktopsのみ利用可)
QXL
Linuxは追加ドライバーなしで高速化できます
追加ドライバーが不要という安心感
●
RHEVおよびRHELに含まれるKVM機能上で、RHELやFedoraを動作させる
場合、メモリー管理、ディスクI/O、ネットワークI/O、ビデオカード な
どを高速化するデバイスドライバーはOS内にすでに含まれています。
●
弊社サポートに来る仮想化がらみのトラブルは、VMware vSphereの仕様
により引き起こされるものや、VMware Toolsによって引き起こされる問
題点に関するものがほとんどです。
●
弊社はVMware Tools自体の質問はお答えできません。
ビデオカード
virtio-balloon virtio-blk virtio-net
メモリー管理 ディスクI/O ネットワークI/O
RHELやFedoraで提供されるゲストOS添付の高速化デバイスドライバー
※一部の古いLinuxはデバイスドライバーがバックポートされたものがRPMパッケージで提供されます。
20
RHEL RHEL での での KVM KVM 利用方法 利用方法
デモ デモ
KVM & QEMU
KVM & QEMU
技術詳細 技術詳細
KVM&QEMU技術解説
QEMUとKVMの関係
/dev/kvm
KVMにより追加される「ゲストモード」とセンシティブ命令
KVMによる仮想マシンの基本的な動作
KVMでのvirtio実装
EPT/NPT
ライブマイグレーション
QEMU
KVM以前から開発・利用
多種のOSで動作
●
命令を動的に変換することで
多種の環境をエミュレーション
●
x86、x86_64、ia64、ARM、
SPARC、PPC、MIPS
各種H/Wのエミュレーションを提供
ユーザプロセスとして動作
ハードウェア QEMU 仮想マシン
Linux / *BSD / Mac / Win etc.
高速なQEMUとしてのKVM環境
ゲストの制限
●
CPUが直接実行できるアーキテク
チャのみ対応
●
通常の命令は直接実行
●
特殊な命令はQEMU/ KVMへ
実行を管理するのはLinuxカーネル
制御はユーザプロセスから行う
事前の命令スキャンは不要
仮想マシン 割り当て用
メモリ
ハードウェア QEMU
仮想マシン
Linux KVM
/dev/kvm
KVMへのインタフェースになる特殊デバイス
●
ioctl()で様々な機能提供
→KVMに新しいシステムコールは不要
●
新しい仮想マシンの作成
●
仮想マシンへのメモリ割り当てのリクエスト
●
仮想CPUのレジスタの読み書き
●
仮想CPUへの割り込み挿入
●
仮想CPU実行開始
●
I/Oハンドラの登録
QEMUがKVMを呼ぶ時にはこのファイルを利用
virtio
ゼロ・コピーI/Oを実装するためのフレームワーク
共有メモリを利用
●
オペレーションの共有
●
I/O命令によるトラップをなくすことで高速化
●
実際のデータの共有
●
オペレーションに対応するデータも共有
●
データ本体のコピーが発生しない
現在は仮想マシンとQEMUの間で共有している
RHEL6 では
●
ホスト側のLinuxカーネル内でvirtioを実装するvhostを搭載
●
1回のI/O毎にシステムコール呼出を4回削減→さらに高速化
KVMのメモリ・イメージ(virtio使用時)
カーネル
ユーザアドレス空間
I/O命令バッファ ゲストの物理アドレス空間 I/O命令バッファ
入出力データ
DMA転送 I/Oリクエスト
入出力データ QEMUプロセス
仮想マシン
デバイスドライバ
KVM徹底入門 好評発売中!
ISBN: 4798121406
価格: 3280円(予定価格)
B5変 304ページ
著者: 平 初・森若 和雄・鶴野龍一郎・ まえだこうへい
URL: http://tinyurl.com/kvmbook-amazon
レッドハット株式会社のKVMを追いかける第 一線のエンジニアたちが中心となって書き起 こした日本初のKVMの解説書
KVMを徹底的に技術解説しています。普通に セミナーで聞くと眠くなるようなディープな 話も満載!
Libvirtによる仮想化プログラミングや、 virshコマンドリファレンス付き
仮想化の入門者から、KVMエキスパートまで 幅広くすべての方が楽しめる一冊です。
仮想化らくらく仕事術
仮想化らくらく仕事術
〜 〜 virt-v2v virt-v2v 、 、 libguestfs libguestfs 、 、 guestfish guestfish 〜 〜
virt-v2v
仮想マシン移行ツール
サポートされたLinuxとWindowsを異なる仮想マシンソフトウェア間をデータ
移行するツールです。
移行元を改変せずに、仮想マシンの移行先にデバイスドライバーの差し替え
など、変更を加えた上で移行することができます。
※RHELの移行を行う際は契約サブスクリプションの種類を統一してください。
(技術的な問題ではないため、仮想マシン上のOSは動作します。)
OEM出荷のWindowsはライセンスの都合で移行できない/動かないことがあります。
ネットワーク経由で 停止中の仮想マシンの ディスクイメージを転送
デバイスドライバーの 差し替えなどを行う
virt-v2v
実行例:
RHEL5のXenからRHEL6のQEMU/KVMへSSH経由にて
仮想マシンを移行する場合の実行例
[newhost]# virt-v2v -f virt-v2v.conf
-ic xen+ssh://root@xen-dom0.test.redhat.com/
-op default rhel6
VMware ESX/ESXiからRHEL6のQEMU/KVMへHTTPにて
仮想マシンを移行する場合の実行例
[newhost]# virt-v2v -f virt-v2v.conf -ic esx://esx.test.redhat.com/ -o rhev
-osd rhev-nfs.test.redhat.com:/srv/nfs/export --network rhevm rhel6esx
virt-v2v
内部の動作
まず、コマンドラインオプションのパースを行う。
その後、-f で指定されたvirt-v2v.confファイルをパースする。
ネットワークの構成をマッピングする。
出力先をセットする。
● メソッドがlibvirtだった場合、出力先プールをセット。
● メソッドがrhevだった場合、出力先ストレージドメインをセット。
移行元に接続を行う。
● メソッドがlibvirtxmlだった場合、正しいファイルのパスを指定。
● メソッドがlibvirtだった場合、URIに沿って接続を行ない仮想マシンを指定。
仮想マシンの情報、ストレージの情報、転送ISOの情報を確認する。
移行先の仮想マシンのディスクを移行元の設定にて作成し、コンバートを始める。
libguestfs
仮想マシンのディスクイメージを制御するライブラリー
C言語、Java、Perl、Python、Ruby、Haskell、OCaml環境に対する 仮想マシンのディスクイメージに対する制御APIを提供します。
・主な操作
・パーティション、LVMの作成、削除、変更 ・ファイルシステム使用量の確認
・ファイルおよびディレクトリーの作成、削除、変更、移動、編集 ・ホストマシンからのファイルのアップロード、ダウンロード
・仮想マシン内でのコマンドの実行 ※限定的
libguestfs-toolsの収録コマンド
libguestfsのAPIを発行する便利なコマンド群
● virt-cat, virt-df, virt-edit, virt-inspector
● virt-list-partitions, virt-list-filesystems
● virt-ls, virt-rescue, virt-resize
● virt-tar, virt-win-reg (※アルファベット順)
これらのコマンドはguestfishでも実行できますが、
表示形式が人間が見やすい形式となっています。
guestfishを使った仕事術
仮想マシンのディスクイメージを制御するフレームワーク
コマンドライン引数やヒアドキュメントによるコマンドの列挙により、 停止状態のディスクイメージ内の操作をホストマシンからバッチ処理化 することもできます。
・主な操作
・パーティション、LVMの作成、削除、変更 ・ファイルシステム使用量の確認
・ファイルおよびディレクトリーの作成、削除、変更、移動、編集 ・ホストマシンからのファイルのアップロード、ダウンロード
・仮想マシン内でのコマンドの実行 ※限定的
guestfishを使った仕事術
仕事術 その1:
ローカルリポジトリーを参照する設定を停止中の仮想マシンに
組 み込んで欲しい。そんな無茶ぶり guestfish だとできます。
guestfishのプロンプトを起動します。
# guestfish -i rhel6
><fs> rm /etc/yum.repos.d/internal.repo
><fs> upload ./internal.repo /etc/yum.repos.d/internal.repo
><fs> umount-all
><fs> quit
guestfishを使った仕事術
仕事術 その2:
仮想マシンを1台1台起動して、ゲストOS内のhttpdサービスを
自動起動設定を行っておいて欲しい。今日中に30台!そんな午後17時。
ただし、18時から飲み会の予定が入っている!ピンチ!
# guestfish -i www1
><fs> command "chkconfig --list httpd"
httpd 0:off 1:off 2:off 3:off 4:off 5:off 6:off
><fs> command "chkconfig httpd on"
><fs> command "chkconfig --list httpd"
httpd 0:off 1:on 2:on 3:on 4:on 5:on 6:on
><fs> umount-all
><fs> quit