⚠この記事はブログ移転前のアーカイブです

自宅クラウドを構築するべくOpenStackに手を出し、なんとか動く状態にはしたもののクソ複雑すぎてこれ以上弄る気が失せてしまった。スケールさせるときとかもっと大変なんだろうなとか思うと鬱になりそう。

調べたらOpenStack, CloudStack の他にいくつかオープンソースのクラウドパッケージがあることを知りました。

それでいじり始めたのが「OpenNebula」VMwareで予行演習したら1時間でVM起動できるところまで出来てビックリした。

しかし日本語情報が少ない(技評)(OpenNebulaを使ってみた。)(Qiita)のが気になったので、最近の環境で動いた例を書き残しておこうかと思います。

構成

構成は非常にシンプルです。普段使っているルーターのネットワークにVMを参加させて稼働します。図のラップトップやスマートフォンからVM にアクセスできますし、VMも自由にネットに出ることが出来ます。IPアドレスの管理も、OpenNebulaでは行いません。VMを立ち上げた時にOpenNebulaが作成した仮想ネットワークインターフェースに対してルーターがDHCP機能でVMにIPアドレスを割り当てます。

スムーズに出来れば1時間で構築できます

str

自分が構築したのはSkylake i7 + 32GB RAM のリアルマシンですが、誰でも真似できるようにVMware上 で構築します。

VMware 設定/OpenNebula バージョン

CPU 4コア
☑ Intel VT-x/EPT または AMD-V/RVIを仮想化
☑ CPU パフォーマンス カウンタを仮想化
RAM 8192 MB
HDD 60GB (80GB~ あると安心かも)
ネットワーク ブリッジ:物理ネットワークに直接接続
OS Ubuntu 16.04 Server 64bit (リアルマシンでは14.04を採用。systemdとの相性が悪い?)
OpenNebula バージョン 4.90 (5.0)

OpenNebulaのポイントは

  • 構成がシンプル
  • スケール(ノードの追加)がしやすい
  • 1台+1 NICで始められる

という点です。ノードの追加もWEB UIからほぼワンクリックで終わります。

VMwareではUbuntu 16.04 LTSを使いますが、実マシンでは14.04を利用しました。というのも実マシンで16.04を利用すると、OpenNebulaのメインサービスがsystemdで起動してくれないという問題が発生したためです。できれば16.04を利用したいところですが、問題が発生した場合は14.04を利用してください。

Ubuntuインストール~初期設定

普通にUbuntu をインストールします。ソフトウェアは「standard system utilities」以外に「openssh」でも入れておくといいかも

$ sudo -i
# apt-get update && apt-get dist-upgrade
# reboot

まずはパッケージを最新に

$ grep -E 'svm|vmx' /proc/cpuinfo

vmx または svmがハイライトされて出力されたら仮想化をサポートしている印です。出てこなかった場合はCPUが対応してないかVMwareの設定が上手く行ってないです。(BIOS/UEFIで有効化し忘れたとかもありがち)

OpenNebula + WebUIインストール

# wget -q -O- http://downloads.opennebula.org/repo/Ubuntu/repo.key | apt-key add -
# echo "deb http://downloads.opennebula.org/repo/5.0/Ubuntu/16.04/ stable opennebula" \
    > /etc/apt/sources.list.d/opennebula.list

Ubuntu 14.04の場合は

# echo "deb http://downloads.opennebula.org/repo/5.0/Ubuntu/14.04/ stable opennebula" \
    > /etc/apt/sources.list.d/opennebula.list
# apt update
# apt install opennebula opennebula-sunstone nfs-kernel-server

opennebula , Sunstoneをインストール

# /usr/share/one/install_gems

OpenNebulaってRubyで動いてるらしい。足りないgemをインストールするためのスクリプトを実行

14.04環境ではsystemctlコマンドを読み替えてください

# systemctl enable opennebula
# systemctl enable opennebula-sunstone
# systemctl start opennebula
# systemctl start opennebula-sunstone
# cat /var/lib/one/.one/one_auth

WEB UI SunstoneのログインIDとパスが oneadmin:password の形式で保存されてます。

http://{VM address}:9869

でアクセスするとログイン画面が表示されます。

screenshot.226

先ほど確認したパスを打ち込んでダッシュボードが出れば成功です。ここでつまづく人はsystemdでちゃんと起動してるか確認してください。failedにっている場合は14.04で構築した方がいいです。。。

screenshot.227

まだコンピュートノードを追加していないので、ダッシュボードには何も表示されません。上の画面を確認したらこのページは閉じてください。

NFS + SSH設定

NFSの設定

