常田です

Ubuntu Core が発表されましたね。先日はCoreOSがRocketという独自のコンテナを使うことを公表しましたが、UbuntuCoreでは特定のコンテナによらずに利用する事を想定されているそうです。

今後はのような、コンテナを上手く動かすための軽量OSとコンテナアプリケーションを動かすための軽量OSと出てくる用になるであろうとされています。さて、そのような Ubutu CoreはCoreOS同様にOSのアップデートのロールバックなどを備えるOSのようです。利用可能なPlatformは、AzureとKVMでの提供となっていました。

今回は、SoftLayer上の仮想サーバでこのKVMイメージを利用して起動して見たいと思います。

Imageの取得とアップロード

ローカルの作業はPC上のUbuntuから利用していますが他のOSなどでも問題なく利用できます。ここで利用するのはqemu-imgコマンドになります。SoftLayerでは、仮想サーバのイメージテンプレートをVHD形式でやりとりする事が可能です。

$ curl -O http://cdimage.ubuntu.com/ubuntu-core/preview/ubuntu-core-alpha-01.img
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  108M  100  108M    0     0  1061k      0  0:01:44  0:01:44 --:--:-- 1138k

file ubuntu-core-alpha-01.img
ubuntu-core-alpha-01.img: Qemu Image, Format: Qcow

上記のようにダウンロードをします、ファイルの中身はQemuフォーマットのイメージとなっていました。この場合VHD形式へ変換する必要があるため qemu-utils を利用します。コンバートするためには qemu-img コマンドで実施します。

$ sudo apt-get install qemu-utils
$ qemu-img convert -f qcow2 -O vpc ubuntu-core-alpha-01.img ubuntu-core-alpha-01.vhd
$ ls -l ubuntu-core-alpha-01.*
-rw-r--r-- 1 vagrant vagrant 113377280 Dec 11 12:08 ubuntu-core-alpha-01.img
-rw-r--r-- 1 vagrant vagrant 427966976 Dec 11 12:31 ubuntu-core-alpha-01.vhd

このvhdファイルを、SoftLayerのオブジェクトストレージに転送したいと思います。SoftLayerのオブジェクトストレージは1コンテナ(ここではObjectStorageの”コンテナ”)の中に最大5GByteのファイルを1000個まで入れる事ができます。今回のケースでは、430MByte程度のため問題ないでしょう。

$ sftp NICOS396820-2:NIC396820@dal05.objectstorage.softlayer.net
NICOS396820-2:NIC396820@dal05.objectstorage.softlayer.net's password:
Connected to dal05.objectstorage.softlayer.net.
sftp> ls
sample
sftp> cd sample
sftp> put ubuntu-core-alpha-01.vhd
Uploading ubuntu-core-alpha-01.vhd to /sample/ubuntu-core-alpha-01.vhd
ubuntu-core-alpha-01.vhd                                                                                                100%  408MB 180.7KB/s   38:33
sftp>

上記で転送は完了しました。

Imageを仮想マシンとして起動する。

SoftLayerでは仮想サーバのバックアップとして、イメージテンプレート機能を利用することが出来ます。管理ポータル画面にて「Image Templates」へ移動します。右上の「Import Template」というタブがあるのでクリックすると下の画像のような画面が表示されます。

SoftLayer Customer Portal

ここで先ほどアップロードしたイメージを選択します。またこの際に、Operating Systemとして「Ubuntu」を選択するようにしておきます。

終了すると以下のように「Temppate」が追加されていることがわかります。このまま後は通常リストア処理をするように右側の「Action」ボタンから「仮想サーバ」として起動します。

SoftLayer Customer Portal

注意)IPアドレスとか勝手には割り当てられないんだろうなと思っていたのですが問題なく利用可能な状態で起動してきました。サーバのアクセスは、ubuntu/ubuntuとなります。

ログインとDockerの導入

名前解決が出来ていないようです。本来はUbunt Coreとしての使い方としてダメだと思うのですが一旦 /etc/resolvconf/resolv.conf.d/base へ強制的に書き込みます。

$ sudo mount -o remount,rw /
sudo vi /etc/resolvconf/resolv.conf.d/base

