2013年11月3日日曜日

OpenNebulaを使ってみた。

突然ですが、
広島Ruby勉強会 #035に参加してきました。(遅刻しましたが。)
主な目的はChef入門を聞くことでしたが。

が、最後の最後でなんかしゃべろと予想通りムチャぶりされてしまったので、少しOpenNebulaの紹介をさせて頂きました。
といっても、つい昨日触ったばっかりなんですけどね(笑)

その中で、インストール方法をブログに乗っけると言ってしまったので、ざっくりと書いて見ました。



テストなどで、今までは物理マシンが必要だったものが、仮想環境上に構築できるようになって、
大変便利になったものの、仮想環境の収拾がつかなくなりつつあり、仮想環境の整理がしたくなったので、色々探して見ました。
必要な条件は

  • ベンダーロックインされたくないので、オープンソース(KVM)で。
  • 潤沢にメモリがあるわけではないので、メモリオーバーコミットは必須。
  • とはいえ、将来的にスケールアウトしたいので、出来れば対応しているもの。
  • いちいちSSHに入っての操作とかやりたくないので、Webベース。
  • 環境構築が目的では無いので、比較的簡単に構築できるもの。
  • 仮想ネットワークとか組めると面白いけど、とりあえずシンプルなもの。

こんな所で。
このあたりから、めぼしいものを探してみる。

  • CloudStack
    • 以前構築したことがある。
    • 日本語対応。
    • インストール難易度は中くらい。
    • シンプルなネットワークも複雑なネットワークも作れる。
    • メモリオーバーコミットに対応していない。
  • karesansui
    • 日本語対応。
    • UIが独特。マニュアルレスをうたっているが、私には使いにくかった。
    • できることは少なさそう。
    • メモリオーバーコミットに対応していないっぽい。(試した感じでは)
  • OpenStack
    • 日本語対応
    • UIが比較的シンプル。
    • インストール難易度は非常に辛いレベル。
      • 簡易にインストールできるdevstackというものがある。
        • 残念ながら私の場合は上手く動かせなかった。
    • メモリオーバーコミットは対応済み。
  • ConVirt
    • UIがカッコイイ。
    • 日本語非対応。
    • あくまでKVM管理ソフトなので、KVMは別途構築が必要。
    • OpenStackやCloudStackと違い、素のKVMなので、メモリオーバーコミットが使える。
    • UIが某VMの管理ソフトっぽい。(意識しているらしい)
    • 操作性は、Webなのに右クリック多用なので、個人的には分かりづらい。
    • Webで全て完結できるのではないようで、一部の操作にはKVMサーバでコマンド打たないといけないっぽい。
  • Eucalyptus
    • UIがカッコイイ
    • ここによると、メモリオーバーコミットが使えないらしいので余り試していない。


ということで、OpenStackとConVirt以外はどうも、メモリオーバーコミットが使えないようで、ConVirtは使い勝手がいまいちだったのと、OpenStackが1週間たっても満足に環境構築が出来なかったので、途方にくれていた所、OpenNebulaというものを教えてもらったので、試して見ました。(前フリが長い!)
OpenNebulaというのは、クラウドコンピューティング環境を構築するためのソフトウェア集。プライベートクラウドの構築に利用できるほか、パブリッククラウドやパブリッククラウドとプライベートクラウドを組み合わせたハイブリッドクラウド環境の構築にも対応する。(ここより引用)
つい最近Webベースになったらしく、UIも今風でつかいやすそう!
しかし、日本語情報がほぼ皆無なので、お試し版として、1台で全て構成するオールインワン環境の構築手順をメモっておきます。
(実は、VMWareイメージで配布されていたりするので、VMWareを持っている方はこれを使うのが手っ取り早いです。)

前提条件
OS:Ubuntu12.04(CentOS6でも動きます。このあたり参照)
CPU仮想支援のあるPC
最低1つのNIC
割と大きなHDD(40GByteもあればいいかな)
  1. Ubuntu12.04をインストール
    • ディスク全体を使用するが、LVMは使用しない。
      • (/と/homeにパテーションが切られるが、/homeは使わないので不要のため。手動でパテーション切るのならその限りではない。)
      • IPは固定(DHCPでもいいけど、後が楽なので)
  2. アップデート
    • sudo apt-get update
    • sudo apt-get upgrade
  3. リポジトリ登録
    • echo "deb http://opennebula.org/repo/Ubuntu/12.04 stable opennebula" > /etc/apt/sources.list.d/opennebula.list
  4. バージョン確認
    • apt-cache policy opennebula
opennebula:
  インストールされているバージョン: (なし)
  候補:               4.2.0-1
  バージョンテーブル:
     4.2.0-1 0
        500 http://opennebula.org/repo/Ubuntu/12.04/ stable/opennebula amd64 Packages
     3.2.1-2 0
        500 http://jp.archive.ubuntu.com/ubuntu/ precise/universe amd64 Packages
Webフロントエンドインストール
  1. sudo apt-get install opennebula
  2. sudo apt-get install opennebula-sunstone
  3. sunstoneの設定。何処からでもアクセス可能にする。
    • sudo vi /etc/one/sunstone-server.conf
