LXCで学ぶコンテナ入門 -軽量仮想化環境を実現する技術

第11回 LXCの設定[1]

この記事を読むのに必要な時間:およそ 5 分

前回まででLXCに付属しているコマンドの説明が済みましたので,今回からはLXCの設定について説明していきたいと思います。

LXCの設定は2つに分かれます。システムの設定とコンテナの設定です。

システムの設定
LXCがシステム全体で共通して使用する値を設定します。コンテナの保存場所やストレージバックエンドの設定などです。
コンテナの設定
各コンテナの動作を決定する設定です。コンテナごとに設定ファイルが存在します。

Ubuntuにおけるシステム設定が書かれたファイルや,システム設定で設定される各種の値については第8回で紹介しました。

設定ファイルの書式

LXCの設定ファイルの書式はシンプルです。

  • 設定は『設定項目名 = 設定値』という形式で1行につき1つ設定します("="の前後のスペースはなくても構いません)
  • 行頭が "#" で始まる場合,その行はコメントとなります
  • 各設定項目名の頭には "lxc." が付きます

以下のように設定行の途中で "#" を記載してコメントは書けません。

# この行はコメントです
lxc.arch = x86_64 # このようなコメントは許されません

設定項目の頭に必ず "lxc." と付けなければいけないのは少し冗長に思えますね。

システムの設定

システムの設定で設定できる項目は前回紹介したlxc-configコマンドで一覧できます。

# lxc-config -l
lxc.default_config
lxc.lxcpath
lxc.bdev.lvm.vg
lxc.bdev.lvm.thin_pool
lxc.bdev.zfs.root

このコマンドで設定可能な項目が一覧できるはずなのですが,実はこれ以外にも設定項目があり,以下のような項目でcgroup関係の設定ができます。

  • lxc.cgroup.use
  • lxc.cgroup.pattern

現時点のlxc-configコマンドにはなぜかその設定を確認する実装がされていません※1)⁠

※1)
筆者がパッチを送付していますので今後表示できるようになるかも知れません。
2015年7月15日補足)その後パッチがマージされましたのでバージョン1.1ではlxc.cgroup.uselxc.cgroup.patternの値が表示できるようになりました。

lxc.default_config

lxc.default_configで指定したファイルの内容は,lxc-createコマンドを使ってコンテナを作成した場合に,生成されるコンテナの設定ファイルにコピーされます。

Ubuntuの場合,lxc.default_configの値は/etc/lxc/default.confに設定されており,内容は以下のようにネットワーク関係の設定が書かれています。

# lxc-config lxc.default_config
/etc/lxc/default.conf
# cat /etc/lxc/default.conf
lxc.network.type = veth
lxc.network.link = lxcbr0
lxc.network.flags = up
lxc.network.hwaddr = 00:16:3e:xx:xx:xx

この設定がlxc-createで作成したコンテナにコピーされている様子は第8回lxc-createを使ったコンテナの作成を説明したところで紹介しました。

ネットワークの設定以外にも作成するコンテナに自動で設定したい項目がある場合はlxc.default_configで指定されているファイルに記載すると良いでしょう。

lxc.path

lxc.path第8回で紹介した通り「コンテナの保存場所」です。

デフォルト値はコンパイル時に指定した値になります。このパスを変更したい場合は指定すると良いでしょう。

Ubuntu の場合,この値は/var/lib/lxcとなっています。

lxc.cgroup.use

LXCで使用するcgroupのサブシステムを指定します。執筆時点の1.0.5ではcgmanagerを使ってcgroupを管理している場合は無視されます。

たとえば以下のように指定すると,指定したcpu,cpuset,memoryサブシステムのみを使ってコンテナを起動します。

lxc.cgroup.use = cpu,cpuset,memory

lxc.cgroup.pattern

コンテナを起動する際にcgroupfsに作成するLXCコンテナ用のグループのパターンを指定します。

デフォルトではこの値はlxc/%nとなっています。%nはコンテナ名に置き換わります。

このデフォルトの設定で,cpuサブシステムが/sys/fs/cgroup/cpuにマウントされているときにct01というコンテナを起動すると/sys/fs/cgroup/cpu/lxc/ct01ct01用のグループを作成します。

lxc.cgroup.pattern = hoge/%n

と設定すると,上記の例でのct01用のグループは/sys/fs/cgroup/cpu/hoge/ct01に作成されます。


システム設定のうちlxc.bdev.で始まる設定はストレージバックエンドの設定です。これらの設定については,この連載の後の回で解説します。

システム設定の詳細についてはman lxc.system.confでご覧になれます。

コンテナの設定

システムの設定は,デフォルト値のまま使用することも多いでしょうし,一度設定すれば頻繁に変更するものでもありません。

それに対してコンテナの設定は本格的にコンテナを運用する場合には変更する場合も多いでしょう。こちらは設定項目もかなりの数にのぼります。

コンテナの設定についてはman lxc.container.confで詳細を調べられます。

lxc-createでコンテナを作成した際に自動的に作られる設定ファイルやLXCが標準で準備する設定ファイルにある項目から順に見ていきましょう。

設定ファイルのinclude ~lxc.include

lxc.includeは文字通り他に準備した設定ファイルをincludeする設定です。LXCは共通で使用する推奨の設定があらかじめ準備されており,lxc-createではそれをincludeする設定が作成されます。

Ubuntuコンテナを作成した場合は以下のような設定がなされ,指定したファイルに書かれた設定が読み込まれます。

lxc.include = /usr/share/lxc/config/ubuntu.common.conf

コンテナのアーキテクチャの設定 ~lxc.arch

lxc.archでコンテナのアーキテクチャを設定します。x86_64やamd64という64ビットのアーキテクチャのホストでは32bitのバイナリも実行できますので,その場合i686などと設定します。

コンテナのルートファイルシステム ~lxc.rootfs

コンテナイメージが保存されているルートファイルシステムを指定します。

ストレージバックエンドがディレクトリであるとき,コンテナの'/'(ルート)にあたるディレクトリのホス トOS上でのパスを指定します。他にイメージファイルやブロックデバイスも指定できます。

lxc.rootfs = /var/lib/lxc/ct01/rootfs

コンテナのホスト名 ~lxc.utsname

lxc.utsnameでコンテナのホスト名を指定します。コンテナ起動時に新しいUTS名前空間が作成され指定したホスト名が設定されます。

著者プロフィール

加藤泰文(かとうやすふみ)

2009年頃にLinuxカーネルのcgroup機能に興味を持って以来,Linuxのコンテナ関連の最新情報を追っかけたり,コンテナの勉強会を開いたりして勉強しています。英語力のない自分用にLXCのmanページを日本語訳していたところ,あっさり本家にマージされてしまい,それ以来日本語訳のパッチを送り続けています。

Plamo Linuxメンテナ。ファーストサーバ株式会社所属。

Twitter:@ten_forward
技術系のブログ:http://tenforward.hatenablog.com/

コメント

コメントの記入