KVM

2013年01月14日

このエントリーをはてなブックマークに追加

Bash + Vagrant ⇒ Bagrant

これまでに何度も仮想マシンイメージを作って来て、どこか面倒臭さを感じていた。そんな中、Vagrantに出会い、ソレが欲しかったモノの1つであると感じ、調査・検証・評価。そして、bash実装する事にした。

Bagrantの機能
  • Bagrantfileで仮想マシンを定義
  • bagrantコマンドで仮想マシンをビルド・起動・停止
  • ハイパーバイザーはKVM
利用ライブラリ

自作したvmbuilderのみ。

使い方

詳細はhansode/bagrantを参照の事で、起動までは、下記手順で行える。

  1. Bagrantfileを作成 $ bagrant init
  2. 仮想マシンイメージをビルド $ bagrant build
  3. 仮想マシンを起動 $ bagrant up

また、hansode/bagrant-boxがBagrantfileを含んだテンプレート集となっているので、Bagrantfileを自作したい方の参考になるはず。

開発期間

移植作業だったので、結構あっさりと実装出来た気がする。

  • 設計: 3日(主にVagrantの調査)
  • 実装: 2日
今後の予定

開発した動機がそうであるように、何か機能追加される事があったら、自分自身が欲しいと思ったタイミング。

あとがき

これも、まだ、自動化したかった事の1つでしかない。

フィードバックなど

もしBagrantに興味がある方がいらっしゃいましたら、ご一報下さい。

続きを読む


編集
@hansode at 10:00|PermalinkComments(0)TrackBack(0)

2012年11月01日

このエントリーをはてなブックマークに追加

複数ディストリビューション対応へ向けて

ギーク達はfedora対応を希望

前回のエントリに反応してくれたギーク達は、CentOSよりもfedora対応を希望していた。『fedora対応…!』と思ったけども、fedoraを使ってないので良くわかってない。それよりは、複数ディストリビューション対応への準備体操として、CentOS 5対応に着手してみた。

検証環境

インストール
$ git clone git://github.com/hansode/vmbuilder.git
実行方法
$ cd vmbuilder/kvm/rhel/6/
$ sudo ./vmbuilder.sh --distro-name=**centos** --distro-ver=**5**

実行してから約10分程度で実行したディレクトリ直下に仮想マシンイメージが作成される。

2012/11/01現在の対応ディストリビューション

distro-name と distro-ver に指定可能な組み合わせは下記の通り。

  • centos 5 (5.x)
  • centos 6 (6.x)
  • sl 6 (6.x)

新規追加されるタイミングは、今の所、自分が欲しいと思う時か、聞こえて来る周りからの声。

問題点

rhel6環境でrhel5を構築すると、仮想マシンイメージを作成可能ではあるが、rhel5環境としては不完全だ。

  • 今のvmbuilder.shの仕様では、ホスト環境のyumコマンドでゲスト環境を構築する
  • ゲスト環境におけるrpmdbのフォーマットは、ホスト環境に依存する

個人的に困ってないので、しばらくの間は保留扱い。

改善案

検証すべき項目

  • ホスト環境とゲスト環境を一致させる
    • 例) rhel5用仮想マシンイメージを構築する場合は、rhel5環境で行う
  1. post installフェーズで、rpmdbを変換するなどの対応をする
  2. yumコマンドかyum.confにrpmdbのバージョン指定する方法があれば、指定してみる

上記のうち、 1 が良さそうなので、対応手段は、構築フェーズを分ける事だろうか。

  1. ゴールとなる仮想マシンをビルドする為のビルド環境(1次chroot環境) を構築
  2. 構築されたビルド環境(1次chroot環境)にて、ゲスト環境(2次chroot環境)を構築
  3. ホスト環境にてマシンイメージ化

これで対応出来そうな気がするので、あとは検証・実装するだけの事。この辺をしっかり実装しておかないと、fedora対応も大変そう。

あとがき

環境差異が発生するとは面白い事。

フィードバックなど

希望するネタ等、フィードバック、大歓迎です。

続きを読む


編集
@hansode at 13:30|PermalinkComments(0)TrackBack(0)

2012年10月25日

このエントリーをはてなブックマークに追加

コマンドラインで仮想マシンイメージを作ろう!

面倒臭かった。世の中に出回っているCentOS用仮想マシンイメージ作成手順が。

  1. インストールDVD(ISOファイル)を用意
  2. virt-installコマンドを多数のオプション指定で実行…
  3. VNC接続して…

この手順には問題・課題があり、幾つか挙げると、

  • 手作業が入るので多少なりとも作業ブレが発生
  • 自動化すべく、kickstartを使うとしても、ks.cfg作成などの準備作業が面倒臭い
  • libvirt依存、KVM依存
  • どうやってテストする…?

Ubuntuであれば、VMBuilderが上記の問題・課題を解決してくれる。

$ sudo apt-get install ubuntu-vm-builder
$ sudo vmbuilder [options]....

vmbuilderコマンド実行後、10分ほどで仮想マシンイメージを作成される。

