~~SLIDESHOW gorilla~~
Linux Containers
<html> <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> </html>
あらかじめお断り
- 内部のコアなお話ありません
- 2010/12/18 第21回まっちゃ139勉強会で発表したモノに少し修正を加えて,2011/2/20 の第1回カーネル/VM探検隊@関西で発表した資料です.
- 発表後のツイートで lxc-gentoo で Gentoo コンテナも簡単! というのを教えていただきましたので,追記しました.
自己紹介
- Twitter: <html><a href=“http://twitter.com/ten_forward/”>@ten_forward</a></html>
- Wassr: <html><a href=“http://wassr.jp/tenforward/”>@tenforward</a></html>
- Plamo Linux メンテナ (64bit版開発真っ盛り
)
- Jetspeed2 ドキュメント翻訳
- Asterisk ユーザ会
コンテナ
- 「OSレベルの仮想化」(Wikipedia)
- 一つの環境の中に他と隔離された複数の環境を動作させる.
- 独立した名前空間,ネットワーク…
- それぞれの環境に対するリソース制御.
コンテナの特徴
- 動作するカーネルは一つ.ドライバ類も共有.
- 異なる種類の OS を動かすことはできない.
- ディストリビューションレベルであれば色々動かすことは可能.
- 仮想化のオーバーヘッドが少ない.
- シンプル.
実装
- OpenVZ
- Parallels Virtuozzo Container
- Linux VServer
- FreeBSD jail
- lxc
- Solaris Container
OpenVZ / Virtuozzo
- 国内では一番メジャー (VPS サービス)
- kernel にパッチを当てる + コンテナ操作ツール群
- 機能も豊富で安定しています
<html> <div style=“text-align: center; font-size: 5em;”>しかし!</div> </html>
Linux Container
- KVM が Linux カーネル標準の機能であるように
- Linux カーネルには「コンテナ」に必要な機能も実装されています (されつつあります) !!
- control groups (cgroups)
- namespaces
Namespaces / Control Groups
- 独立した名前空間
- id 類 (ユーザ,プロセス…)
- デバイス
- ネットワーク (アドレス,ホスト名…)
- ファイル名
- リソース制限
- CPU
- メモリ
- Disk I/O
- チェックポイント/リスタート
ツールキット
このカーネル標準のコンテナ機能を使うには…
- libvirt (http://www.libvirt.org/)
lxcハマり道
- lxc.sourceforge.net のタイトルは “lxc Linux Containers”
- Ubuntu, Fedora のパッケージ名は “lxc”
- libvirt の “libvirt supports:” のリストには “The LXC Linux container system”
- <html><div style=“font-weight: bold; font-size: 1.5em;”>しかし</div></html>
- この二つのツールに (今の所) 互換性はありません!! (>_<)
- lxc で使う設定ファイルは libvirt は使わない/使えない.逆も.(>_<)
- どちらかで使うコンテナ (chroot環境) を作っても,他方で使えない.(>_<)
lxc
- とりあえず 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 とか使ってる人は多そうだけど,あまり表立ってコンテナの話って聞かない気がするので,色々情報交換しましょう!
参考文献
- カーネル付属文書 (Documentation/cgroups, scheduler)