本連載ではこれまでにも第483回
OpenNebulaとminiONE
OpenNebulaはプライベートクラウドを構築・
OpenNebulaについては大田さんが本連載でも何度か取り上げています。第484回で紹介した5.
- 第345回
「UbuntuとOpenNebulaでクラウド環境を構築してみよう (前編) 」 - 第346回
「UbuntuとOpenNebulaでクラウド環境を構築してみよう (後編) 」 - 第430回
「OpenNebula 5. 0とアップグレードの流れ 」 - 第483回
「UbuntuとOpenNebulaでもういちどクラウド環境を構築してみよう」 - 第484回
「UbuntuとOpenNebulaでKVMとLXDのインスタンスを起ち上げてみよう」
今回紹介するのはOpenNebulaのインストーラーである
miniONEを使うと、
今回はこのminiONEを使って、
miniONEの実行
最初にminiONEをダウンロードした上で、
$ wget 'https://github.com/OpenNebula/minione/releases/latest/download/minione' $ sudo bash minione --marketapp-name='Ubuntu 20.04'
少し待てばインストールを実行するかの確認メッセージが表示されるので
Install augeas-tools apt-transport-https iptables-persistent netfilter-persistent Do you agree? [yes/no]: yes (中略) ### Report OpenNebula 5.12 was installed Sunstone [the webui] is running on: http://192.0.2.1/ Use following to login: user: oneadmin password: BozivjTFKf
あとはしばらく放置すると、


これだけです。これだけで、
……と終わるわけにもいかないので、
- KVMを動かすなら仮想化支援機構が動くCPU
- 4GiB以上のメモリー
- 20GiB以上のストレージ
- インストールするための管理者権限
上記は最低限必要なスペックとなります。KVMではなくLXDを使うならもう少し余裕はあるものの、
さらにminiONEには各種コマンドラインオプションによって、
$ bash minione --help -h --help List of supported arguments -v --verbose Be verbose -f --force Skip non-fatal validation errors --yes Don't ask --version [5.12] OpenNebula version to install --lxd Setup host to run LXD containers --firecracker Setup host to run Firecracker micro-VMs --frontend Install only frontend, skip node setup, no networking configuration --node Install only node, edge(Packet) only --password [random generated] Initial password for oneadmin --ssh-pubkey /.ssh/id_rsa.pub] User ssh public key --vm-password [opennebula] Root password for virtual machine --sunstone-port [80] Setup sunstone port --marketapp-name [CentOS 7] Name of Marketplace appliance to import --fc-marketapp-name [alpine] Dockerhub image for Firecracker --fc-kernel-name [Kernel 5.4 x86_64 - Firecracker] Market app kernel name for Firecracker --bridge-interface [minionebr] Bridge interface for private networking --nat-interface [first net device] Interface to configure for NAT --vnet-address [172.16.100.0] Virtual Network address --vnet-netmask [255.255.255.0] Virtual Network netmask --vnet-gateway [172.16.100.1] Virtual Network gateway (i.e. bridge IP) --vnet-ar-ip-start [172.16.100.2] Virtual Network AR start IP --vnet-ar-ip-count [100] Virtual Network AR size --edge [packet] Edge provider --edge-packet-token [<token>] Packet token (required with '--edge packet') --edge-packet-project [<project>] Packet project (required with '--edge packet') --edge-host-num [1] Number of edge hosts --edge-packet-facility [ams1] Packet facility --edge-packet-plan [t1.small] Packet plan --edge-packet-os [ubuntu_18_04] Packet OS --edge-marketapp-name [Service WordPress - KVM] Market app name for Packet --purge Only uninstall and exit --preserve-user Dont't delete oneadmin user when purge
ヘルプメッセージに初期設定値も含めて記述してあるので、
前述の例だと--marketapp-name='Ubuntu 20.
」
初期設定値は
インストール中は特に何もすることはありません。ただひたすらホストにパッケージをインストールしたり、--yes
」
インストール時の完全なログは次のとおりです。おおよそどんなことをしているかが把握できるでしょう。
$ sudo bash minione --marketapp-name='Ubuntu 20.04' ### Checks & detection Checking augeas is installed SKIP will try to install Checking apt-transport-https is installed SKIP will try to install Checking AppArmor SKIP will try to modify Checking for present ssh key SKIP Checking (iptables|netfilter)-persistent are installed SKIP will try to install ### Main deployment steps: Install OpenNebula frontend version 5.12 Configure bridge minionebr with IP 172.16.100.1/24 Enable NAT over enp0s31f6 Modify AppArmor Install OpenNebula KVM node Export appliance and update VM template Install augeas-tools apt-transport-https iptables-persistent netfilter-persistent Do you agree? [yes/no]: yes ### Installation Updating APT cache OK Install augeas-tools apt-transport-https iptables-persistent netfilter-persistent OK Creating bridge interface minionebr OK Bring bridge interfaces up OK Enabling IPv4 forward OK Configuring NAT using iptables OK Saving iptables changes OK Installing DNSMasq retry 1 OK Starting DNSMasq OK Configuring repositories OK Updating APT cache OK Installing OpenNebula packages OK Installing OpenNebula kvm node packages OK Updating AppArmor OK Disable default libvirtd networking OK Restart libvirtd OK ### Configuration Switching OneGate endpoint in oned.conf OK Switching OneGate endpoint in onegate-server.conf OK Switching keep_empty_bridge on in OpenNebulaNetwork.conf OK Switching scheduler interval in oned.conf OK Setting initial password for current user and oneadmin OK Changing WebUI to listen on port 80 OK Starting OpenNebula services OK Enabling OpenNebula services OK Add ssh key to oneadmin user OK Update ssh configs to allow VM addresses reusig OK Ensure own hostname is resolvable OK Checking OpenNebula is working OK Disabling ssh from virtual network OK Adding localhost ssh key to known_hosts OK Testing ssh connection to localhost OK Updating datastores template OK Creating KVM host OK Creating virtual network OK Exporting [Ubuntu 20.04] from Marketplace to local datastore OK Waiting until the image is ready OK Updating VM template OK ### Report OpenNebula 5.12 was installed Sunstone [the webui] is running on: http://192.0.2.1/ Use following to login: user: oneadmin password: BozivjTFKf
oneadminアカウント
miniONEでインストールした場合、
たとえばダウンロード済みのイメージを表示するoneimage list
」
$ oneimage list ONE_AUTH file not present
それに対して、
$ 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
」
ちなみにウェブインターフェース--vm-password
」

もちろん、
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
コマンドで表示されるsudo apt-key del "鍵ID"
」
もしminiONEによるインストール途中で失敗した場合などは、--force
」--purge
」
トラブルシューティング
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
(後略)
}
この関数はコマンド
どうしてもcheck
関数の挙動を把握した上で、
また、
- 「Image download reached timeout」
と表示されてエラー終了する - 「Exporting [XXX] from Marketplace to local datastore」
が表示されたあとに無言で終了する
前者は、
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
」
「Exporting [XXX] from Marketplace to local datastore」seq 30
」
LXDのGUIとしてOpenNebulaを使えるのか
miniONEにはLXD実行環境を用意するための--lxd
」
OpenNebulaのLXD対応は、
現時点ではあくまで