LXC 再入門。

まえだこうへい mkouhei@debian.or.jp
     a.k.a. mkouhei


       2012 年 7 月 26 日




                         .   .   .   .   .   .
再入門?




       .   .   .   .   .   .
2009 年 12 月の
東京エリア Debian 勉強会の
ネタの焼き直しです



            .   .   .   .   .   .
自己紹介

 まえだこうへい
 ▶   Debian JP Project Leader(2011, 2012) / CouchDB JP
 ▶   勤務先:渋谷の会社
 ▶   Python 関連の Debian パッケージのメンテナンスなど
 ▶   職場で使用している OpenStack の構築・運用で必要な、
     周辺ツールの開発、構築とか
 ▶   執筆
       ▶   Git によるバージョン管理 (オーム社)
       ▶   KVM 徹底入門 (翔泳社)
       ▶   ゆったリラックス! CouchDB があるところ (@IT) #5
       ▶   知って見るみる KVM(@IT)
 ▶   今日は (一応)lxc JP として呼ばれたようです

                                   .   .   .   .   .     .
宣伝。
Google group で lxc JP 1
流量の少ない緩いやりとり
をしてます:)



 1
     https://groups.google.com/group/lxc-jp/about?hl=ja
                                        .   .    .   .    .   .
LXC とは?


  ▶   Linux Containers のこと
        ▶   コンテナを稼働させるホスト自体のカーネルの機能
        ▶   LXC を管理するための lxc-* コマンドラインツール
  ▶   LXC で使えるコンテナ
        ▶   システムコンテナ:いわゆる OS の仮想化
        ▶   アプリケーションコンテナ:特定のプロセスの分離
  ▶   para,full-virtualization とは違うのでホストカーネル上で
      動くものしかコンテナでは使えない
  ▶   他のコンテナ技術:OpenVZ, Linux-VServer,Solaris
      Containers, FreeBSD jail



                               .   .   .   .   .   .
導入




     .   .   .   .   .   .
パッケージインストール




 libvirt を使わなければ Squeeze でも OK
  $ sudo apt-get install lxc iproute debootstrap




                                                   .   .   .   .   .   .
kernel option 確認
   $ lxc-checkconfig
   Kernel config /proc/config.gz not found, looking in other places...
   Found kernel config file /boot/config-3.0.0-1-amd64
   --- Namespaces ---
   Namespaces: enabled
   Utsname namespace: enabled
   Ipc namespace: enabled
   Pid namespace: enabled
   User namespace: enabled
   Network namespace: enabled
   Multiple /dev/pts instances: enabled
   --- Control groups ---
   Cgroup: enabled
   Cgroup clone_children flag: enabled
   Cgroup device: enabled
   Cgroup sched: enabled
   Cgroup cpu account: enabled
   Cgroup memory controller: enabled
   Cgroup cpuset: enabled

   --- Misc ---
   Veth pair device: enabled
   Macvlan: enabled
   Vlan: enabled
   File capabilities: enabled
   Note : Before booting a new kernel, you can check its configuration
                                                 .    .    .    .     .   .
足りなければ、カーネルリ
ビルドしる




        .   .   .   .   .   .
確認する




 即席コンテナで稼働確認
 $ sudo lxc-execute -n hoge -f -- /bin/bash
 # lxc-info -n hoge
 state:   RUNNING
 pid:      4520
 $ sudo lxc-stop -n hoge <-別のシェルで実行。




                                              .   .   .   .   .   .
システムコンテナを使う



 1.   ネットワークの設定
 2.   cgroup ファイルシステムのマウント
 3.   コンテナの rootfs 作成
 4.   コンテナのファイルの微調整
 5.   コンテナの起動
 簡単に Debian 環境を増やせて、すぐ起動できるのが良いで
 すね!




                         .   .   .   .   .   .
lxc のライフサイクル




 他の仮想マシンのライフサイクルと大差ない。
                                                                          lxc-freeze
                                                                                            FROZEN
                                                          RUNNING        lxc-unfreeze
                                                                           lxc-stop
                                                  error
                           lxc-start   STARTING           ABORTING
    lxc-create                                                                              STOPPING
                 STOPPED
   lxc-destroy




                                                            .        .        .         .       .      .
リソースの管理

 ▶     cgroup(Control Group) を使う
 ▶     UI として lxc-cgroup コマンドが用意されている
 ▶     cgroup ファイルシステム経由でリソース管理する
        cgroup   /sys/fs/cgroup   cgroup   defaults       0   0


 ▶     システムコンテナの rootfs はどこでも良い。Debian で
       は/var/lib/lxc 以下に置くのがデフォルト
 ▶     Debian では/etc/default/grub に下記を設定し、
       update-grub2 の実行が必要。2
        GRUB_CMDLINE_LINUX="cgroup_enable=memory"




  2
      http://wiki.debian.org/LXC                      .       .   .   .   .   .