設定内容は以下のようにします。再起動するか、/etc/initd/resolvconf restart すればよいかと思います。

nameserver 8.8.8.8

ファイルシステムについてはこちらへ記事が出ていました。

2つのイメージを切り替えて使うような形で先ほどのbaseファイルもReadOnlyでしたので多分変更してはいけない範囲なのかなと思います。本来は、別のユーザが変更可能な領域に設定する箇所が有るのかもしれません。

Ubuntu Coreでは、apt-get ではなくて管理コマンドは Snappy となります。

Dockerを導入します

ubuntu@ubuntsucore:~$ snappy install docker
docker      4 MB     [=========================================================================================================================]    OK
Part    Tag   Installed  Available  Fingerprint     Active
docker  edge  1.3.2.007  -          b1f2f85e77adab  *

情報を見てみます。

$ snappy info
release: ubuntu-core/devel
frameworks: docker
apps:

Snappyで管理されるバージョンを確認します。

ここでAvailableとして表示されると新しいバージョンが導入で切るようです。また複数のバージョンが同時に導入でき「Active」化するかどうかで制御される模様です。本体のUbuntu-core自体も同じように管理されるようです。

$ sudo snappy versions
Part         Tag   Installed  Available  Fingerprint     Active
ubuntu-core  edge  140        -          184ad1e863e947  *
docker       edge  1.3.2.007  -          b1f2f85e77adab  *

Docker のアプリケーションを起動する

Ubuntu Coreでは独自のアプリケーションをBuildして管理してくことが出来るようですが今回は普通にDockerアプリケーションコンテナを入れてみたいと思います。

$ docker run centos:centos7 /bin/bash
Unable to find image 'centos:centos7' locally
centos7: Pulling from centos
511136ea3c5a: Pull complete
5b12ef8fd570: Pull complete
34943839435d: Pull complete
Status: Downloaded newer image for centos:centos7
ubuntu@ubuntsucore:~$ docker run centos:centos7 cat /etc/redhat-release
CentOS Linux release 7.0.1406 (Core)

無事にCentOS7のイメージでコンテナ実行することが出来ました。

Ubuntu Coreの利用しているリソース

何もしない状態であればCPUは0%でほぼ何も動いていません。

ubuntu@ubuntsucore:~$ top
top - 01:53:54 up 4 min,  2 users,  load average: 0.00, 0.01, 0.01
Tasks: 110 total,   1 running, 109 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem:   1011668 total,   170428 used,   841240 free,     6868 buffers
KiB Swap:        0 total,        0 used,        0 free.    96376 cached Mem

  PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND
    1 root      20   0   29052   5328   3256 S  0.0  0.5   0:01.48 systemd
    2 root      20   0       0      0      0 S  0.0  0.0   0:00.00 kthreadd
    3 root      20   0       0      0      0 S  0.0  0.0   0:00.00 ksoftirqd/0
    4 root      20   0       0      0      0 S  0.0  0.0   0:00.00 kworker/0:0
    5 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 kworker/0:0H
    6 root      20   0       0      0      0 S  0.0  0.0   0:00.00 kworker/u30:0
    7 root      20   0       0      0      0 S  0.0  0.0   0:00.38 rcu_sched
    8 root      20   0       0      0      0 S  0.0  0.0   0:00.02 rcuos/0

次にメモリも同様です。

ubuntu@ubuntsucore:~$ free
             total       used       free     shared    buffers     cached
Mem:       1011668     170040     841628       4748       6868      96376
-/+ buffers/cache:      66796     944872
Swap:            0          0          0

まとめ

今回は、Dockerコマンドを実行してみただけですが軽量のOSが登場することは良いことだと思います。コンテナをどの様に配置するかということと同様にコンテナを動かすサーバのメンテナンス等の話にも成るかと思います。其のような際に無駄なものが導入されていない基盤が選択肢にあることは非常に好ましいですね。

また今回は、SoftLayerでは標準で用意されていないOSの導入を行ってみました。全てがこのケースでうまくいくわけではないと思いますが手段の一つとして覚えておきたい機能です。