vmbuilderのお手軽さを知っていると、CentOSにおいても同様・同等の事が出来る事を期待した。しかし、残念ながら、VMBuilderはubuntu用だった。ゆえに、VMBuilderではCentOS用の仮想マシンイメージを作成出来ない。VMBuilderに似たツールを探してみたが、満足の行く物は見つからなかった…。

無いなら…作ろう!そして作った。bashで!

検証環境

  • RHEL 6.X / CentOS 6.X / Scientific Linux 6.X
  • bash 4.00
  • git 1.7

※他にkpartxやpartedなどに依存するが、本エントリでは詳細な依存パッケージは省略。

インストール
$ git clone git://github.com/hansode/vmbuilder.git
実行方法

KVM環境がなくても、KVM用仮想マシンイメージを作成可能なのである。

$ cd vmbuilder/kvm/rhel/6/
$ sudo ./vmbuilder.sh

実行してから約10分。実行したディレクトリ直下に仮想マシンイメージが作成される。

⇒ centos-6.3_x86_64.raw

※2012/10/25 現在、 centos-6.3 がデフォルトセット。

動作確認

出来上がった仮想マシンイメージを軽く確認したくなる。その場合は、下記手順でkvm-ctl.shを実行。 ここで初めてKVMが登場する。kvm-ctl.shはkvmコマンドのラッパースクリプトなので、virsh系のコマンドは不要。依然として、libvirtに依存しないまま。

$ sudo ./misc/kvm-ctl.sh start --image-path=./centos-6.3_x86_64.raw

tcp/6901でVNCが口を開けてるので、VNCクライアントで接続する。

仮想マシンにログイン
  • user: root
  • pass: root

開発用途なので、脆弱なパスフレーズで良いものとしてる。

あとがき

これは、まだ、自動化したかった事の1つでしかない。

フィードバックなど

本エントリはインストール手順と実行手順に留めておき、次のエントリからは開発苦労話などを執筆予定。 希望するネタ等、フィードバック、大歓迎です。

続きを読む


編集
@hansode at 15:00|PermalinkComments(0)TrackBack(0)

2011年11月01日

このエントリーをはてなブックマークに追加

bondingによるNIC冗長化 + bridge接続

KVMやXen等では、ゲストノード用tapデバイスをホストノードのブリッジへ接続させ、ホストと同じネットワークに接続させる。更に、エンタープライズ環境ではbondingによるNIC冗長化設定される事は良くある事(なのだろう)。

本エントリは、エンタープライズ環境向けにNICを冗長化した上でKVMを利用する為に設定した『bridge bondingデバイス設定』をまとめた自分向けメモである。

検証環境
  • RHEL 6.0 / CentOS 6.0
  • bridge-utils-1.2-9.el6.i686
作業概要

一度にbridge bonding設定すると、頭の中で整理がつかなかったので、2回に分けて設定作業をした。

  1. NICを束ねたbondingデバイス設定
  2. bondingデバイスをbridged bondingデバイスへ設定変更
設定値
IPアドレス192.0.2.1/24
bridgebr0
bondingbond0
bonding対象eth0
eth1
作業内容
bridge-utilsをインストール

インストールされてなければインストールしておく事。 インストールされてない場合、ネットワーク起動時にbridgeが作成されない。


# yum -y install bridge-utils
bonding設定
/etc/modprobe.d/bonding.conf

alias bond0 bonding
/etc/sysconfig/network-scripts/ifcfg-bond0

DEVICE=bond0
ONBOOT=yes
BOOTPROTO=static

IPADDR=192.0.2.1
NETMASK=255.255.255.0

BONDING_OPTS="mode=1 primary=eth0 miimon=100"
TYPE=Ethernet
modeの設定値はTipsAndTricks BondingInterfacesに詳しく書かれている。システム要件に合わせて設定する事。
/etc/sysconfig/network-scripts/ifcfg-eth0

DEVICE=eth0
MASTER=bond0
SLAVE=yes
BOOTPROTO=none
USERCTL=no
ONBOOT=yes
/etc/sysconfig/network-scripts/ifcfg-eth1

DEVICE=eth1
MASTER=bond0
SLAVE=yes
BOOTPROTO=none
USERCTL=no
ONBOOT=yes
bridged bonding設定

bond0をbr0へのブリッジ接続へ設定変更し、br0にはbond0のネットワーク設定情報を移行する。

/etc/sysconfig/network-scripts/ifcfg-bond0

DEVICE=bond0
ONBOOT=yes
BOOTPROTO=static

BRIDGE=br0

BONDING_OPTS="mode=1 primary=eth0 miimon=100"
TYPE=Ethernet
/etc/sysconfig/network-scripts/ifcfg-br0

DEVICE=br0
TYPE=Bridge
ONBOOT=yes
BOOTPROTO=none

IPADDR=192.0.2.1
NETMASK=255.255.255.0
設定内容を反映

システムを再起動し、起動時に正しくネットワーク設定されるかどうかを確認。


# reboot

参考ページ

あとがき

エンタープライズ向け

続きを読む


編集
@hansode at 17:30|PermalinkComments(0)TrackBack(0)