#:host:127.0.0.1 #コメントアウト
:host:0.0.0.0 #追記
  • サービス再起動
/etc/init.d/opennebula-sunstone restart

Webインターフェースにアクセス
  1.  more /var/lib/one/.one/one_auth でIDとパスワード確認
  2. http://<サーバのIP>:9869にアクセス。ログイン出来ればOK。
クラスタノードインストール
  1. apt-get install opennebula-node
  2. apt-get install kvm
  3. ブリッジの作成
    • vi /etc/network/interfacesをこんな感じに修正(IPは例)
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
#auto eth0
#iface eth0 inet static
# address 192.168.0.15
# netmask 255.255.255.0
# network 192.168.0.0
# broadcast 192.168.0.255
# gateway 192.168.0.1
# # dns-* options are implemented by the resolvconf package, if installed
# dns-nameservers 192.168.0.1
# dns-search localdomain
#auto br0
#iface br0 into static
#address=10.0.0.1
#netmask=255.255.255.0
auto eth0
iface eth0 inet manual

auto br0
iface br0 inet static
      address 192.168.0.15
      netmask 255.255.255.0
      network 192.168.0.0
      broadcast 192.168.0.255
      gateway 192.168.0.1
      dns-nameservers 192.168.0.1
      dns-search localdomain
      bridge_ports eth0
      bridge_fd 9
      bridge_hello 2
      bridge_maxage 12
      bridge_stp off
  1. サービス再起動
    • /etc/init.d/networking restart
  2. インターフェース確認
    • ifconfig 
    • br0ができて、IPが割り当てられていることを確認。
  1. libvirtdの設定
    • vi /etc/libvirt/libvirtd.conf
listen_tls = 0 #コメントを外す
listen_tcp = 1 #コメントを外す
auth_tcp = "none"
    • vi /etc/default/libvirt-bin
#libvirtd_opts="-d" #コメントアウト
libvirtd_opts="-d -l" #追記
    • vi /etc/init/libvirt-bin.conf
env libvirtd_opts="-d -l" #-lを追加
  1. サービス再起動
    • /etc/init.d/libvirt-bin restart
  2. 起動時にドライバを読み込むようにする(不要??)
    • echo "kvm_intel" >> /etc/modules
  3. SSHの鍵を作成
    • su - oneadmin
    • ssh-keygen -t rsa
      • 全て空Enter
    • cat .ssh/id_rsa.pub >> .ssh/authorized_keys
      • KVMとの制御にSSHを使用しているようで、パスワードなしでSCPとか使用するための措置です。 
  4. 一回SSHでログインしておく(おまじないらしい)
    • su - oneadmin
    • ssh localhost bash /var/lib/one/remotes/im/run_probes kvm 0 localhost
      • パスワードを聞かれないことを確認
  5. 一時ディレクトリ作成
    • mkdir /var/tmp/one
    • chown oneadmin /var/tmp/one
以上で環境構築は終了です。
http://<サーバのIP>:9869でアクセスします。
左のメニューより、InfrastructureからHostsをクリックします。
createボタンを押します。
こんな感じで入力します。
createボタンを押すと、KVMサーバが登録されます。

次に、仮想マシンたちに割り当てるIPを設定します。
VirtualNetworksをクリックします。



名前はわかりやすいのをつければいいと思いますが、日本語は避けたほうが無難でしょう。
この例では、192.168.0.30-40の10個を割り当てています。

次に、仮想マシンにインストールするOSイメージをDLします。
Marketplaceをクリックします。
今回は容量の少ないttylinuxを選択し、importボタンを押します。

特に設定する必要は無いので、そのままでOK
DLしている間に、仮想マシンのテンプレートを作成します。
これは、作成する仮想マシンのCPUやメモリ、OSイメージなどをひとまとめにセットしたものになります。
Virtual Resourcesより、Templatesをクリック、Createを押します。
GeneralでCPUとメモリを設定します。
strageには、先程DLしたttyLinuxを選択します。ここでAdd another Diskで追加HDDを設定することもできます。
Networkは先程設定したものを選択します。
Input/Outputの箇所はこのように設定します。

こうすることで、Web上のVNC画面でマウスが使えるようになるのと、キーボードのキーマップがおかしくなる問題が解消されます。
が、jaを指定しても、英語キーボード配置になります。

その他の設定はとりあえず設定しなくても大丈夫なので、Createボタンを押します。
では、仮想マシンを作成してみましょう。
VirtualMachinesからCreateボタンを押します。
先程作成してテンプレートを選択します。
こんな感じで起動します。
右端のVNCというアイコンをクリックしますと、コンソール画面が表示されます。
で、気になるメモリオーバーコミットが使用できるのか、先ほど作成したテンプレートで2Gのマシンを3つ作って見ました。(サーバの物理メモリは8Gです)
うーん。2つまでは起動出来るのですが、3つ目はエラーになりました。
ダッシュボードを見ても、物理メモリ以上の確保はできないっぽいです。
/etc/default/qemu-kvm には、KSM_ENABLED=1と設定があり、KSMが有効になているので動きそうなのですが・・・残念。


0 件のコメント:

コメントを投稿