[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
ただいまコメントを受けつけておりません。
OpenStack は色々な仮想化基盤をサポートしている。2013年2月リリースの Havana からは Docker をもサポートするようになった。
私が実際に Docker を用いたコンピュートノードを作成し、 Docker イメージを元にインスタンスを作るに際してとった手順や困ったことなどを書き残しておく。
基本的には Docker - OpenStack の手順に従う。
# usermod -aG docker nova
$ pip install -e git+https://github.com/stackforge/nova-docker#egg=novadocker
$ cd src/novadocker
$ git checkout stable/liberty
(Liberty を使っている前提。適宜書きかえること!)$ python setup.py install
compute_driver = novadocker.virt.docker.DockerDriver
とする。# nova-rootwrap command filters for setting up network in the docker driver
# This file should be owned by (and only-writeable by) the root user
[Filters]
# nova/virt/docker/driver.py: 'ln', '-sf', '/var/run/netns/.*'
ln: CommandFilter, /bin/ln, root
# service nova-compute restart
container_formats = ami,ari,aki,bare,ovf,docker
# service nova-scheduler restart
# service glance-api restart
$ docker pull cirros
$ docker save cirros | \
glance image-create --visibilitty public --container-format docker --disk-format raw --name cirros
hypervisor_type
を docker
にする。hypervisor_type
を docker
にした理由がこれである。なお、非 Docker ノードとは KVM や QEMU 等、Docker でない仮想化基盤を使ったコンピュートノードである。
nova のモジュール nova-scheduler はインスタンス作成リクエストに従い、インスタンスを作成するのにふさわしいコンピュートノードを検索する。この際、 Liberty の nova-scheduler はイメージの種類をコンピュートノードの持つ supported_instances
の情報と照らし合わせて確認する (nova-scheduler の filter である ImagePropertiesFilter がこの役割を担っている) 。
この際、コンピュートノードは Docker をサポートしている旨を発信しているが登録された Docker イメージは自らが Docker イメージであることを主張しない。その為、 ImagePropertiesFilter は Docker を扱えないノードをコンピュートノードの候補から除くことができない。
その結果、Docker をサポートしていない非 Docker ノードに Docker イメージをベースにしたインスタンスを立てようとする。そして、起動に失敗する。
ただし、次のリリースでは確認するプロパティを変更する可能性がある。よく確認すること。
コンピュートノードで Docker インスタンスの起動に失敗する。エラーログを確認すると nova.compute.manager AttributeError: 'dict' object has no attribute 'container_format'
というメッセージが出ていた。
これは単純な話で、 novadocker のバージョンを最新にしてしまっていたためであった。Liberty を使っているのだから novadocker のバージョンも Liberty に揃えるべきであった。
ただいまコメントを受けつけておりません。