x**3な人生

基本的にはメモ

OpenStack Zunでコンテナを動かすメモ

基本的にはDeveloper Quick-Startを参照すればコンテナを起動することができます。 今回はcirros以外のイメージを登録して動かしてみたかったので、実際にやってみたメモ。

準備

DevStackで環境構築をしています。 DevStack自体の構築はQuick Startの通りです。

DevStackのインストール

まずsudo権限を持つユーザーstackを作成します。

$ sudo useradd -s /bin/bash -d /opt/stack -m stack
$ echo "stack ALL=(ALL) NOPASSWD: ALL" | sudo tee /etc/sudoers.d/stack

次にstackになりDevStackのインストールを行います。

$ sudo su - stack
$ git clone https://git.openstack.org/openstack-dev/devstack
$ cd devstack

local.confdevstack/samplesにあるものを使用します。

$ cp samples/local.conf .

自分の環境に合わせてlocal.confを編集します。

Zunの設定

local.confにzunのための設定を追加します。kuryr-libnetworkはdockerにおいてOpenStackのネットワークを利用するためのプラグインであり、 Zunからネットワーク関連の設定を行うために必要となります。

enable_plugin zun https://git.openstack.org/openstack/zun
enable_plugin zun-tempest-plugin https://git.openstack.org/openstack/zun-tempest-plugin

#This below plugin enables installation of container engine on Devstack.
#The default container engine is Docker
enable_plugin devstack-plugin-container https://git.openstack.org/openstack/devstack-plugin-container

# In Kuryr, KURYR_CAPABILITY_SCOPE is `local` by default,
# but we must change it to `global` in the multinode scenario.
KURYR_CAPABILITY_SCOPE=global
KURYR_ETCD_PORT=2379
KURYR_PROCESS_EXTERNAL_CONNECTIVITY=False
enable_plugin kuryr-libnetwork https://git.openstack.org/openstack/kuryr-libnetwork

# install python-zunclient from git
LIBS_FROM_GIT="python-zunclient"

# Optional:  uncomment to enable the Zun UI plugin in Horizon
enable_plugin zun-ui https://git.openstack.org/openstack/zun-ui

stack.shの実行

これでZunをインストールする準備ができました。次の様にしてKeystoneやNova、Neutronなどともに Zunがインストールされます。

$ cd /opt/stack/devstack
$ ./stack.sh

stack.shが正常に終了すると、stackのホームディレクトリに各サービスのリポジトリが配置されていることが確認できます。

$ ls /opt/stack
horizon  python-zunclient  bin            cinder                     keystone
kuryr      tempest                 devstack  kuryr-libnetwork
...

コンテナイメージの作成と起動

Zunの設定が完了したので、次にコンテナを登録して起動できるようにします。 まずはじめにターミナルからOpenStackの操作ができるよう、adminとしてセットアップを行います。

$ source /opt/stack/devstack/openrc admin admin

コンテナイメージの作成

OpenStackに登録するコンテナを確認します。

$ docker images
REPOSITORY           TAG                 IMAGE ID            CREATED             SIZE
scratch              latest              23419253ba9b        3 days ago          0 B
<none>               <none>              a8a4757ee650        5 days ago          0 B
...
ubuntu               16.04               7aa3602ab41e        3 weeks ago         115 MB
<none>               <none>              7133c2c42ed4        3 weeks ago         0 B
...

ここではdockerイメージubuntu:16.04を用いてOpenStackのコンテナイメージを作成します。 もし自身の環境にこのイメージが存在しない場合はdocker pullにより取得して下さい。

docker saveコマンドの引数としてubuntuを指定し、 これをopenstack image createに渡すことによりイメージを作成することができます。 この例ではコンテナイメージの名前をmycontainerとしています。

$ docker save ubuntu | openstack image create mycontainer --public \
  --container-format docker --disk-format raw

openstack image listによりイメージの一覧を参照すると、mycontainerが登録されていることが確認できます。

$ openstack image list
+--------------------------------------+--------------------------+--------+
| ID                                   | Name                     | Status |
+--------------------------------------+--------------------------+--------+
| 0fe13767-ebec-4fed-90de-b4868d89d659 | cirros-0.3.5-x86_64-disk | active |
| 3ba9f988-5ae0-46a7-880d-71c5c659c460 | mycontainer              | active |
+--------------------------------------+--------------------------+--------+

コンテナの起動

それではこのイメージを用いてコンテナを起動してみましょう。 Developer Quick-Start ではping -c 4 8.8.8.8を実行して動作を確認していますが、ubuntuではpingが無いため 代わりに/bin/bashを実行してみます。 bashでの操作を行うために--interactiveを指定します。 また起動するコンテナの名前は--name testとして指定します。

zun run --image-driver glance \
  --name test \
  --interactive \
  mycontainer /bin/bash

起動が成功すると、実行結果が表示された後に以下の様なメッセージが表示されるので Enterを押してbashに移行します。終了するにはexitを実行します。

...
Waiting for container start
Waiting for container start
connected to 865323fc-f74f-49db-b8ef-abc0d31c62dd, press Enter to continue
type ~. to disconnect
root@9aefd148f29c:/# 
...
root@9aefd148f29c:/# exit

bashを抜けた後もコンテナは引き続き動作しています。zun listにより状態を確認することができます。

$ zun list
+--------------------------------------+------+-------------+---------+------------+--------------------------+-------+
| uuid                                 | name | image       | status  | task_state | addresses                | ports |
+--------------------------------------+------+-------------+---------+------------+--------------------------+-------+
| 865323fc-f74f-49db-b8ef-abc0d31c62dd | test | mycontainer | Running | None       | 172.24.4.19, 2001:db8::5 | []    |
+--------------------------------------+------+-------------+---------+------------+--------------------------+-------+

なお--image-driver glanceを指定しないと登録したイメージを参照することができずにエラーとなるため注意して下さい。

$ zun run --name test --interactive  mycontainer /bin/bash
ERROR: Image mycontainer could not be found. (HTTP 400) (Request-ID: req-79fe7422-9db4-40bb-b3e7-8bd58dcf4e05)

最後にコンテナを停止して、削除を行います。

$ zun stop test
Request to stop container test has been accepted.
$ zun delete test
Request to delete container test has been accepted.

zun listコマンドにより削除されていることが分かります。

$ zun list
+------+------+-------+--------+------------+-----------+-------+
| uuid | name | image | status | task_state | addresses | ports |
+------+------+-------+--------+------------+-----------+-------+
+------+------+-------+--------+------------+-----------+-------+

以上