handouts:linux_container

~~SLIDESHOW gorilla~~

Linux Containers

<div style="line-height: 1.2em; font-weight: bold; font-size: 1.2em;"><a href="http://www.ten-forward.ws/">加藤泰文 / TenForward</a></div> <script language="javascript"> var foodiv; if (document.getElementById) { foodiv = document.getElementById('footer'); } else { foodiv = document.footer; } foodiv.innerHTML = '<h1>Linux Container</h1><h2>第一回 カーネル/VM探検隊@関西 ・ 2011/02/20</h2>'; </script>

  • 内部のコアなお話ありません ;-)
  • 2010/12/18 第21回まっちゃ139勉強会で発表したモノに少し修正を加えて,2011/2/20 の第1回カーネル/VM探検隊@関西で発表した資料です.
    • 発表後のツイートで lxc-gentoo で Gentoo コンテナも簡単! というのを教えていただきましたので,追記しました.:-)
  • 加藤泰文
  • Twitter: <a href="http://twitter.com/ten_forward/">@ten_forward</a>
  • Wassr: <a href="http://wassr.jp/tenforward/">@tenforward</a>
  • Plamo Linux メンテナ (64bit版開発真っ盛り :-))
  • Jetspeed2 ドキュメント翻訳
  • Asterisk ユーザ会
  • 「OSレベルの仮想化」(Wikipedia)
  • 一つの環境の中に他と隔離された複数の環境を動作させる.
    • 独立した名前空間,ネットワーク…
  • それぞれの環境に対するリソース制御.
  • 動作するカーネルは一つ.ドライバ類も共有.
    • 異なる種類の OS を動かすことはできない.
    • ディストリビューションレベルであれば色々動かすことは可能.
  • 仮想化のオーバーヘッドが少ない.
  • シンプル.
  • OpenVZ
  • Parallels Virtuozzo Container
  • Linux VServer
  • FreeBSD jail
  • lxc
  • Solaris Container
  • 国内では一番メジャー (VPS サービス)
  • kernel にパッチを当てる + コンテナ操作ツール群
  • 機能も豊富で安定しています

<div style="text-align: center; font-size: 5em;">しかし!</div>

  • KVM が Linux カーネル標準の機能であるように
  • Linux カーネルには「コンテナ」に必要な機能も実装されています (されつつあります) !!
    • control groups (cgroups)
    • namespaces
  • 独立した名前空間
    • id 類 (ユーザ,プロセス…)
    • デバイス
    • ネットワーク (アドレス,ホスト名…)
    • ファイル名
  • リソース制限
    • CPU
    • メモリ
    • Disk I/O
  • チェックポイント/リスタート

このカーネル標準のコンテナ機能を使うには…

  • lxc.sourceforge.net のタイトルは “lxc Linux Containers”
    • Ubuntu, Fedora のパッケージ名は “lxc”
  • libvirt の “libvirt supports:” のリストには “The LXC Linux container system”
  • <div style="font-weight: bold; font-size: 1.5em;">しかし</div>
  • この二つのツールに (今の所) 互換性はありません!! (>_<)
    • lxc で使う設定ファイルは libvirt は使わない/使えない.逆も.(>_<)
    • どちらかで使うコンテナ (chroot環境) を作っても,他方で使えない.(>_<)
  • とりあえず lxc で遊んでみましょう.
  • 最近の Fedora, Ubuntu ですぐ使えます.
  • RHEL6 にも標準 (らしい) (Scientific Linux 6 で使えました)
  • Debian Squeeze では cgroups のうち memory subsystem が無効になってる(Why??).それ以外の機能で使用可能.
  • lxc-0.7.3 はバグってますw
  • 0.7.4.1 リリース済み (パッケージで入れると 0.7.2 or 0.7.4 辺りが入る事が多いです)
  • 現状 lxc という名前でインストールされるツール (lxc.sourceforge.net) の方が簡単に使えます.
  • インストール
    # apt-get install lxc (Ubuntu)
    # yum install lxc (Fedora)
  • cgroup ファイルシステムマウント
    # mkdir /cgroup
    # mount -t cgroup cgroup /cgroup
  • カーネルが新しい (v2.6.33以降) と,上記の cgroup マウントではリソース制限が利かなくなる事があります.(blkioサブシステムの制限のため.blkioを使わないようにマウントすればOK.) ← 2.6.38 で直ってます.
  • 実用性はないけどとりあえず簡単に使えます.
  • Fedora14
    [root@fedora14 ~]# yum install lxc-doc
    [root@fedora14 ~]# cat /usr/share/doc/lxc/examples/lxc-empty-netns.conf
    lxc.utsname = omega (コンテナのホスト名)
    lxc.network.type = empty (ループバックインターフェースだけ作成)
    lxc.network.flags = up (作成したインターフェースを起動)
    [root@fedora14 ~]#  lxc-execute -n test -f /usr/share/doc/lxc/examples/lxc-empty-netns.conf /bin/bash
    [root@omega ~]# ps ax
      PID TTY      STAT   TIME COMMAND
        1 pts/0    S      0:00 /usr/lib/lxc/lxc-init -- /bin/bash
        2 pts/0    S      0:00 /bin/bash
       11 pts/0    R+     0:00 ps ax
    [root@omega ~]# ifconfig
    lo        Link encap:Local Loopback  
              inet addr:127.0.0.1  Mask:255.0.0.0
              inet6 addr: ::1/128 Scope:Host
              UP LOOPBACK RUNNING  MTU:16436  Metric:1
              RX packets:0 errors:0 dropped:0 overruns:0 frame:0
              TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:0 
              RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)
    [root@omega ~]# exit
    exit
    [root@fedora14 ~]#
  • lxc の中に lxc-debian, lxc-ubuntu, lxc-fedora, lxc-gentoo 等,いくつかのディストリビューションのコンテナを作成するスクリプトが入っています.一番お気楽に使えます.(最新のUbuntuだとlxc-nattyなどバージョン毎のスクリプトが) こんな感じで使います.
    lxc-create -t natty -n natty01 -c /path/to/lxc.conf
  • 普通にコンテナ動かしたい人は “yum –installroot” とか “debootstrap” で chroot 環境を作ったり,OpenVZ で配布されているコンテナアーカイブを使うと良いでしょう.
    • 起動時に udev 実行しないとか,fstab の調整とか,inittab の調整をすればすぐに起動します.
    • Ubuntu だと lxc 用の upstart 設定ファイルを一つ置けば OK かな.
  • イマドキの Linux kernel を使ってるディストリビューションだとコンテナも楽々.
  • ググると結構 lxc で遊んでいる人の話が引っかかりますが,バージョンが少し古いので最新と少し違う所があるので注意しましょう.
  • lxc のマニュアルの翻訳を勝手にやってます.https://github.com/tenforward/lxc-doc-ja
  • 結構 OpenVZ とか使ってる人は多そうだけど,あまり表立ってコンテナの話って聞かない気がするので,色々情報交換しましょう!
  • handouts/linux_container.txt
  • 最終更新: 2013/03/22 10:05
  • by tenforward