Snappy Ubuntu Core on IDCFクラウド - Part1: 公式OVAを使う


2015-01-14に待望のSnappy Ubuntu CoreのOVAイメージが公開されました。以前はVMwareにデプロイするときはかなり面倒で、野良OVAイメージのビルドに次のステップが必要でした。

  1. qemu-imgコマンドでQCOW2イメージをVMDK形式する
  2. VMXファイルをマニュアルで記述する
  3. ovftoolコマンドでVMXファイルからOVAイメージを作成する

公式のOVAにはcloud-initもインストール済みなので、cloud-config.ymlをuserdataとして使えば、IDCFクラウドでもSnappy Ubuntu Coreが簡単に使えます。

OVAテンプレートの作成

Snappy Ubuntu Core now on the hypervisor of your choice with OVAのページにあるlatest OVA imageのリンクからOVAのURLを取得します。テンプレート名、説明、URL、OSタイプ以外はデフォルトです。OSタイプは一番近いUbuntu 12.04 (64bit)を選びました。

  • テンプレート名: 任意
  • 説明: 任意
  • URL: http://cloud-images.ubuntu.com/snappy/devel/core/current/devel-core-amd64-cloud.ova
  • ゾーン: tesla
  • ハイパーバイザー: VMware
  • OSタイプ: Ubuntu 12.04 (64bit)
  • フォーマット: OVA
  • エクスポート: 有効
  • パスワードリセット: 有効
  • ダイナミックスケール: 有効
  • ルートディスクコントローラ: scsi
  • NICアダプタ: Vmxnet3
  • キーボード: Japanese

仮想マシンの作成

最小設定のcloud-config

Snappy Ubuntu CoreはCoreOSと同じようにcloud-configを使って起動する必要があります。cloud-configを使わなくても起動はできますが、外部からのSSH接続が許可されていないため、コンソールからしか使えません。今回は最小設定のcloud-configを使います。

cloud-config.yml
#cloud-config
snappy:
  ssh_enabled: True

必要な情報の取得

仮想マシンを作成する時に必要なパラメータをIDCFクラウドのCLIを使い確認します。

  • listTemplates: テンプレートのidを取得
  • listZones: ゾーンのidを取得
  • listServiceOfferings: 仮想マシンサイズのidを取得
  • listSSHKeyPairs: SSH公開鍵の名前を取得

Snappy Ubuntu CoreにはCloud-initがインストールされています。IDCFクラウドが採用しているCloudStackをDataSourceとして自動的に認識してくれるので、指定した名前のSSH公開鍵をubuntuユーザーのauthorized_keysに登録してくれます。これはかなり便利です。

またAPIを実行するために必要な以下の情報をポータルの画面から確認しておきます。

  • IDCF_COMPUTE_HOST: エンドポイント
  • IDCF_COMPUTE_API_KEY: APIキー
  • IDCF_COMPUTE_SECRET_KEY: シークレットキー

仮想マシン作成のPythonスクリプト

IDCFクラウドのCLIツールはPythonで書いているので、Pythonプログラムのモジュールとしてimportできます。cloud-configはuserdataとしてBASE64でエンコードしてからパラメータに使います。

deploy.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-

import base64
from idcf.compute import Compute

def main():
    rawuserdata = '''#cloud-config
snappy:
  ssh_enabled: True
'''
    userdata = base64.b64encode(rawuserdata)
    client = Compute(
        host='エンドポイント',
        api_key='APIキー',
        secret_key='シークレットキー',
        debug=True)

    retval = client.deployVirtualMachine(
        keypair='SSH公開鍵の名前',
        serviceofferingid='仮想マシンサイズのID',
        templateid='登録したOVAテンプレートのID',
        zoneid='ゾーンのID',
        name='任意のhostname',
        userdata=userdata)

    print(retval)

if __name__ == "__main__":
    main()

Pythonスクリプトの実行

仮想マシンが作成されるまで数分待ちます。SSHサーバーが起動するまでに初回設定が入るため、ポータル画面で状態がRunningになっていてもSSHで接続できるまでさらに数分必要です。コンソールでlogin待機になるまでしばらく待ちます。

SSH公開鍵認証でログイン

アカウント内の別の仮想マシンから、または、パブリックのIPアドレスをポートフォワードしてSSH公開鍵認証で接続します。

$ ssh -A ubuntu@snappy 
Welcome to Ubuntu Vivid Vervet (development branch) (GNU/Linux 3.18.0-9-generic x86_64)

 * Documentation:  https://help.ubuntu.com/

The programs included with the Ubuntu system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by
applicable law.

Welcome to the Ubuntu Core rolling development release.

 * See https://ubuntu.com/snappy

It's a brave new world here in snappy Ubuntu Core! This machine
does not use apt-get or deb packages. Please see 'snappy --help'
for app installation and transactional updates.

To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.
ubuntu@snappy:~$

バージョン確認など

OSのバージョンを確認します。

$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=15.04
DISTRIB_CODENAME=vivid
DISTRIB_DESCRIPTION="Ubuntu Vivid Vervet (development branch)"

ubuntu-coreはedge 144がインストールされていて最新の状態です。

$ snappy versions
Part         Tag   Installed  Available  Fingerprint     Active
ubuntu-core  edge  144        -          395812b6615109  *
This command needs root, please run with sudo
$ snappy update-versions
0 updated components are available with your current stability settings.

snappyコマンドのバージョンです。

$ snappy --version
0.1

まだframeworksもappsもインストールされていません。

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

Dockerをインストール

とりあえずDockerをインストールします。Snappy Ubuntu CoreではDockerのインストールはとても簡単なのですぐに使い始めることができます。

$ snappy search docker
Part    Version    Description
docker  1.3.3.001  The docker app deployment mechanism
$ sudo snappy install docker
docker      4 MB     [===================================================================]    OK
Part    Tag   Installed  Available  Fingerprint     Active
docker  edge  1.3.3.001  -          60b98945e5fc1d  *
Reboot to use the new ubuntu-core.
$ sudo snappy versions
Part         Tag   Installed  Available  Fingerprint     Active
ubuntu-core  edge  144        -          395812b6615109  *
docker       edge  1.3.3.001  -          60b98945e5fc1d  *
Reboot to use the new ubuntu-core.

アプリのインストール

サンプルのhello-worldアプリをインストールします。

$ sudo snappy install hello-world
hello-world     31 kB     [==============================================================]    OK
Part         Tag   Installed  Available  Fingerprint     Active
hello-world  edge  1.0.5      -          3e8b192e18907d  *
Reboot to use the new ubuntu-core.

先ほどのdockerはframeworks、hello-worldアプリはappsとしてレイアで区別されます。

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

Hello World!を表示するだけのアプリがインストールされました。

$ which hello-world.echo
/home/ubuntu/snappy-bin/hello-world.echo
$ hello-world.echo
Hello World!