Ubuntu Weekly Recipe

第484回 UbuntuとOpenNebulaでKVMとLXDのインスタンスを起ち上げてみよう

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

LXDイメージとテンプレートの登録

LXD用のイメージファイルとテンプレートを登録します。前述の通り,LXDoNeはLXDネイティブなイメージファイルではなくRAW形式のイメージファイルを使用します。MarketPlaceでLXD用のUbuntu 16.04 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

ID: 16の「Ubuntu 16.04 - LXD」がLXD用のUbuntu 16.04 Appです。onemarketapp exportコマンドでubuntu1604lxdという名称で登録してみましょう。

$ 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欄が「runn」になれば成功です。こちらもSSH_PUBLIC_KEY属性に指定した公開鍵でログインできます。ログインアカウントはrootです。

図2 LXDコンテナインスタンスにログイン

画像

MarketPlaceのLXDoNe用Appはディスク容量が1GBしかありません。デプロイ時のイメージサイズの拡張にも対応していないため,大きなディスク領域を必要とする用途には不向きです。LXDoNe用のRAWイメージファイルを自作する方法も公開されているので,こちらを参考に大容量イメージファイルの作成に挑戦してみるのもいいでしょう。

KVM用ホストとLXD用ホストを共存させる

OpenNebulaはイメージファイルの形式とホストのドライバスクリプトの組み合わせを判断しません。このため,KVM用ホストとLXD用ホストが混在する環境では,例えばKVM用のイメージファイルがLXD用ホストにデプロイされてインスタンスの起動に失敗する,という状況が起こり得ます。これを防ぐには管理者が何らかの方法でデプロイ時のルールを決める必要があります。

大規模なクラウド環境では,データストアやネットワークリソースとホストを束ねるClusterを利用するのが便利です。ただ,今回はホストが数台程度の環境なので,OpenNebula 5.4の新機能の一つであるVM Groupsを使用してKVM用ホストとLXD用ホストを共存してみます。

VM Groups定義ファイルの作成

例として,host001(ID: 0)とhost003(ID: 2)がLXD用ホスト,host002(ID: 1)がKVM用ホスト,という環境を考えます。以下のような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,2のホストが割り当てられ(HOST_AFFINED)⁠逆にKVMロールにはID: 0,2以外のホストが割り当てられます(HOST_ANTI_AFFINED)⁠

onevmgroup createコマンドに定義ファイルを指定して実行し,VM GroupsルールをOpenNebulaに登録します。

$ 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コマンドで,所属させるVM Groupsルールとロールをテンプレートに記述します。テンプレートubuntu1604kvmをKVMロールに,テンプレートubuntu1604lxdをLXDロールに所属させるには,以下のように追記します。

$ onetemplate update ubuntu1604kvm
(以下を追記)
VMGROUP=[
  VMGROUP_NAME="HypervisorGroup",
  ROLE="KVM" ]
$ onetemplate update ubuntu1604lxd
(以下を追記)
VMGROUP=[
  VMGROUP_NAME="HypervisorGroup",
  ROLE="LXD" ]

各テンプレートからインスタンスを作成してみましょう。

図3 KVMインスタンスとLXDインスタンスのデプロイ

画像

図4 Sunstone上の表示

画像

KVM用ホストのhost002にはまだ仮想マシンを受け入れるだけのリソースの余裕がありますが,LXDインスタンスには割り当てられず,LXDインスタンスubuntu1604lxd-38はLXD用ホストのリソースが空くのを待ってペンディングとなっています。

まとめ

二回にわたってOpenNebula 5.4の環境構築を紹介しました。OpenNebulaはシンプルかつフレキシブルで信頼性の高いクラウド管理・構築ツールです。バージョンアップのたびに管理者や利用者の「こういうのがあればいいなぁ」という機能が追加されており,順調に使いやすくなっていると思います。構築も比較的簡単なので,夏休みの自由研究も兼ねて,ご家庭にUbuntuとOpenNebulaによるクラウド環境を構築してみるのはいかがでしょうか。

著者プロフィール

大田晃彦(おおたあきひこ)

株式会社 創夢 所属。UbuntuとGentooでアニメを録画したりしながら暮らしています。全体的に浅いです。

コメント

コメントの記入