Ubuntu Weekly Recipe

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

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

前回のRecipeではOpenNebula 5.4でフロントエンドとホストをセットアップし,ホストを登録するところまで辿りました。今回はネットワークやイメージファイルといったリソースをOpenNebula環境に登録し,実際にインスタンスを起ち上げてみましょう。

リソースの登録や変更,インスタンスの起動停止といった操作は,WebインタフェースのSunstoneまたはターミナルからのCLIで行えます。今回は主にCLIから操作することにします。Sunstoneからのリソース登録は第346回の記事で取り上げていますので,そちらを参考にしてください。

ネットワークリソースを定義

仮想マシンに割り当てるIPアドレスのプールやデフォルトゲートウェイなどの情報を定義します。アドレスレンジやIPプロトコルバージョン(IPv4,IPv6,IPv4 IPv6デュアルスタック等)⁠VLAN ID,接続するブリッジインタフェースなどを組み合わせて,ネットワークリソースとして登録します。

今回は,IPv4の192.168.1.160〜167の8アドレスをプールするネットワークリソースを,mynetworkという名称で登録してみましょう。まず適当なエディタで以下のような定義ファイルを作成します。

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_MAD ネットワークドライバの種類。今回はdummyドライバを使用します。
BRIDGE ブリッジインタフェース名。ホストで作成したブリッジインタフェースの名称を記載します。
AR アドレスレンジを指定します。この例ではIPv4の192.168.1.160を起点に8個のアドレスをプールします。
DNS DNSサーバのアドレスを指定します。
GATEWAY このネットワークのデフォルトゲートウェイのアドレスを指定します。

詳細や他に使用できる属性についてはOpenNebula 5.4のリファレンスを参照してください。

作成した定義ファイルを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が登録されており,フロントエンドを構築した直後からSunstoneやCLIからアクセスできます※1)⁠

※1
PublicなMarketPlaceの他に,ローカル環境にプライベートなMarketPlaceを構築して利用することも可能です。このあたりはうぶんちゅ!まがじん ざっぱ〜ん♪ Vol.6で取り上げましたので,興味のある方はそちらもご覧ください。

MarketPlaceでは仮想マシンのイメージファイルとテンプレートをセットにしたApp(Appliance)が公開されています。今回はMarketPlaceからUbuntu 16.04のKVM用AppをダウンロードしてOpenNebulaに登録してみます。

onemarketapp listコマンドでMarketPlace上のAppが一覧表示できるので,Ubuntu関連をgrepします。

$ 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して,OpenNebula環境に登録します。ID: 2の「Ubuntu 16.04 - KVM」をubuntu1604kvmという名称でダウンロードして登録してみましょう。-dオプションは登録するデータストアを指定します。ここではdefaultデータストアを指定しています。

$ 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テンプレートに,ネットワークリソースとしてmynetworkを追加してみましょう。これにはonetemplate updateコマンドを使用します。

$ onetemplate update ubuntu1604kvm

エディタが立ち上がるので,末尾に以下を追記して保存します。

NIC = [ NETWORK = "mynetwork", NETWORK_UNAME="oneadmin", MODEL="virtio" ]

仮想マシン用SSH公開鍵設定

MarketPlaceからダウンロードしてきたイメージファイルにはone-contextパッケージがインストールされています。このパッケージの提供する各種スクリプトにより,仮想マシン起動時にOpenNebulaから渡された構成情報に従ってネットワーク設定やディスクサイズ拡張などが行われます。

OpenNebulaアカウントにSSH_PUBLIC_KEY属性が定義されていれば,SSHでログインするための公開鍵も仮想マシンに渡せます。例として,OpenNebulaの管理者アカウントoneadminにSSH_PUBLIC_KEY属性を設定してみましょう。これにはoneuser updateコマンドを使用します。

$ oneuser update oneadmin

エディタが立ち上がるので,末尾にSSH_PUBLIC_KEY属性とSSH公開鍵を追記して保存します。

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欄が「runn」になっていれば成功です。仮想マシンに割り当てられたIPアドレスはonevm showコマンドで確認できます。

$ 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アドレスを確認するのは面倒ですので,onevm listコマンドの一覧表示にIPアドレスの項目を追加しておきましょう。/etc/one/cli/onevm.yamlをエディタで開き,":default:"の項目に"- :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_PUBLIC_KEY属性に記載した公開鍵でログインできます。ログインアカウントはAppによって異なり,⁠Ubuntu 16.04 - KVM」の場合はrootでログインします。

図1 KVM仮想マシンインスタンスにログイン

画像

ここまでくれば,ひとまずKVMでのクラウド環境ができあがったといえるでしょう。

著者プロフィール

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

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

コメント

コメントの記入