libvirt の話



    ▶   Squeeze では使えない。
    ▶   Wheezy/Sid の libvirt(0.9.12) では一部機能制限があるが
        使える。
          ▶   一部:shutdown, reset, reboot ができない
          ▶   Upstream の 7/12 のコミット 97d7f02 で shutdown が一
              部制限付きで Fix されたので、0.9.14 からは使えるか
              も。3




    3
        Wheezy では使えない、ということですね….           .   .   .   .    .
domain XML のサンプル
  (test.xml)
  <domain type=’lxc’>
    <name>test</name>
    <memory>500000</memory>
    <os>
       <type>exe</type>
       <init>/sbin/init</init>
    </os>
    <vcpu>1</vcpu>
    <clock offset=’utc’/>
    <on_poweroff>destroy</on_poweroff>
    <on_reboot>restart</on_reboot>
    <on_crash>destroy</on_crash>
    <devices>
       <emulator>/usr/lib/libvirt/libvirt_lxc</emulator>
       <filesystem type=’mount’>
         <source dir=’/var/lib/lxc/debian/rootfs’/>
         <target dir=’/’/>
       </filesystem>
       <interface type=’network’>
       <source network=’default’/>
       </interface>
       <console type=’pty’ />
    </devices>
  </domain>

                                                .    .     .   .   .   .
起動と確認




 $ sudo virsh --connect net-start default
 $ sudo virsh --connect lxc:/// define text.xml
 $ sudo virsh --connect lxc:/// start test
 $ sudo virsh --connect lxc:/// list
  Id Name                 State
 ----------------------------------
 5579 test                running




                                                  .   .   .   .   .   .
私の使い方




        .   .   .   .   .   .
現状




 ▶   常用としては、さくらの VPS で Debian Squeeze でカス
     タムビルドカーネル& lxc パッケージを使用
 ▶   ネットワークの設定は/etc/network/if-up.d/に NIC およ
     びブリッジの再設定を行うスクリプトを実行させて
     いる




                             .   .   .   .   .   .
私の悩み



 ▶   lxc コマンド群は、LXC を可動するホスト上でしか使え
     ない
 ▶   複数ホストノードを扱う場合は不便
 ▶   libvirt を使いたいが、XML 用意するのは面倒
 ▶   VirtManager とか使いたくない。コマンドラインでやり
     たい




                        .   .   .   .   .   .
そこで、ツール作った。




        .   .   .   .   .   .
開発の動機



 ▶     7/6 に@yssk22 に発表依頼されたので、2 年半前のネタ
       を焼き直しすることにした4
 ▶     実は 7/28 の pyfes で Git ネタ発表内容にもどうしようか
       悩んでいた
 ▶     libvirt 経由で LXC 管理なら OpenStack も、とか一瞬考
       えたが、妻子持ちの個人環境としては面倒




  4
      https://twitter.com/yssk22/status/221236629631803394.
                                         .    .   .   .       .
じゃあ、LXC と Git を両方か
ねてツール作るか!




            .   .   .   .   .   .
名前は iori「庵」




 ということで作ってみた。
 https://github.com/mkouhei/iori




                                   .   .   .   .   .   .
バグ出し
request-pull
お待ちしてます。 :)



           .   .   .   .   .   .

