自宅クラウドを構築するべくOpenStackに手を出し、なんとか動く状態にはしたもののクソ複雑すぎてこれ以上弄る気が失せてしまった。スケールさせるときとかもっと大変なんだろうなとか思うと鬱になりそう。
調べたらOpenStack, CloudStack の他にいくつかオープンソースのクラウドパッケージがあることを知りました。
それでいじり始めたのが「OpenNebula」VMwareで予行演習したら1時間でVM起動できるところまで出来てビックリした。
しかし日本語情報が少ない(技評)(OpenNebulaを使ってみた。)(Qiita)のが気になったので、最近の環境で動いた例を書き残しておこうかと思います。
もくじ
構成
構成は非常にシンプルです。普段使っているルーターのネットワークにVMを参加させて稼働します。図のラップトップやスマートフォンからVM にアクセスできますし、VMも自由にネットに出ることが出来ます。IPアドレスの管理も、OpenNebulaでは行いません。VMを立ち上げた時にOpenNebulaが作成した仮想ネットワークインターフェースに対してルーターがDHCP機能でVMにIPアドレスを割り当てます。
スムーズに出来れば1時間で構築できます
自分が構築したのは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
でアクセスするとログイン画面が表示されます。
先ほど確認したパスを打ち込んでダッシュボードが出れば成功です。ここでつまづく人はsystemdでちゃんと起動してるか確認してください。failedにっている場合は14.04で構築した方がいいです。。。
まだコンピュートノードを追加していないので、ダッシュボードには何も表示されません。上の画面を確認したらこのページは閉じてください。
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 」タブをクリック
+ボタンからサーバー登録画面を出し、サーバーのIPを打って「Create」。1台の場合は、IPじゃなくでlocalhostって書かないとダメかも。
ダッシュボードのHosts項目にノードが登録されました。いやマジびっくりするほど簡単。
ネットワークの設定
Virtual Networks をクリック
+ボタンで新規作成して名前をつける
ブリッジの設定で作ったブリッジインターフェイス名を入力
連番で固定IPアドレスを割り当てたい場合
DHCPがない固定のゲートウェイがあって、連番で固定IPアドレスを割り当てたい場合はこの設定。
IPv4にチェックを入れて、確保するアドレスの開始値を入力して何個確保するかを決める。
DHCP機能があるルーター(サーバ)があって、ルーターにIPアドレスの割当をやらせたい場合
自宅クラウドなら多分こっち。もともとDHCPルーターがあって、そのルーターにIPアドレスの割当をやらせる設定。OpenNebulaではインターフェースを作るだけにする。
Ethernetにチェックを入れて、確保するIP数を入力するだけ。MAC Startは空
セキュリティグループを選択。現時点ではDefaultのみ
ネットワークアドレス・マスク・ゲートウェイ・DNSを入力して「Create」
VM起動
ここまで書いて疲れたので、使い方はドキュメント見てください。
まずはAppsから出来上がったイメージをダウンロードして単純に起動してみるといいでしょう。