前回のRecipeではOpenNebula 5.
リソースの登録や変更、
ネットワークリソースを定義
仮想マシンに割り当てるIPアドレスのプールやデフォルトゲートウェイなどの情報を定義します。アドレスレンジやIPプロトコルバージョン
今回は、
NAME = "mynetwork"
VN_MAD = "dummy"
BRIDGE = "br0"
AR=[
TYPE = "IP4",
IP = "192.168.1.160",
SIZE = "8" ]
DNS = "192.168.1.14"
GATEWAY = "192.168.1.254"
属性名 | 値 |
---|---|
NAME | ネットワークリソースの名称。この例ではmynetworkとします。 |
VM_ |
ネットワークドライバの種類。今回はdummyドライバを使用します。 |
BRIDGE | ブリッジインタフェース名。ホストで作成したブリッジインタフェースの名称を記載します。 |
AR | アドレスレンジを指定します。この例ではIPv4の192. |
DNS | DNSサーバのアドレスを指定します。 |
GATEWAY | このネットワークのデフォルトゲートウェイのアドレスを指定します。 |
詳細や他に使用できる属性についてはOpenNebula 5.
作成した定義ファイルをonevnet createコマンドの引数に指定して登録します。
$ onevnet create mynetwork.txt ID: 0
onevnet listコマンドでネットワークリソースを確認できます。
oneadmin@mogami:~$ onevnet list ID USER GROUP NAME CLUSTERS BRIDGE LEASES 0 oneadmin oneadmin mynetwork 0 br0 0
イメージとテンプレートの登録
仮想マシンのディスクイメージファイルと、
OpenNebulaには仮想マシンイメージの共有や配布を行うMarketPlaceというサービスが用意されています。デフォルトでOpenNebula Systemsの運営するPublicなMarketPlaceが登録されており、
MarketPlaceでは仮想マシンのイメージファイルとテンプレートをセットにしたApp
onemarketapp listコマンドでMarketPlace上のAppが一覧表示できるので、
$ onemarketapp list | egrep -i 'ubuntu|^..ID' ID NAME VERSION SIZE STAT TYPE REGTIME MARKET ZONE 2 Ubuntu 16.04 - KVM 5.4.0 2.2G rdy img 06/14/16 OpenNebula Public 0 5 Ubuntu 17.04 - KVM 5.4.0 2.2G rdy img 06/14/16 OpenNebula Public 0 10 Ubuntu for Docker Machine 0.6.0-2 10G rdy img 02/23/16 OpenNebula Public 0 11 Ubuntu 14.04 - KVM 5.4.0 2.2G rdy img 08/11/14 OpenNebula Public 0 16 Ubuntu 16.04 - LXD 2 1024M rdy img 07/25/17 OpenNebula Public 0
onemarketapp exportコマンドでMarketPlace上のAppをexportして、
$ onemarketapp export 2 ubuntu1604kvm -d default IMAGE ID: 0 VMTEMPLATE ID: 0
oneimage listコマンドでイメージファイルが登録されていることを確認します。
$ oneimage list ID USER GROUP NAME DATASTORE SIZE TYPE PER STAT RVMS 0 oneadmin oneadmin ubuntu1604kvm default 2.2G OS No rdy 0
onetemplate listコマンドでテンプレートが登録されることを確認します。
$ onetemplate list ID USER GROUP NAME REGTIME 0 oneadmin oneadmin ubuntu1604kvm 08/04 23:41:46
テンプレートは仮想マシンを構成する各種リソースを束ねたものです。MarketPlaceからダウンロードしてきたテンプレートには基本的な情報が記載されていますが、
ubuntu1604kvmテンプレートに、
$ onetemplate update ubuntu1604kvm
エディタが立ち上がるので、
NIC = [ NETWORK = "mynetwork", NETWORK_UNAME="oneadmin", MODEL="virtio" ]
仮想マシン用SSH公開鍵設定
MarketPlaceからダウンロードしてきたイメージファイルにはone-contextパッケージがインストールされています。このパッケージの提供する各種スクリプトにより、
OpenNebulaアカウントにSSH_
$ oneuser update oneadmin
エディタが立ち上がるので、
SSH_PUBLIC_KEY = "ssh-rsa AAAAB3NzaC(略)"
KVM仮想マシンインスタンスの作成
これで仮想マシンを作成する準備が整いました。さっそくonetemplate instantiateコマンドでubuntu1604kvmテンプレートから仮想マシンをデプロイしてみましょう。
$ onetemplate instantiate ubuntu1604kvm VM ID: 0
$ onevm list ID USER GROUP NAME STAT UCPU UMEM HOST TIME 0 oneadmin oneadmin ubuntu1604kvm-0 runn 0.0 768M host001 0d 00h03
STAT欄が
$ onevm show 0 (略) VM NICS ID NETWORK BRIDGE IP MAC PCI_ID 0 mynetwork br0 192.168.1.160 02:00:c0:a8:01:a0 (略)
毎回onevm showでIPアドレスを確認するのは面倒ですので、
:default:
- :ID
- :USER
- :GROUP
- :NAME
- :STAT
- :UCPU
- :UMEM
- :IP (←追加)
- :HOST
- :TIME
$ onevm list ID USER GROUP NAME STAT UCPU UMEM IP HOST TIME 0 oneadmin oneadmin ubuntu1604kvm-0 runn 0.0 768M 192.168.1.160 host001 0d 00h12
sshでログインしてみましょう。SSH_
![画像](/assets/images/admin/serial/01/ubuntu-recipe/0484/thumb/TH800_vm_kvm_login.png)
ここまでくれば、
OpenNebulaのAdd-on
前ページまでで基本的な環境構築が終わりましたので、
OpenNebulaはハイパーバイザやストレージ形式などの差異をドライバスクリプトで吸収しています。ドライバスクリプトはAdd-onとして追加が可能で、
今回はLXD用Add-onのLXDoNeをOpenNebulaに追加して、
LXDoNe
LXDはコンテナ技術を利用したソフトウェアです。Ubuntu Weekly Recipeでは第459回、
LXDoNeはOpenNebulaでLXDコンテナを操作するための仮想マシンドライバスクリプトとインフォメーションドライバスクリプトをまとめたAdd-onです。ライセンスはApache License 2.
特殊な点として、
今回インストールするLXDoNe 5.
フロントエンドにLXDoNe Add-onを追加する
まずはフロントエンド側の作業です。OpenNebulaフロントエンドの標準的なセッティングは終わっているものとします。
ドライバスクリプトのインストール
GitHubからリリース版のLXDoNeをフロントエンド上にダウンロードします。今回は執筆時の最新版のバージョン5.
$ wget https://github.com/OpenNebula/addon-lxdone/archive/v5.2-4.1.tar.gz
tar.
$ tar xvzpf v5.2-4.1.tar.gz
展開されたドライバスクリプトを/var/
$ cd addon-lxdone-5.2-4.1 $ sudo cp -rp src/remotes /var/lib/one $ sudo chown -R oneadmin:oneadmin /var/lib/one/remotes/ $ cd /var/lib/one/remotes/ $ sudo chmod 755 -R vmm/lxd im/lxd* $ sudo chmod 644 im/lxd.d/collectd-client.rb
ネットワークリソースで802.
$ sudo cp -p src/one_wait/nic.rb /var/lib/one/remotes/vnm/nic.rb $ chown oneadmin:oneadmin /var/lib/one/remotes/vnm/nic.rb $ chmod 755 /var/lib/one/remotes/vnm/nic.rb
Add-onの有効化
フロントエンドの/etc/
$ sudo vi /etc/one/oned.conf
Information Driver Configurationセクション内の適当な場所に以下の内容でインフォメーションドライバ設定を追記します。
#-------------------------------------------------------------------------------
# lxd Information Driver Manager Configuration
# -r number of retries when monitoring a host
# -t number of threads, i.e. number of hosts monitored at the same time
#-------------------------------------------------------------------------------
IM_MAD = [ NAME = "lxd",
EXECUTABLE = "one_im_ssh",
ARGUMENTS = "-r 3 -t 15 lxd" ]
#-------------------------------------------------------------------------------
また、
#-------------------------------------------------------------------------------
# lxd Virtualization Driver Manager Configuration
# -r number of retries when monitoring a host
# -t number of threads, i.e. number of actions performed at the same time
#-------------------------------------------------------------------------------
VM_MAD = [ NAME = "lxd",
EXECUTABLE = "one_vmm_exec",
ARGUMENTS = "-t 15 -r 0 lxd",
KEEP_SNAPSHOTS = "yes",
TYPE = "xml",
IMPORTED_VMS_ACTIONS = "migrate, live-migrate, terminate, terminate-hard,
undeploy, undeploy-hard, hold, release, stop, suspend, resume, delete,
delete-recreate, reboot, reboot-hard, resched, unresched, poweroff,
poweroff-hard, disk-attach, disk-detach, nic-attach, nic-detach,
snap-create, snap-delete"
]
#-------------------------------------------------------------------------------
OpenNebulaサービスを再起動します。
$ sudo systemctl restart opennebula.service
LXD用ホストをセットアップする
続いてホスト側の作業です。こちらもOpenNebulaのKVM用ホストの標準的なセッティングが終わっているものとします。
パッケージとPythonライブラリインストール
LXDoNeのドライバスクリプトが動作するために必要なパッケージをインストールします。
$ sudo apt install lxd lxd-tools python-pylxd/xenial-updates criu bridge-utils python-ws4py python-pip
pipコマンドでPythonライブラリのisoparserをインストールします。
$ sudo pip install isoparser
SunstoneのVNCコンソール接続用に、
$ wget https://github.com/OpenNebula/addon-lxdone/releases/download/v5.2-4.1/svncterm_1.2-1ubuntu_amd64.deb $ sudo apt install ./svncterm_1.2-1ubuntu_amd64.deb
UNIXアカウントoneadminの権限設定
UNIXアカウントoneadminがパスワード入力なしでsudoできるように設定します。強力な権限を与えることになるので気をつけましょう。あわせて、
$ sudo bash -c 'echo "oneadmin ALL= NOPASSWD: ALL" >> /etc/sudoers.d/lxdone' $ sudo usermod -a -G lxd oneadmin
LXDセットアップ
ホスト上でlxd initコマンドを実行し、
$ sudo lxd init --auto \ --storage-backend dir \ --network-address 0.0.0.0 \ --network-port 8443 \ --trust-password password
LXDoNeではOpenNebulaの管理するネットワークリソースをLXDコンテナに割り当てます。eth0デバイスもデプロイ時にコンテナごとに設定するので、
$ lxc profile device remove default eth0
これでホスト側の準備が整いました。
LXD用ホストのOpenNebulaへの登録
ここから再びフロントエンド上での作業に戻ります。
OpenNebulaではホスト単位でハイパーバイザを指定します。一つのホストに複数のハイパーバイザを指定することはできません。LXDoNeを利用する場合は、
新しくLXD用ホストを登録する
LXD用にホストを新規に登録する場合は、
$ onehost create host002 -i lxd -v lxd
上記により、
既存のKVM用ホストをLXD用に登録する
既にKVM用のホストとして登録してあるハイパーバイザをLXD用に変更することも可能です。ここでは前回のRecipeで登録したhost001をLXD用に変更してみます。
まず、
$ onehost disable host001 $ onehost list ID NAME CLUSTER RVM ALLOCATED_CPU ALLOCATED_MEM STAT 0 host001 default 0 0 / 200 (0%) 0K / 7.7G (0%) dsbl
onehost syncコマンドを--forceオプション付きで実行し、
$ onehost sync host001 --force * Adding host001 to upgrade [========================================] 1/1 host001 All hosts updated successfully.
host001のハイパーバイザ、
$ onehost update host001
以下の3属性をlxdに変更し、
(変更前)
HYPERVISOR="kvm"
IM_MAD="kvm"
VM_MAD="kvm"
(変更後)
HYPERVISOR="lxd"
IM_MAD="lxd"
VM_MAD="lxd"
onehost enableコマンドでhost001を使用可能状態に戻します。onehost listコマンドでSTAT欄が
$ onehost enable host001
LXDイメージとテンプレートの登録
LXD用のイメージファイルとテンプレートを登録します。前述の通り、
$ onemarketapp list | egrep -i 'ubuntu|^..ID' ID NAME VERSION SIZE STAT TYPE REGTIME MARKET ZONE 2 Ubuntu 16.04 - KVM 5.4.0 2.2G rdy img 06/14/16 OpenNebula Public 0 5 Ubuntu 17.04 - KVM 5.4.0 2.2G rdy img 06/14/16 OpenNebula Public 0 10 Ubuntu for Docker Machine 0.6.0-2 10G rdy img 02/23/16 OpenNebula Public 0 11 Ubuntu 14.04 - KVM 5.4.0 2.2G rdy img 08/11/14 OpenNebula Public 0 16 Ubuntu 16.04 - LXD 2 1024M rdy img 07/25/17 OpenNebula Public 0
ID: 16の
$ onemarketapp export 16 ubuntu1604lxd -d default IMAGE ID: 1 VMTEMPLATE ID: 1
onetemplate updateコマンドでテンプレートにネットワークリソースを追加しておきましょう。KVM用Appの時と同様にmynetworkを追加することにします。
$ onetemplate update ubuntu1604lxd
エディタが立ち上がるので、
NIC = [ NETWORK = "mynetwork", NETWORK_UNAME = "oneadmin" ]
LXDコンテナインスタンスの作成
これでLXDコンテナをデプロイする準備が整いました。onetemplate instantiateコマンドでデプロイしてみましょう。
$ onetemplate instantiate ubuntu1604lxd VM ID: 26 $ onevm list ID USER GROUP NAME STAT UCPU UMEM IP HOST TIME 26 oneadmin oneadmin ubuntu1604lxd-26 runn 0 0K 192.168.1.160 host001 0d 00h01
STAT欄が
![画像](/assets/images/admin/serial/01/ubuntu-recipe/0484/thumb/TH800_vm_lxd_login.png)
MarketPlaceのLXDoNe用Appはディスク容量が1GBしかありません。デプロイ時のイメージサイズの拡張にも対応していないため、
KVM用ホストとLXD用ホストを共存させる
OpenNebulaはイメージファイルの形式とホストのドライバスクリプトの組み合わせを判断しません。このため、
大規模なクラウド環境では、
VM Groups定義ファイルの作成
例として、
NAME = "HypervisorGroup"
ROLE = [
NAME = "LXD",
HOST_AFFINED = "0, 2" ]
ROLE = [
NAME = "KVM",
HOST_ANTI_AFFINED = "0, 2" ]
冒頭のNAME属性はこのVM Groupsルールの名称です。ここではHypervisorGroupとしています。
その下のROLEは仮想マシンの配置の制約とルールを定義します。ここではLXDロールとKVMロールを定義しています。LXDロールはID: 0、
onevmgroup createコマンドに定義ファイルを指定して実行し、
$ onevmgroup create hypervisorgroup.txt ID: 3 $ onevmgroup list ID USER GROUP NAME VMS ROLES 0 oneadmin oneadmin Yama 0 AoHina, KokoHono 3 oneadmin oneadmin HypervisorGroup 0 LXD, KVM
HypervisorGroupルールがID: 3として登録されました。
続いて、
$ onetemplate update ubuntu1604kvm (以下を追記) VMGROUP=[ VMGROUP_NAME="HypervisorGroup", ROLE="KVM" ]
$ onetemplate update ubuntu1604lxd (以下を追記) VMGROUP=[ VMGROUP_NAME="HypervisorGroup", ROLE="LXD" ]
各テンプレートからインスタンスを作成してみましょう。
![画像](/assets/images/admin/serial/01/ubuntu-recipe/0484/thumb/TH800_terminal_vmgroups.png)
![画像](/assets/images/admin/serial/01/ubuntu-recipe/0484/thumb/TH800_sunstone_vmgroups.png)
KVM用ホストのhost002にはまだ仮想マシンを受け入れるだけのリソースの余裕がありますが、
まとめ
二回にわたってOpenNebula 5.