Ubuntu Weekly Recipe

第629回 数分でオールインワンなプライベートクラウドを構築できるminiONE

この記事を読むのに必要な時間:およそ 7 分

oneadminアカウント

miniONEでインストールした場合,OpenNebulaの管理ユーザーとして「oneadminユーザー」が作成されます。CLIからOpenNebulaを操作するためのコマンド(だいたい「oneXXX」な名前)は,このユーザー経由で実行することになります。

たとえばダウンロード済みのイメージを表示するoneimage listは一般ユーザーで実行すると次のようにエラーになります。

$ oneimage list
ONE_AUTH file not present

それに対して,oneadminアカウント経由だと次のように表示されます。

$ sudo -i -u oneadmin oneimage list
  ID USER     GROUP    NAME            DATASTORE     SIZE TYPE PER STAT RVMS
   1 oneadmin oneadmin Ubuntu 18.04    default       2.2G OS    No rdy     0
   0 oneadmin oneadmin Ubuntu 20.04    default       2.2G OS    No used    1

また作成した仮想マシンインスタンスにログインする際のSSH鍵もoneadminアカウントに紐付けられています。インスタンス作成後,とりあえずログインしたい場合は次のように実行すると良いでしょう。

$ sudo -i -u oneadmin ssh root@インスタンスのIPアドレス

OpenNebulaをCLIから操作するのであれば,ターミナルマルチプレクサーなどのウィンドウでsudo -i -u openadmin bashなどと実行して,openadminアカウントのシェルインスタンスを作っておくと便利です。

ちなみにウェブインターフェース(Sunstone)からであれば,VNC経由のコンソールログインも可能です。そちらの場合,rootアカウントのパスワードはminioneコマンドの--vm-passwordで指定された値となります。

図3 ウェブ版VNCからログインした例

画像

もちろん,パスワードなどの設定はインスタンス作成時に調整可能です。

OpenNebulaのアンインストール

--purgeオプションで,インストールした環境をまっさらにできます。

$ sudo bash minione --purge
Really uninstall? [yes/no]:
yes

### Uninstalling
Stopping OpenNebula  SKIP
Uninstalling OpenNebula packages  OK
Stopping DNSMasq  OK
Unconfiguring repositories  OK
Unconfiguring NAT using iptables  OK
Deleting bridge interface minionebr  OK
Deleting /etc/one  OK
Deleting oneadmin user  SKIP
Deleting /var/lib/one  OK

おおよそは元通りにしてくれるのですが,すべてキレイになるというわけでもなさそうです。たとえばapt-keyで追加したOpenNebulaのリポジトリ鍵はそのまま残るため,必要に応じて手動で削除してください。具体的にはapt-key listコマンドで表示される「OpenNebula Repository」の鍵ID(pubとuidの間の行に現れる十六進文字列)sudo apt-key del "鍵ID"とします。表示される鍵IDは空白を含んでいるためダブルクオーテーションでくくる必要があります。

もしminiONEによるインストール途中で失敗した場合などは,そのまま再実行するとエラー終了するようになります。--forceオプションによる強制再実行も可能ではあるのですが,--purgeで一度クリーンにしておいたほうが安全でしょう。

トラブルシューティング

miniONEはシェルスクリプトとして作成されています。中身は比較的シンプルですので,何か問題があればとりあえずスクリプトを読むと良いでしょう。また,場合によっては自分で挙動を変更してしまう手もあります。

デバッグログを仕込む際に注意すべきなのは,miniONEは各処理を関数化した上で,check関数経由で実行しているという点です。

check() {
    (中略)
    STDERR_TMP_FILE=$(mktemp)
    STDOUT_TMP_FILE=$(mktemp)

    [[ ${VERBOSE} = 'yes' ]] && echo -ne "${TEXT}  "

    I=1
    while [[ $I -le $TRIES && $RC -gt 0 ]]; do
        eval "${COMMAND}" 2>"${STDERR_TMP_FILE}" >"${STDOUT_TMP_FILE}"
        RC=$?
        if [ $RC -gt 0 ]; then
            [[ "$ON_FAIL" = "" && $TRIES -gt 1 ]] &&  echo -ne "retry $I "
            sleep 1
        fi
        I=$((I + 1))
    done
    (後略)
}

