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

第21回 LXCの構築・活用 [7] ─ いろいろなストレージバックエンドの利用(3:LVM)

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

前々回前回でAufs,Overlayfs,Btrfsと言ったファイルシステムをストレージバックエンドに使った場合のLXCの使い方を紹介してきました。

今回も引き続きLXCがサポートするストレージバックエンドの紹介をします。今回はLVMをストレージバックエンドとして使った場合のLXCの使い方を紹介します。

前回同様,LVMについてはここでは説明しません。

実は執筆時点でのLXCのstableリリースの最新である1.0.7ではストレージバックエンドとしてLVMを使う場合の不具合があるため,今回の実行例はUbuntu 14.04.2 LTSに以下のようにUbuntu LXCチームが作成しているstable-1.0 ブランチのデイリービルド用PPAのパッケージをインストールした環境で試しています。

$ sudo add-apt-repository ppa:ubuntu-lxc/daily-stable-1.0
$ sudo apt-get update
$ sudo apt-get install lxc
$ dpkg-query -s lxc | grep Version
Version: 1.0.7+stable~20150225-0206-0ubuntu1~trusty

1.0.8がリリースされたあとは,標準のLXCパッケージで今回の実行例がそのまま実行できるようになるはずです。

不具合については後で紹介します。

LXCでLVMをストレージバックエンドとして指定する場合,コンテナイメージを置くための論理ボリュームには以下の2通りのパターンがあります。

  • ボリュームグループ上に直接論理ボリュームを作成
  • Thin Provisioning用のプール上に論理ボリュームを作成

Thin Provisioning機能はLinux 3.2で導入された機能でLVMから使える機能です。

以下ではまずはThin Provisioning機能を使わない方法を紹介したあと,Thin Provisioning機能を使った方法を紹介します。

LVMをストレージバックエンドとして使う場合の準備

LVMをLXCのストレージバックエンドとして使う場合の特別な準備はありません。普通にLVMを操作するコマンド群があれば使えます。ここでは以降の実行例で使う環境で行った準備を紹介しておきます。

LVMを操作するコマンドはUbuntuでは"lvm2"というパッケージですので,これとLVMでサポートされているThin Provisioning機能を使う場合のツールをインストールしました。

$ sudo apt-get install lvm2 thin-provisioning-tools

まずはLVM用に設定したパーティションが必要ですね。ここの例では/dev/vdb1をLVM用に作成しています。

$ sudo fdisk -l /dev/vdb

Disk /dev/vdb: 8589 MB, 8589934592 bytes
2 heads, 1 sectors/track, 8388608 cylinders, total 16777216 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x8ee21092

   Device Boot      Start         End      Blocks   Id  System
/dev/vdb1            2048    16777215     8387584   8e  Linux LVM

/dev/vdb1を物理ボリュームとして設定します。

$ sudo pvcreate /dev/vdb1
  Physical volume "/dev/vdb1" successfully created

LXCではデフォルトではlxcという名前のボリュームグループを使います。このボリュームグループ名はlxc-createコマンド実行時のオプション,もしくはLXCのシステム設定ファイル(Ubuntuの場合/etc/lxc/lxc.confで設定できます。

ここではデフォルトで使われる名前を設定しました。

$ sudo vgcreate lxc /dev/vdb1
  Volume group "lxc" successfully created

これで準備ができました。

$ sudo pvs    (物理ボリュームの確認)
  PV         VG        Fmt  Attr PSize  PFree 
  /dev/vdb1  lxc       lvm2 a--   8.00g  8.00g
$ sudo vgs    (ボリュームグループの確認)
  VG        #PV #LV #SN Attr   VSize  VFree 
  lxc         1   0   0 wz--n-  8.00g  8.00g

LVMを使ったコンテナ用のシステム設定と作成時のオプション

LXCのシステム設定でストレージバックエンドとしてLVMを使う際の設定を行えます。これはコンテナ作成時のデフォルト値として使われます。この設定項目が設定されていない場合は表1に示したデフォルト値が使われます。

表1 LVM関係のシステム設定項目

設定項目 設定項目の説明 デフォルト値
lxc.bdev.lvm.vg デフォルトのLVMボリュームグループ名 lxc
lxc.bdev.lvm.thin_pool デフォルトのThin Provisioning用プール名 lxc

デフォルトではLXCのLVMストレージバックエンドは,lxc.bdev.lvm.thin_poolで設定した値の名前を持つThin Provisioning用のプールが存在する場合には自動的にそのプールに論理ボリュームを作成します。Thin Provisioning用のプールがない場合はlxc.bdev.lvm.vgで設定した値の名前を持つボリュームグループに論理ボリュームを作成します。

表1の設定項目を含め,コンテナ作成時にlxc-createコマンドに-B lvmを指定してLVMをストレージバックエンドとして使う場合に指定できるオプションがありますので紹介しておきましょう。指定しなければデフォルト値が使われます。

表2 ストレージバックエンドがLVMの場合に使えるオプション

オプション オプションの説明 デフォルト値
--lvname コンテナ用に使う論理ボリューム名 コンテナ名
--vgname コンテナ用に使うボリュームグループ名 lxc.bdev.lvm.vgの値
--thinpool Thin Provisioning用のプール名の指定 lxc.bdev.lvm.thin_poolの値
--fstype 論理ボリューム上に作成するファイルシステム名 ext3
--fssize 作成するファイルシステムのサイズ 1G

デフォルト値以外の名前を持つThin Provisioning用プールを使いたい場合は--thinpoolオプションでプール名を指定します。

デフォルト値以外のボリュームグループを使いたい場合は,--vgnameオプションでボリュームグループ名を指定します。Thin Provisioning機能を使う場合でも使用するボリュームグループ名はlxc-createコマンドが使う値(つまりlxc.bdev.lvm.vgの値もしくは--vgnameの設定値)と一致している必要があります。

特に指定しなければ論理ボリューム名はコンテナ名となります。コンテナ名以外の論理ボリュームを使いたい場合は--lvnameで指定します。

あらかじめOS上で作成しておくファイルシステムと違って,LVMの場合はコンテナを作成したりクローンしたりする際に論理ボリュームを作成しますので,その上に作成するファイルシステムの種類やサイズを指定します。

コンテナ作成の際にいろいろなファイルシステムを指定できますので,各種ファイルシステムの特長を活かせるかもしれませんね。

著者プロフィール

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

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

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

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

コメント

コメントの記入