# echo "/var/lib/one/ *(rw,sync,no_subtree_check,root_squash)" >> /etc/exports
# systemctl restart nfs-kernel-server

SSHの設定。oneadminユーザは自動的に作成されています

# su - oneadmin
$ cp ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys
$ cat << EOT > ~/.ssh/config
Host *
    StrictHostKeyChecking no
    UserKnownHostsFile /dev/null
EOT
$ chmod 600 ~/.ssh/config

コンピュートノードインストール

# apt-get install opennebula-node nfs-common bridge-utils

ブリッジを作成します。1NICの場合はsshで繋いでるNICにブリッジを作成することになるので再起動が必要。OpenVswitch 使ってもいいらしいけど割愛

auto ens33
- iface ens33 inet dhcp
+ iface ens33 inet manual

auto br0
iface br0 inet static
address 192.168.2.40
netmask 255.255.255.0
network 192.168.2.0
broadcast 192.168.2.255
gateway 192.168.2.1
dns-nameservers 192.168.2.1
bridge_ports ens33
bridge_fd 9
bridge_hello 2
bridge_maxage 12
bridge_stp off

再起動して再接続する

ifconfigすると、メインのNICじゃなくて、br0にIPアドレスが割り当てられていることが確認できます

NFSマウントします。IPアドレスは適宜読み替えて。1台サーバーの場合は自身のアドレスを

# nano /etc/fstab

###末尾に書き込む

192.168.1.40:/var/lib/one/  /var/lib/one/  nfs   soft,intr,rsize=8192,wsize=8192,noauto

マウントする

# mount -a

QEMU設定

# cat << EOT > /etc/libvirt/qemu.conf
user  = "oneadmin"
group = "oneadmin"
dynamic_ownership = 0
EOT
# systemctl restart libvirt-bin

nodeとデーモンが通信できるようにsshの設定

# su - oneadmin
$ ssh-keygen -t rsa
$ cat .ssh/id_rsa.pub >> .ssh/authorized_keys
$ ssh localhost bash /var/lib/one/remotes/im/run_probes kvm 0 localhost
########こんな感じでサーバー情報が出ればOK
ARCH=x86_64
MODELNAME="Intel(R) Core(TM) i5-4570S CPU @ 2.90GHz"
HYPERVISOR=kvm
TOTALCPU=400
CPUSPEED=2900
TOTALMEMORY=8059404
USEDMEMORY=394172
FREEMEMORY=7665232
FREECPU=400
USEDCPU=0
NETRX=0
NETTX=0
DS_LOCATION_USED_MB=2109
DS_LOCATION_TOTAL_MB=72054
DS_LOCATION_FREE_MB=66262
HOSTNAME=ubuntu
VM_POLL=YES
VERSION="4.90.0"

# mkdir /var/tmp/one
# chown oneadmin /var/tmp/one

WEB UIログイン

再びブラウザで http://{VM address}:9869 にアクセス。ログインパスワードは以下で確認できましたね

# cat /var/lib/one/.one/one_auth

「 Infrastructure 」セクションの「 Hosts 」タブをクリック

screenshot.228

+ボタンからサーバー登録画面を出し、サーバーのIPを打って「Create」。1台の場合は、IPじゃなくでlocalhostって書かないとダメかも。

screenshot.229

ダッシュボードのHosts項目にノードが登録されました。いやマジびっくりするほど簡単。

ネットワークの設定

Virtual Networks をクリック

screenshot.231

+ボタンで新規作成して名前をつける

screenshot.232

ブリッジの設定で作ったブリッジインターフェイス名を入力

screenshot.233

連番で固定IPアドレスを割り当てたい場合

DHCPがない固定のゲートウェイがあって、連番で固定IPアドレスを割り当てたい場合はこの設定。

IPv4にチェックを入れて、確保するアドレスの開始値を入力して何個確保するかを決める。

screenshot.234

DHCP機能があるルーター(サーバ)があって、ルーターにIPアドレスの割当をやらせたい場合

自宅クラウドなら多分こっち。もともとDHCPルーターがあって、そのルーターにIPアドレスの割当をやらせる設定。OpenNebulaではインターフェースを作るだけにする。

Ethernetにチェックを入れて、確保するIP数を入力するだけ。MAC Startは空

 

screenshot.235

 

セキュリティグループを選択。現時点ではDefaultのみ

screenshot.236

ネットワークアドレス・マスク・ゲートウェイ・DNSを入力して「Create」

screenshot.237

VM起動

ここまで書いて疲れたので、使い方はドキュメント見てください。

まずはAppsから出来上がったイメージをダウンロードして単純に起動してみるといいでしょう。

参考

構築の参考

使い方の参考