この関数はコマンド(miniONE内の関数)の実行をリトライしながら,それにに伴う標準出力・標準エラー出力を一時ファイルに記録した上で,状況に応じて出力するかどうかを判断しています。結果としてスクリプト内部のコマンドやデバッグログはリアルタイムでは表示されませんし,スクリプトが途中で失敗すると状況を把握しづらくなります。

どうしても「うまく動かない」場合は,まずこのcheck関数の挙動を把握した上で,目的に合わせてよりデバッグしやすい形に変更すると良いでしょう※2⁠。

※2
ちなみにminioneスクリプトには--verboseオプションがあります。このオプションは実行の進捗を出力するという意味では「verbose」なのですが,その目的は各ステップの「OK・SKIP・FAIL」などを出力するかどうかを判断するためのものです。つまり「quietではない」程度の意味しかありません。

また,ネットワーク環境によっては次のふたつのケースで常に失敗する可能性があります。

  • 「Image download reached timeout」と表示されてエラー終了する
  • 「Exporting [XXX] from Marketplace to local datastore」が表示されたあとに無言で終了する

前者は,MarketPlaceの仮想マシンイメージのダウンロードが5分(300秒)以上かかった場合に発生します。Ubuntuだと2GiB程度,CentOSだと8GiB程度になるためネットワークによってはここでタイムアウトエラーが発生します。インストール時にダウンロードしない選択肢はないようなので,より小さなイメージを選択するか,スクリプトの中の次の変数の値をより大きな数字に変更して回避してください。

IMAGE_WAIT_TIMEOUT=300

後者はMarketPlaceのメタデータの同期待ちで発生するようです。具体的には次のコードの部分です。

poll_for_marketplace() {
    APP_COUNT=$(onemarketapp list | wc -l)
    for I in $(seq 30); do
        sleep 5
        NEW_APP_COUNT=$(onemarketapp list | wc -l)

        if [[ "${NEW_APP_COUNT}" = "${APP_COUNT}" && "${APP_COUNT}" -gt 20 ]]; then
            return 0
        fi
        APP_COUNT=${NEW_APP_COUNT}
    done
    return 1
}

OpenNebulaのインストール直後はメタデータの同期ができていないのか,openmarketapp listで表示されるアプリの数が少なく表示されます。時間が経つごとに増えていって,最終的に400個ぐらいで安定します。スクリプトの中では,その同期待ちの時間の上限を30秒と決め打ちしていますが,環境に寄ってはもう少しかかることもあるようです。

「Exporting [XXX] from Marketplace to local datastore」が表示されたあとに無言で終了する場合は,ここのseq 30をもう少し長めに取ると良いでしょう。

LXDのGUIとしてOpenNebulaを使えるのか

miniONEにはLXD実行環境を用意するための--lxdオプションも用意されています。これはminiONEはLXDの公式サイトでも紹介されている手順です。ただ,試してみたところ,⁠そのまま」だとうまく動くようには作られていないようでした。

OpenNebulaのLXD対応は,第484回UbuntuとOpenNebulaでKVMとLXDのインスタンスを起ち上げてみようでも紹介されています。miniONEも,そこに説明された方法をほぼ踏襲してはいるものの,すべてが同じというわけではありません。そもそも,第484回でも言及しているように,OpenNebulaのLXD対応はrootfsイメージをダウンロードしてきてそれを使うというタイプのものなので,通常のLXDの挙動を期待するといろいろとはまります。

現時点ではあくまで「そういうものがある」ぐらいに受け取っておいたほうがいいでしょう※3⁠。

※3
個人的にはLXDをウェブから管理するツールがほしいので,OpenNebulaがそれを担ってくれると助かるのですが。

著者プロフィール

柴田充也(しばたみつや)

Ubuntu Japanese Team Member株式会社 創夢所属。数年前にLaunchpad上でStellariumの翻訳をしたことがきっかけで,Ubuntuの翻訳にも関わるようになりました。