logo-idv ico_pp

KVMから始めるサーバー仮想化入門

エンジニア

img_column_eng20160819

エンジニアブログ第二回目となる今回は、サーバーの仮想化について紹介したいと思います。

仮想化とは

仮想化とは、簡単に言うと「物理的に無いものを有るように見せる」技術のことです。
一般的に広く使用されている仮想化技術は、CD/DVDドライブの仮想化ではないでしょうか。
CD/DVDドライブの無いPCで、仮想CD/DVDドライブを使ってisoファイルを再生したことがある人も多いと思います。

つまり、今回扱うサーバー仮想化とは「物理的に無いサーバーを有るように見せる」技術のことで、運用的には1台の物理サーバーの上で複数のOSを動かすことになります。

KVMとは

KVMとは、Kernel-based Virtual Machineの略のことで、Linuxカーネル 2.6.20 以降に標準搭載されている仮想化環境を利用するためのソフトウェアです。
ハイパーバイザType1型(KVMはホストOSに組み込まれているのでType2のホストOS型に分類されるという意見もある)で、ハードウェア側のエミュレーションはQEMUが担当しています。

開発元のQumranet社は、主要LinuxディストリビューションのRHELの開発元であるRed Hat社が2008年に買収しています。

KVM導入方法

1.ネットワーク(bridgeの設定)

特にネットワークの設定をせずにKVMをインストールすると、母艦の下のネットワーク(192.168.122.*)に、ゲストOSが入る感じになり、ゲストOSが母艦のネットワーク(192.168.5.*)に直接アクセスできなくなります。
イメージ的にはこんな感じになります。

img_column_emg_sub0120160819

これだと不便なので、bridgeを作ってゲストOSを母艦の192.168.5.*のネットワークに入れておきます。
イメージ的にはこんな感じになります。

img_column_emg_sub0220160819

設定手順
環境
母艦OS:CentOS 6.6 Minimal

※NetWorkManagerとかiptablesとかSELinuxは切っておきます。

2.KVMに必要なパッケージをインストール

3.ゲストOSインストール

母艦の上で動作するOSをインストールします。
基本はターミナルからvirt-installで進めるので、CUIベースでインストールすることになります。
GUIを使ってインストールすることも可能ですが、日本語パッケージやXウィンドウシステムなどを使用できるようにしておかないといけません。

CUIの場合

各オプションの意味
–name virshコマンドやvirt−managerなど管理ツールで管理する仮想サーバーの名前
–vcpus 割り当てるCPUの数
–ram  割り当てるメモリ(MB)
–autostart 母艦が起動したらゲストも自動で起動する
–disk  インストールしたOSのイメージファイルの場所、フォーマット、
サイズ(GB)、使用するDISKバスドライバ
–network ネットワークタイプ
–arch シミュレートする CPU アーキテクチャー
–os-type ゲストOSのOSタイプを指定
–os-variant ゲストOSの種類を指定
–location インストールメディアの場所
–graphics none,keymap=ja グラフィックスを使用しない,日本語キーボードタイプ
–extra-args インストール時にカーネルに渡すパラメータを指定(上の例はシリアルコンソール接続設定)

あとは画面(ターミナル)の表示に従ってキーボードのspaceとEnterとtabで進めていけばOKです。
コンソールを抜けたい時はcontrol+](Mac日本語キーボードの場合)
再接続したい場合は

ゲストOSを再起動するとコンソールに繋がらなくなるので、インストール時に使用したシリアルコンソールのオプションなどを起動設定に追加しておきます。

GUIの場合

ローカルPCがMacの場合はXQuartzを入れます。
https://www.xquartz.org/

ローカルPCがWinの場合は、sshクライアントソフトウェアのX転送を設定します。

こんな感じのGUIが起動します。

img_column_emg_sub0320160819

あとはGUI左上の「新規」ボタンからOSを新規インストールします。

KVM運用方法

ゲストOSをコピーする

ネットワークの設定まで全く同じ状態でコピーされてしまうので、クローンOSはネットワーク設定がオリジナルと全く同じ状態で起動してしまいます。
オリジナルのOSが起動していればIPが割り振られないだけで済みますが、オリジナルが起動していない時は、オリジナルと同じIPが割り振られるので混乱や不具合の原因になるかも知れません。
コピー前にネットワークの設定を外した状態にして、コピー元のOSをシャットダウンするのがオススメです。

コピー方法

virt-cloneを使う場合

virt-managerを使う場合

対象のVirtualMachine(以降VM)を右クリックし、「クローン(C)…」を選択。 あとはGUIに従って入力していくだけです。

img_column_emg_sub0420160819

bashでなんとかする場合

対象のVMのOSイメージをコピーし、引っ越し先でimportするだけです。

コピー時の注意点

上記「bashでなんとかする場合」では、OSイメージのファイル形式に気をつける必要があります。

不具合:コピー先のファイル容量が元ファイルの何倍にも膨れ上がる場合があります。
原因:コピー元のファイル形式がraw形式(KVMのデフォルト)の場合、raw形式がsparseファイルであることが原因です。
対策:回避するにはコピーコマンドにオプションをつけたり、圧縮するときにオプションつける必要があります。

以上で基本的な運用は可能になると思います。

あとがき

1台の物理サーバー上で複数のOSを動かすことは、リソースの有効活用といった観点からも必須になりつつあると思っています。
OSイメージをコピーして、お手軽にテスト環境を用意したり、負荷分散の台数を稼いだりバックアップが取れるのは、大変便利です。
VMwareやXen、VirtualBoxやDockerなど、仮想サーバーはKVMに限らず構築可能ですが、仮想サーバーを構築するならlinuxに標準採用されたKVMを是非一度は触れてもらいたいと思います。

執筆者プロフィール

ショットワークス事業部に所属し、インフラとコーディングに従事するK氏。
イヌかネコかで言われるとネコが好きです。やっぱりかわいいですよね。子ネコのかわいさは犯罪的です。よくネコは気まぐれみたいに言われますが、たまに寄ってこられたりする感じが逆にたまらないです。