常田です
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」というタブがあるのでクリックすると下の画像のような画面が表示されます。
ここで先ほどアップロードしたイメージを選択します。またこの際に、Operating Systemとして「Ubuntu」を選択するようにしておきます。
終了すると以下のように「Temppate」が追加されていることがわかります。このまま後は通常リストア処理をするように右側の「Action」ボタンから「仮想サーバ」として起動します。
注意)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の導入を行ってみました。全てがこのケースでうまくいくわけではないと思いますが手段の一つとして覚えておきたい機能です。