Lxc cf201207-presen

  • 1.
    LXC 再入門。 まえだこうへい [email protected] a.k.a. mkouhei 2012 年 7 月 26 日 . . . . . .
  • 2.
    再入門? . . . . . .
  • 3.
    2009 年 12月の 東京エリア Debian 勉強会の ネタの焼き直しです . . . . . .
  • 4.
    自己紹介 まえだこうへい ▶ Debian JP Project Leader(2011, 2012) / CouchDB JP ▶ 勤務先:渋谷の会社 ▶ Python 関連の Debian パッケージのメンテナンスなど ▶ 職場で使用している OpenStack の構築・運用で必要な、 周辺ツールの開発、構築とか ▶ 執筆 ▶ Git によるバージョン管理 (オーム社) ▶ KVM 徹底入門 (翔泳社) ▶ ゆったリラックス! CouchDB があるところ (@IT) #5 ▶ 知って見るみる KVM(@IT) ▶ 今日は (一応)lxc JP として呼ばれたようです . . . . . .
  • 5.
    宣伝。 Google group でlxc JP 1 流量の少ない緩いやりとり をしてます:) 1 https://groups.google.com/group/lxc-jp/about?hl=ja . . . . . .
  • 6.
    LXC とは? ▶ Linux Containers のこと ▶ コンテナを稼働させるホスト自体のカーネルの機能 ▶ LXC を管理するための lxc-* コマンドラインツール ▶ LXC で使えるコンテナ ▶ システムコンテナ:いわゆる OS の仮想化 ▶ アプリケーションコンテナ:特定のプロセスの分離 ▶ para,full-virtualization とは違うのでホストカーネル上で 動くものしかコンテナでは使えない ▶ 他のコンテナ技術:OpenVZ, Linux-VServer,Solaris Containers, FreeBSD jail . . . . . .
  • 7.
    導入 . . . . . .
  • 8.
    パッケージインストール libvirt を使わなければSqueeze でも OK $ sudo apt-get install lxc iproute debootstrap . . . . . .
  • 9.
    kernel option 確認 $ lxc-checkconfig Kernel config /proc/config.gz not found, looking in other places... Found kernel config file /boot/config-3.0.0-1-amd64 --- Namespaces --- Namespaces: enabled Utsname namespace: enabled Ipc namespace: enabled Pid namespace: enabled User namespace: enabled Network namespace: enabled Multiple /dev/pts instances: enabled --- Control groups --- Cgroup: enabled Cgroup clone_children flag: enabled Cgroup device: enabled Cgroup sched: enabled Cgroup cpu account: enabled Cgroup memory controller: enabled Cgroup cpuset: enabled --- Misc --- Veth pair device: enabled Macvlan: enabled Vlan: enabled File capabilities: enabled Note : Before booting a new kernel, you can check its configuration . . . . . .
  • 10.
  • 11.
    確認する 即席コンテナで稼働確認 $sudo lxc-execute -n hoge -f -- /bin/bash # lxc-info -n hoge state: RUNNING pid: 4520 $ sudo lxc-stop -n hoge <-別のシェルで実行。 . . . . . .
  • 12.
    システムコンテナを使う 1. ネットワークの設定 2. cgroup ファイルシステムのマウント 3. コンテナの rootfs 作成 4. コンテナのファイルの微調整 5. コンテナの起動 簡単に Debian 環境を増やせて、すぐ起動できるのが良いで すね! . . . . . .
  • 13.
    lxc のライフサイクル 他の仮想マシンのライフサイクルと大差ない。 lxc-freeze FROZEN RUNNING lxc-unfreeze lxc-stop error lxc-start STARTING ABORTING lxc-create STOPPING STOPPED lxc-destroy . . . . . .
  • 14.
    リソースの管理 ▶ cgroup(Control Group) を使う ▶ UI として lxc-cgroup コマンドが用意されている ▶ cgroup ファイルシステム経由でリソース管理する cgroup /sys/fs/cgroup cgroup defaults 0 0 ▶ システムコンテナの rootfs はどこでも良い。Debian で は/var/lib/lxc 以下に置くのがデフォルト ▶ Debian では/etc/default/grub に下記を設定し、 update-grub2 の実行が必要。2 GRUB_CMDLINE_LINUX="cgroup_enable=memory" 2 http://wiki.debian.org/LXC . . . . . .
  • 15.
    libvirt の話 ▶ Squeeze では使えない。 ▶ Wheezy/Sid の libvirt(0.9.12) では一部機能制限があるが 使える。 ▶ 一部:shutdown, reset, reboot ができない ▶ Upstream の 7/12 のコミット 97d7f02 で shutdown が一 部制限付きで Fix されたので、0.9.14 からは使えるか も。3 3 Wheezy では使えない、ということですね…. . . . . .
  • 16.
    domain XML のサンプル (test.xml) <domain type=’lxc’> <name>test</name> <memory>500000</memory> <os> <type>exe</type> <init>/sbin/init</init> </os> <vcpu>1</vcpu> <clock offset=’utc’/> <on_poweroff>destroy</on_poweroff> <on_reboot>restart</on_reboot> <on_crash>destroy</on_crash> <devices> <emulator>/usr/lib/libvirt/libvirt_lxc</emulator> <filesystem type=’mount’> <source dir=’/var/lib/lxc/debian/rootfs’/> <target dir=’/’/> </filesystem> <interface type=’network’> <source network=’default’/> </interface> <console type=’pty’ /> </devices> </domain> . . . . . .
  • 17.
    起動と確認 $ sudovirsh --connect net-start default $ sudo virsh --connect lxc:/// define text.xml $ sudo virsh --connect lxc:/// start test $ sudo virsh --connect lxc:/// list Id Name State ---------------------------------- 5579 test running . . . . . .
  • 18.
    私の使い方 . . . . . .
  • 19.
    現状 ▶ 常用としては、さくらの VPS で Debian Squeeze でカス タムビルドカーネル& lxc パッケージを使用 ▶ ネットワークの設定は/etc/network/if-up.d/に NIC およ びブリッジの再設定を行うスクリプトを実行させて いる . . . . . .
  • 20.
    私の悩み ▶ lxc コマンド群は、LXC を可動するホスト上でしか使え ない ▶ 複数ホストノードを扱う場合は不便 ▶ libvirt を使いたいが、XML 用意するのは面倒 ▶ VirtManager とか使いたくない。コマンドラインでやり たい . . . . . .
  • 21.
  • 22.
    開発の動機 ▶ 7/6 に@yssk22 に発表依頼されたので、2 年半前のネタ を焼き直しすることにした4 ▶ 実は 7/28 の pyfes で Git ネタ発表内容にもどうしようか 悩んでいた ▶ libvirt 経由で LXC 管理なら OpenStack も、とか一瞬考 えたが、妻子持ちの個人環境としては面倒 4 https://twitter.com/yssk22/status/221236629631803394. . . . . .
  • 23.
    じゃあ、LXC と Gitを両方か ねてツール作るか! . . . . . .
  • 24.
    名前は iori「庵」 ということで作ってみた。 https://github.com/mkouhei/iori . . . . . .
  • 25.