SlideShare a Scribd company logo
1 of 77
Download to read offline
コンテナ?それfreebsd 
でもできるよ! 
2014/09/06 
第四回 コンテナ型仮想化の情報交換会@東京 
by @m_bird 
Ver.0.9.1 
1
おはようごJail! 
2
主催者「なんかFreeBSD Jail話してよ」 
• Jailの話まで辿り着けませんでした 
3
コンテナ?それfreebsd 
でもできるよ! 
2014/09/06 
第四回 コンテナ型仮想化の情報交換会@東京 
by @m_bird 
4
コンテナ型仮想化とは 
なんだったのか? 
2014/09/06 
第四回 コンテナ型仮想化の情報交換会@東京 
by @m_bird 
5
オマエ is 誰 
• FreeBSD6からのゆるふわFreeBSD使い 
• Just User, Not Developer 
• 自宅はFreeBSD + Debian(KVM 
Host) 
• ピチピチの20代 
• 飲み友達募集中(ガールなら尚良し) 
6
オマエ is 誰 
• 本業 
• ドライブ 
• 読書 
• 小説執筆 
• vim + LaTeX 
• 余暇 
• エンジニア? 
• インフラ寄り 
• 興味 
• VMM 
• ファイルシステ 
ム 
7
お伝えしたいこと 
• VMWare流行った! 
• 何でもかんでも完全仮想化! 
• KVM流行った! 
• 何でもかんでもKVMにマイグレーション 
• クラウドマネジメントツール流行った! 
• 管理楽になるんでしょ?どうにゅ…… 
8
最悪死に至る 
むしろ運用コストあがったにゃん…… 
9
お伝えしたいこと 
• 仮想化について、概念を振り返る 
• 完全仮想化とコンテナ型仮想化(OSレベ 
ル仮想化)について比較 
• ナウでヤングでグッチョイスな環境の構築 
の第一歩に 
• ただしコンテナ型仮想化はFreeBSD jailし 
か触っていないので、jailをベースとしてお 
話します 
10
今日のお話 
• コンテナ型仮想化とは何だったのか 
• 完全仮想化との比較 
• コンテナ型仮想化の使いどころ 
• コンテナ型仮想化のキモ 
コンテナ型仮想化の構成要素の再認識 
11
そう思うんならそうなんだろう。 
おまえん中ではな 
! 
(ゆのっち画像) 
!注意! 
本発表には発表者個人の主観が多分に含まれています 
12
てかJailやってる? 
(笑) 
13
FreeBSD Jail 
• コンテナ型仮想化 
• FreeBSD 4(2000年)に登場 
• chroot を強力進化! 
• UID空間、プロセス空間、ファイルシステ 
ム空間の分離を強化 
LinuxでいうLXC的なサムシング 
14
その他コンテナなサムシング 
• Solaris Zone 
• Solaris10で登場(2005) 
• コンテナ環境でSolaris8や9が動く 
• Solaris Legacy Containers † 
@satokaz さんの発表でこの後すぐ! 
†http://jp.fujitsu.com/platform/server/sparcenterprise/solution/virtualization/oslc/ 
15
ほんとコンテナの仮想化便利なw 
どこ住み? 
なにディストリ使い? 
16
「仮想化」ってゆーなー! 
17
さあ、要件定義の話をしよう 
どんなアーキテクチャなら、仮想化って言えるのさ 
18
PopekとGoldbergの仮想化要件 
• “Formal Requirements for Virtualizable 
Third Generation Architectures”(1974)†で 
示された 
• 仮想計算機を提供するVMMたりえる要件を定 
義 
• 命令を3つに分類し、VMMではそれぞれどのよ 
うに扱えばよいかを示す 
• それぞれの命令をどのように扱えば、VMMた 
り得るか?の定理を示す 
†GJ Popek, RP Goldberg - Communications of the ACM 
19
PopekとGoldbergの仮想化要件 
仮想計算機を提供するVMMの持つ3つの特性 
• 等価性(Equivalence) 
• 実機上で実行される場合と、仮想計算機モニタ 
(VMM)上で実行される場合とで作用が同じ 
• 効率性(Efficiency) 
• 大部分の命令実行を、CPU上で直接実行可能 
• 資源管理(Resource Control) 
• VMMはゲストOSの資源を完全に制御できる 
20
3つの命令 
• 特権命令 
• ユーザーモードで動作中ならばトラップすべき命令 
• 特権センシティブ命令 
• システムの資源状態を変更する命令 
• 動作センシティブ命令 
• システムの状態に結果が依存する命令 
命令セット 
センシティブ 
特権命令 
命令 
こんな感じなら 
そのアーキテクチャ仮想化OKよ 
21
アーキテクチャって、 
そっちのアーキテクチャの話かよ 
22
そもそも、”仮想化”の 
前提概念が違う 
23
それぞれの仮想化 
24 
OS OS 
VM VM 
VMM 
Hardware 
container container 
OS 
Hardware 
完全仮想化(TypeI) OSレベル仮想化 
(コンテナ型仮想化)
もう一度要件に立ち返る 
• 等価性(Equivalence) 
• 仮想計算機モニタの上で実行される場合と、VMM上で 
実行される場合とで作用が同じ 
• 効率性(Efficiency) 
• 大部分の命令実行を、CPU上で直接実行可能であること 
• 資源管理(Resource Control) 
• VMMはゲストOSの資源を完全に制御できる 
25
もう一度要件に立ち返る 
コンテナ環境 
• 等価性(Equivalence) 
• 仮想計算機モニタの上で実行される場合と、VMM上で 
実行される場合とで作用が同じ 
• 効率性(Efficiency) 
• 大部分の命令実行を、CPU上で直接実行可能であること 
• 資源管理(Resource Control) 
• VMMはゲストOSの資源を完全に制御できる 
コンテナ環境のホスト 
26
よし。 
仮想化“っぽい”要件を考えよう 
27
仮想化“っぽい”要件 
• 「1コンテナ1独立環境」に見えること 
• ファイルシステムが分かれている 
• ユーザカウントの分離 
• プロセス空間分かれている 
進化した chroot 環境 
28 
FreeBSD jail の 
出発点
それぞれの特徴を見てゆこう! 
発表者の気まぐれ補足 
~完全仮想化との比較を添えて~ 
29
仮想化っぽい: 
ファイルシステムが分かれている 
• ホスト環境のファイルシステム階層を一部切り出す 
• コンテナ環境を、その階層以下にとじ込める(jailed) 
• ある特定ディレクトリより上位層を見ることができない 
(chroot) 
• 他コンテナのファイルシステムは覗けない 
• ただし、コンテナのホストからはコンテナ環境のファイ 
ルシステム階層が見える(ホストからみると未分離) 
完全仮想化では、ホスト環境からみても 
分離されている 
30
完全仮想化との比較:ファイルシステム 
• ファイルアクセスが早い 
• 完全仮想化で一番問題になるのはI/Oの遅 
さ 
• ホストからゲストのファイルが操作可 
• 完全仮想化だとディスクイメージをブロッ 
クデバイスとして扱い、マウントして…… 
大変!>< 
31
補足:完全仮想化におけるI/O速度の低下 
• 問題点:コンテキストスイッチの切り替え 
VMM 
Hardware 
32 
VM 
Host 
OS 
OS 
Process 
VMExit Guest 
VMEntry
補足:完全仮想化におけるI/O速度の低下 
• コンテキストスイッチを減らすための 
工夫 
• virtio†:準仮想化I/Oフレームワーク 
• リングバッファなどを用いてコンテキストスイッ 
チを削減 
• 仮想化環境で用いられることを意識=準仮想化 
ドライバ 
† R Russell. "virtio: towards a de-facto standard for virtual I/O devices", ACM SIGOPS Operating Systems Review, 2008 
33
補足:完全仮想化におけるI/O速度の低下 
• 問題点:ファイルシステムのスタック 
write File System 
Disk Image 
File System 
Disk 
34 
write 
process
補足:完全仮想化におけるI/O速度の低下 
• ファイルシステムのスタックの回避 
• VirtFS†1 
• Plan9由来の9pプロトコルを用いて、ホストOSのファイルシステ 
ムを直接マウント 
• WFS†2 
• ゲストホスト間RPC ”VMRPC”†3 を用いて、ゲストOSからホス 
トOSのファイルシステムをマウントを行う 
†1 V Jujjuri, E Van Hensbergen. "VirtFS̶A virtualization aware File System passthrough". Ottawa Linux Symposium. 2010 
†2 豊岡拓, 新城靖, 齊藤剛. “ホスト型仮想計算機環境におけるファイル入出力の VFS アウトソーシングによる高速化”. 情報処理学 
会第 21 回コンピュータシステムシンポジウム,2009 
†3 齊藤剛, 新城靖, 榮樂英樹, 佐藤聡, 中井央, 板野肯三. "仮想計算機におけるアウトソーシングのためのゲスト‒ホスト間 
RPC", 第 20 回コンピュータシステム・シンポジウム,2008 
35
補足:完全仮想化におけるI/O速度の低下 
実機上 
virtfs(仮想化ファイルシステム) 
準仮想化ドライバ 
ブロックデバイス 
エミュレーション(IDE) 
41% 
81% 
100% 
99% 
速度(%) 
0 25 50 75 100 
36 
• ホストOS 
• CPU Intel Core 2 Duo 
• VMM qemu-kvm 0.14.0 
• メモリ 4GB 
• OS Linux 2.6.32 
• ディスクデバイス Serial ATA ディスク 
• ゲストOS 
• CPU 1 コア割り当て ‒ メモリ 512MB 
• OS Linux 2.6.32 
コンテキストスイッチの切り替え、 
ファイルシステムの重複のオーバヘッドが分かる
つまり…… 
• ファイルI/Oに関して、コンテナ型仮 
想化はすごいお得! 
• ディスクエミュレーション要らない 
• ファイルシステムが重複しない 
• オーバーヘッドがほとんどない(はず) 
37
仮想化っぽい: 
アカウントの分離 
• アカウント管理ファイルが分離 
• /etc/passwd だとか、 /etc/shadow だとか 
• ファイルシステムの分離による 
• ユーザID空間の分離 
• ユーザIDの重複も可能に 
• ホストや他コンテナのUIDを意識しなくて良い 
• Linux LXC:2013年末の Linux 3.12で User Namespaceの実装が完了 
• FreeBSD Jail:FreeBSD4.0登場当初(2000年3月)から使えた(はず) 
38
仮想化っぽい: 
ファイルシステムが分かれている 
• 見えるのは、自コンテナ内のプロセス 
のみ 
• あるコンテナ内から、別コンテナ内のプロ 
セスへは干渉できない 
• あるコンテナのアプリがクラックされても、 
ほかアプリへの影響が最小限に 
39
完全仮想化との比較:プロセス空間 
• 利点:コンテナごとのプロセス制限が可能に! 
• 今までは、プロセスごとに制限 
• limit(シェル組み込み) : syscall getrlimit/setrlimit 
• 欠点:ホストからは丸見え 
• 欠点、というよりも特徴か 
• ホスト環境から、ゲストのプロセスを殺すことが可能 
• 完全仮想化の場合は、ホストOSからもゲストOSのプロ 
セスは見えない 
40
わかった! 
コンテナってすげー強いってことだな! 
仮想化の要件をちょっと都合良く解釈 
してやれば、仮想化とも言えるし、オー 
バーヘッド少ないし! 
※ 発表者の主観です 
41
で、だ。 
42
実装どうなってんのさ 
• 突っ込んだ話はしません(できません) 
• Linux :cgroups 
• 本日のトップバッター @hiro_kamezawa 
さんの発表が凄い充実していましたね! 
• FreeBSD:jailシステムコール 
• see: $ man 2 jail 
43
FreeBSD: jail System Call 
• jail 環境(コンテナ環境)へ割り当てる 
• 割り当てるルートファイルシステムのパス 
• 割り当てるアドレス(v4/v6) 
• ホスト名 
• jail名 
44
FreeBSD: jail System Call 
45 
struct jail { 
uint32_t version; 
char *path; 
char *hostname; 
char *jailname; 
unsigned int ip4s; 
unsigned int ip6s; 
struct in_addr *ip4; 
struct in6_addr *ip6; 
};
リソース分割/制限について 
特にプロセス数とか 
46
コンテナを仮想化としてみた時のキモ 
コンテナ環境を、 
あたかも独立した環境かのようにみせる 
コンテナ他環境とを 
疎にするのはkernel 
container container 
kernel 
各コンテナ毎の 
リソース分割がキモ 
各コンテナは 
Kernelを共有 
47
そもそもはUnixは…… 
• 一台物理マシンを皆で利用しよう! 
• ユーザ間での資源の共有 
• ユーザランドのプログラムに、計算機資源 
をそれぞれに分配する 
• リソースの割り当て単位に、概念追加 
• コンテナ単位での制限、という括り 
48
資源共有 今昔 
• 昔 
• 皆で小さいリソースを分け合う 
• 今 
• 一台で色々役割もたそう、中で分離して 
• 資源あまってるし 
49
資源共有 完全仮想化? 
• 一台に詰め込むための完全仮想化 
• CPUは効率的に使える 
• メモリは無駄食いしてしまう 
• そもそも、エミュレーション使ってまでの 
環境分離は必要? 
• 今完全仮想化を使ってる目的の大半は 
コンテナで良いのでは? 
50
リソース制限 
• 完全仮想化ならば、VMMで仮想計算 
機に割り当てるリソースを制御 
• ディスクイメージサイズ、CPUコア数、 
ネットワーク帯域……etc 
• コンテナ型仮想化では、コンテナホス 
トでリソース制限を実施 
51
リソース制限の重要性 
• 危険シェル芸 
• :(){ :|:& };: 
52
% :(){ :|:& };: 
(snip) 
maxproc limit exceeded maxproc limit exceeded リソby ーuid ス1001 制(pid 限9020); のsee 重tuning(要7) 性 
and login.conf(5) 
by uid 1001 (pid 12751); see tuning(7) and login.conf(5) 
maxproc limit exceeded by uid 1001 (pid 12673); see tuning(7) and login.conf(5) 
maxproc limit exceeded by uid 1001 (pid 10873); see tuning(7) and login.conf(5) 
maxproc • 危limit 険シexceeded ェルby 芸 
uid 1001 (pid 11813); see tuning(7) and login.conf(5) 
maxproc limit exceeded by uid 1001 (pid 7875); see tuning(7) and login.conf(5) 
maxproc limit exceeded by uid 1001 (pid 13779); see tuning(7) and login.conf(5) 
maxproc limit exceeded by uid 1001 (pid 10694); see tuning(7) and login.conf(5) 
maxproc • limit :(){ exceeded :|:& };: 
by uid 1001 (pid 13842); see tuning(7) and login.conf(5) 
maxproc limit exceeded by uid 1001 (pid 9440); see tuning(7) and login.conf(5) 
maxproc limit exceeded by uid 1001 (pid 13047); see tuning(7) and login.conf(5) 
maxproc limit exceeded by uid 1001 (pid 13796); see tuning(7) and login.conf(5) 
maxproc limit exceeded by uid 1001 (pid 11419); see tuning(7) and login.conf(5) 
kern.ipc.maxpipekva exceeded; see tuning(7) 
kern.ipc.maxpipekva exceeded; see tuning(7) 
maxproc limit exceeded by uid 1001 (pid 8605); see tuning(7) and login.conf(5) 
kern.ipc.maxpipekva exceeded; see tuning(7) 
maxproc limit exceeded by uid 1001 (pid 12225); see tuning(7) and login.conf(5) 
maxproc limit exceeded by uid 1001 (pid 10820); see tuning(7) and login.conf(5) 
kern.ipc.maxpipekva exceeded; see tuning(7) 
maxproc limit exceeded by uid 1001 (pid 10820); see tuning(7) and login.conf(5) 
kern.ipc.maxpipekva exceeded; see tuning(7) 
maxproc limit exceeded by uid 1001 (pid 12592); see tuning(7) and login.conf(5) 
maxproc limit exceeded by uid 1001 (pid 11193); see tuning(7) and login.conf(5) 
maxproc limit exceeded by uid 1001 (pid 12641); see tuning(7) and login.conf(5) 
maxproc limit exceeded by uid 1001 (pid 12176); see tuning(7) and login.conf(5) 
maxproc limit exceeded by uid 1001 (pid 53 
10976); see tuning(7) and login.conf(5)
リソース制限の重要性 
• 危険シェル芸 
• :(){ :|:& };: 
• >シリアルコンソールログイン不可!< 
• >ACPI shutdown 受け取らず!< 
• VM を デストローイ…… 
54
リソース制限の重要性 
• :(){ :|:& };: 
• forkbomb(){ forkbomb|forkbomb & } ; forkbomb 
• fork爆弾、プロセスを再帰的にfork 
• 「プロセステーブル、メモリ、ゼンブ クイツクス!」 
bomb 
fork 
bomb bomb 
fork fork 
55 
_人人人人人人人人人人人_ 
> ずっとforkのターン < 
‾Y^Y^Y^Y^Y^Y^Y^Y^Y^Y‾
fork爆弾を食い止めろ! 
• ユーザ権限でOS全体をハングさせる 
ことが可能 
• ユーザごとの利用可能資源を制限すべし 
• 多数のユーザアカウント発行するサービ 
ス(レンサバ)とか特にまずい 
• さくらたんさんあたりが特にノウハウ持ってい 
そうですね 
56
非コンテナでのリソース制限 
• getrlimit/setrlimit を使った制限 
• 4.2BSDで実装、POSIXでも定義あり 
• Unix系OSなら使える 
• シェル組み込みで”limits”コマンドで確認! 
57
非コンテナでのリソース制限 
デフォルト状態@FreeBSD10-amd64 
% ulimit -a 
-t: cpu time (seconds) unlimited 
-f: file size (blocks) unlimited 
-d: data seg size (kbytes) 33554432 
-s: stack size (kbytes) 524288 
-c: core file size (blocks) unlimited 
-m: resident set size (kbytes) unlimited 
-l: locked-in-memory size (kbytes) 64 
-u: processes 6670 
-n: file descriptors 58293 
-b: socket buffer size (bytes) unlimited 
-v: virtual memory size (kbytes) unlimited 
-N 11: unlimited 
-N 12: unlimited 
58
非コンテナでのリソース制限 
デフォルト状態@FreeBSD10-amd64 
% :(){ :|:& };: 
(snip) 
maxproc limit exceeded by uid 1001 (pid 9020); see tuning(7) and login.conf(5) 
maxproc limit exceeded by uid 1001 (pid 12751); see tuning(7) and login.conf(5) 
maxproc limit exceeded by uid 1001 (pid 12673); see tuning(7) and login.conf(5) 
maxproc limit exceeded by uid 1001 (pid 10873); see tuning(7) and login.conf(5) 
maxproc limit exceeded by uid 1001 (pid 11813); see tuning(7) and login.conf(5) 
maxproc limit exceeded by uid 1001 (pid 7875); see tuning(7) and login.conf(5) 
maxproc limit exceeded by uid 1001 (pid 13779); see tuning(7) and login.conf(5) 
maxproc limit exceeded by uid 1001 (pid 10694); see tuning(7) and login.conf(5) 
maxproc limit exceeded by uid 1001 (pid 13842); see tuning(7) and login.conf(5) 
maxproc limit exceeded シスby テuid 1001 ム(pid 完9440); 全see にtuning(沈7) 黙 
and login.conf(5) 
maxproc limit exceeded by uid 1001 (pid 13047); see tuning(7) and login.conf(5) 
maxproc limit exceeded by uid 1001 (pid 13796); see tuning(7) and login.conf(5) 
maxproc limit exceeded by uid 1001 (pid 11419); see tuning(7) and login.conf(5) 
kern.ipc.maxpipekva exceeded; see tuning(7) 
ern.ipc.maxpipekva exceeded; see tuning(7) 
maxproc limit exceeded by uid 1001 (pid 8605); see tuning(7) and login.conf(5) 
kern.ipc.maxpipekva exceeded; see tuning(7) 
maxproc limit exceeded by uid 1001 (pid 12225); see tuning(7) and login.conf(5) 
maxproc limit exceeded by uid 1001 (pid 10820); see tuning(7) and login.conf(5) 
kern.ipc.maxpipekva exceeded; see tuning(7) 
(snip) 
59
非コンテナでのリソース制限 
プロセス数制限変更@FreeBSD10-amd64 
% ulimit -u 1024 
% ulimit -a 
-t: cpu time (seconds) unlimited 
-f: file size (blocks) unlimited 
-d: data seg size (kbytes) 33554432 
-s: stack size (kbytes) 524288 
-c: core file size (blocks) unlimited 
-m: resident set size (kbytes) unlimited 
-l: locked-in-memory size (kbytes) 64 
-u: processes 1024 
-n: file descriptors 58293 
-b: socket buffer size (bytes) unlimited 
-v: virtual memory size (kbytes) unlimited 
-N 11: unlimited 
-N 12: unlimited 
60
非コンテナでのリソース制限 
プロセス数制限変更@FreeBSD10-amd64 
% :(){ :|:& };: 
(snip) 
maxproc limit exceeded by uid 1001 (pid 2632); see tuning(7) and login.conf(5) 
maxproc limit exceeded by uid 1001 (pid 2136); see tuning(7) and login.conf(5) 
maxproc limit exceeded by uid 1001 (pid 2644); see tuning(7) and login.conf(5) 
:: fork failed: リソースが一時的に利用できません 
:: fork failed: リソースが一時的に利用できません 
maxproc limit exceeded by uid 1001 (pid 2136); see tuning(7) and login.conf(5) 
maxproc limit exceeded by uid 1001 (pid 2644); see tuning(7) and login.conf(5) 
:: fork failed: リソース:: fork failed: リソース:: fork failed: リソース戻が一時っ的に利用でません 
が一時的に利て用でききませたん 
が一時的に利用できません 
! 
:: fork failed: リソースが一時的に利用できません 
:: fork failed: リソースが一時的に利用できません 
:: fork failed: リソースが一時的に利用できません 
:: fork failed: リソースが一時的に利用できません 
:: fork failed: リソースが一時的に利用できません 
:: fork failed: リソースが一時的に利用できません 
:: fork failed: リソースが一時的に利用できません 
:: fork failed: リソースが一時的に利用できません 
:: fork failed: リソースが一時的に利用できません 
:: fork failed: リソースが一時的に利用できません 
(snip) 
61
非コンテナでのリソース制限 
• FreeBSD 
• /etc/login.conf 
• Linux 
• /etc/security/limits.conf 
• あたりに書けば、そのユーザのプロセ 
ス全てに制限が適用 
62
じゃ、コンテナでは? 
63
Linux のお話はたっぷりだったので、 
少し FreeBSD jailのお話をします 
64
jailの使い方 
• OS標準の仕組みでできます 
• /etc/jail.conf 書き書き 
• jail の起動停止 
• 起動 # jail -c ${JAIL_NAME} 
• 停止 # jail -r ${JAIL_NAME} 
www { 
host.hostname = "www"; 
path = "/usr/jails/www"; 
mount.fstab = "/usr/local/etc/qjail.fstab/www"; 
exec.start = "/bin/sh /etc/rc"; 
exec.stop = "/bin/sh /etc/rc.shutdown"; 
exec.consolelog = "/var/log/qjail.www.console.log"; 
devfs_ruleset = "4"; 
allow.mount.devfs; 
mount.devfs = "1"; 
ip4.addr = 10.0.0.3; 
interface = "lo1"; 
} 
65
コンテナ(jail)環境での資源 
• FreeBSDのjailシステムコールには特 
にリソース制限ない 
• jail環境ごとのリソース制限は難しい 
• じゃあ、どうすんねん? 
• rlimitで頑張る? 
• RACCT/RCTL 
66
RACCTL/RCTL 
• RACCTL 
• カーネル内の資源量を把握する 
• RCTL 
• 資源の制限を行う 
FreeBSD9(2012,10)にて実装 
67
RACCTL/RCTL 
• 利用するには、GENERICカーネルじゃ駄目 
• options RACCT 
• options RCTL 
• → カーネルビルド! 
• 設定するには 
• /etc/rctl.conf 
• ユーザランドツール:rctlコマンド 
68
RACCTL/RCTL 
• syntax 
• subject:subject-id:resource:action=amount/per. 
• 左の例だと 
• -u: 現在の設定値出力 
• -h: 人間さんが読む用 
• user:m-bird 
• m-birdユーザの制限設定値確認 
• jailの場合 $ rctl -hu jail:${JAILNAME} 
• $ rctl -hu jail:www 
69 
# rctl -hu user:m-bird 
cputime=137 
datasize=48K 
stacksize=392K 
coredumpsize=0 
memoryuse=6744K 
memorylocked=0 
maxproc=1 
openfiles=0 
vmemoryuse=35M 
pseudoterminals=0 
swapuse=0 
nthr=1 
msgqqueued=0 
msgqsize=0 
nmsgq=0 
nsem=0 
nsemop=0 
nshm=0 
shmsize=0 
wallclock=270K 
pcpu=0
ざんねん!わたしのぼうけん 
はここでおわってしまった! 
70
時間とは有限なのである 
• 他、やりたかったこと 
• LXCとJailでの実装の違いを追っかけて比較する 
• ネットワーク仮想化(vimage/veth) 
• 周辺ツールの比較 
• dockerのFreeBSD対応 
• cbsdを動かしてみる 
• jailの管理している様子を実際に見せびらかす 
FreeBSDの可愛らしさをアッピルする 
71
せめて、BSDら 
72 
次回 
しく
■警告 
内容は発表予定もなく、現在作成中ですらないものです。 
予告なく変更、中止などする場合があります。 
73
その他FreeBSD jailで面白いこと 
• Jail環境でCentOS! 
• Linuxのバイナリ互換機能を利用 
• https://wiki.freebsd.org/Image/Linux/ 
CentOS55 
• Linux互換機能、何か使えるの? 
• SkypeやSkypeなどのLinuxバイナリを動かす 
のに利用 
74
余談: Linux バイナリ互換 
Linux は現在コンピュータの世界では最も「ホッ 
トなモノ」なのでたくさんの会社や開発者たち 
が Linux のためだけに開発を行なっています。 
そのため、残された私たち FreeBSD ユーザは 
彼らに対して FreeBSD ネイティブなアプリケー 
ションも出すように言うしかないのです。 
via: https://www.freebsd.org/doc/ja/books/handbook/linuxemu.html 
75
参考資料 
• 佐藤広生. Jail機構と資源制御. FreeBSD勉強会. 2012 
• http://people.allbsd.org/~hrs/FreeBSD/sato-FBSD20120608.pdf 
• Unixの基礎概念からJailのリソース制限への発展について詳しい 
• 読んでみると、今回の発表の内容がすごく分かりやすく丁寧に書かれているの 
で、私の発表読むよりこちら読む方が勉強になります 
• 長谷川 猛. とあるvirtioドライバの接続部分. 仮想化友の会恋バナ.2011 
• http://www.slideshare.net/TakeshiHasegawa1/osc2011-tokyofall-virtio 
• virtioを用いた準仮想化ドライバについて詳しい 
• yuyarin. Kernel/VM Advent Calendar 38日目: 仮想化可能なアーキ 
テクチャの要件とx86. yuyarinの日記. 2011 
• http://d.hatena.ne.jp/yuyarin/20110113/1294889935 
76
発表版との差異 
• 2014/09/07 Ver0.9.1 
• 全体の話の流れを明確にするため、区切 
りの見出しスライドを追加 
• スライドだけを見る人に対する対応 
• 引用元をいくつか明示 
• ゆのっち画像を削除 
77

More Related Content

What's hot

VMwareユーザのためのdocker入門 ~Re:Virtualization Night #1~
VMwareユーザのためのdocker入門 ~Re:Virtualization Night #1~VMwareユーザのためのdocker入門 ~Re:Virtualization Night #1~
VMwareユーザのためのdocker入門 ~Re:Virtualization Night #1~Masaomi Kudo
 
Docker/Aarukas入門ハンズオン資料~第1回さくらとコンテナの夕べ #さくらの夕べ 番外編
Docker/Aarukas入門ハンズオン資料~第1回さくらとコンテナの夕べ #さくらの夕べ 番外編Docker/Aarukas入門ハンズオン資料~第1回さくらとコンテナの夕べ #さくらの夕べ 番外編
Docker/Aarukas入門ハンズオン資料~第1回さくらとコンテナの夕べ #さくらの夕べ 番外編Masahito Zembutsu
 
Docker volume基礎/Project Longhorn紹介
Docker volume基礎/Project Longhorn紹介Docker volume基礎/Project Longhorn紹介
Docker volume基礎/Project Longhorn紹介Masahito Zembutsu
 
Rancher/Kubernetes入門ハンズオン資料~第2回さくらとコンテナの夕べ #さくらの夕べ 番外編
 Rancher/Kubernetes入門ハンズオン資料~第2回さくらとコンテナの夕べ #さくらの夕べ 番外編 Rancher/Kubernetes入門ハンズオン資料~第2回さくらとコンテナの夕べ #さくらの夕べ 番外編
Rancher/Kubernetes入門ハンズオン資料~第2回さくらとコンテナの夕べ #さくらの夕べ 番外編Masahito Zembutsu
 
爆速プレビュープロキシ pool
爆速プレビュープロキシ pool爆速プレビュープロキシ pool
爆速プレビュープロキシ poolmookjp
 
【18-E-3】クラウド・ネイティブ時代の2016年だから始める Docker 基礎講座
【18-E-3】クラウド・ネイティブ時代の2016年だから始める Docker 基礎講座【18-E-3】クラウド・ネイティブ時代の2016年だから始める Docker 基礎講座
【18-E-3】クラウド・ネイティブ時代の2016年だから始める Docker 基礎講座Masahito Zembutsu
 
Docker Swarm モード にゅうもん
Docker Swarm モード にゅうもんDocker Swarm モード にゅうもん
Docker Swarm モード にゅうもんMasahito Zembutsu
 
Docker 基本のおさらい
Docker 基本のおさらいDocker 基本のおさらい
Docker 基本のおさらいNaoki Nagazumi
 
ラズパイ2で動く Docker PaaS
ラズパイ2で動く Docker PaaSラズパイ2で動く Docker PaaS
ラズパイ2で動く Docker PaaSnpsg
 
あの日実行したコンテナの名前を僕達はまだ知らない。
あの日実行したコンテナの名前を僕達はまだ知らない。あの日実行したコンテナの名前を僕達はまだ知らない。
あの日実行したコンテナの名前を僕達はまだ知らない。Masahito Zembutsu
 
小さく始める Docker container の deploy
小さく始める Docker container の deploy小さく始める Docker container の deploy
小さく始める Docker container の deployYoshinori Teraoka
 
DockerでWordPressサイトを開発してみよう
DockerでWordPressサイトを開発してみようDockerでWordPressサイトを開発してみよう
DockerでWordPressサイトを開発してみようmookjp
 
Docker with RHEL7 技術勉強会
Docker with RHEL7 技術勉強会Docker with RHEL7 技術勉強会
Docker with RHEL7 技術勉強会Etsuji Nakai
 
Docker hands on nifty sakura jul19
Docker hands on nifty sakura jul19Docker hands on nifty sakura jul19
Docker hands on nifty sakura jul19Masahito Zembutsu
 
Dockerは2016年の秋現在どのような状況なのか~忙しい人の5分で分かるDocker~
Dockerは2016年の秋現在どのような状況なのか~忙しい人の5分で分かるDocker~Dockerは2016年の秋現在どのような状況なのか~忙しい人の5分で分かるDocker~
Dockerは2016年の秋現在どのような状況なのか~忙しい人の5分で分かるDocker~Masahito Zembutsu
 
仮想化技術として注目されているDocker入門 - PASONATECH ADVANTAGE SEMINAR
仮想化技術として注目されているDocker入門 - PASONATECH ADVANTAGE SEMINAR仮想化技術として注目されているDocker入門 - PASONATECH ADVANTAGE SEMINAR
仮想化技術として注目されているDocker入門 - PASONATECH ADVANTAGE SEMINARVirtualTech Japan Inc.
 
Docker入門~word press環境を作ってみる ハンズオン編 ver1.4~ pulic
Docker入門~word press環境を作ってみる ハンズオン編 ver1.4~ pulicDocker入門~word press環境を作ってみる ハンズオン編 ver1.4~ pulic
Docker入門~word press環境を作ってみる ハンズオン編 ver1.4~ puliccyberblack28 Ichikawa
 

What's hot (20)

VMwareユーザのためのdocker入門 ~Re:Virtualization Night #1~
VMwareユーザのためのdocker入門 ~Re:Virtualization Night #1~VMwareユーザのためのdocker入門 ~Re:Virtualization Night #1~
VMwareユーザのためのdocker入門 ~Re:Virtualization Night #1~
 
Docker Swarm入門
Docker Swarm入門Docker Swarm入門
Docker Swarm入門
 
Docker/Aarukas入門ハンズオン資料~第1回さくらとコンテナの夕べ #さくらの夕べ 番外編
Docker/Aarukas入門ハンズオン資料~第1回さくらとコンテナの夕べ #さくらの夕べ 番外編Docker/Aarukas入門ハンズオン資料~第1回さくらとコンテナの夕べ #さくらの夕べ 番外編
Docker/Aarukas入門ハンズオン資料~第1回さくらとコンテナの夕べ #さくらの夕べ 番外編
 
Docker volume基礎/Project Longhorn紹介
Docker volume基礎/Project Longhorn紹介Docker volume基礎/Project Longhorn紹介
Docker volume基礎/Project Longhorn紹介
 
Docker超入門
Docker超入門Docker超入門
Docker超入門
 
Rancher/Kubernetes入門ハンズオン資料~第2回さくらとコンテナの夕べ #さくらの夕べ 番外編
 Rancher/Kubernetes入門ハンズオン資料~第2回さくらとコンテナの夕べ #さくらの夕べ 番外編 Rancher/Kubernetes入門ハンズオン資料~第2回さくらとコンテナの夕べ #さくらの夕べ 番外編
Rancher/Kubernetes入門ハンズオン資料~第2回さくらとコンテナの夕べ #さくらの夕べ 番外編
 
爆速プレビュープロキシ pool
爆速プレビュープロキシ pool爆速プレビュープロキシ pool
爆速プレビュープロキシ pool
 
Docker Compose 徹底解説
Docker Compose 徹底解説Docker Compose 徹底解説
Docker Compose 徹底解説
 
【18-E-3】クラウド・ネイティブ時代の2016年だから始める Docker 基礎講座
【18-E-3】クラウド・ネイティブ時代の2016年だから始める Docker 基礎講座【18-E-3】クラウド・ネイティブ時代の2016年だから始める Docker 基礎講座
【18-E-3】クラウド・ネイティブ時代の2016年だから始める Docker 基礎講座
 
Docker Swarm モード にゅうもん
Docker Swarm モード にゅうもんDocker Swarm モード にゅうもん
Docker Swarm モード にゅうもん
 
Docker 基本のおさらい
Docker 基本のおさらいDocker 基本のおさらい
Docker 基本のおさらい
 
ラズパイ2で動く Docker PaaS
ラズパイ2で動く Docker PaaSラズパイ2で動く Docker PaaS
ラズパイ2で動く Docker PaaS
 
あの日実行したコンテナの名前を僕達はまだ知らない。
あの日実行したコンテナの名前を僕達はまだ知らない。あの日実行したコンテナの名前を僕達はまだ知らない。
あの日実行したコンテナの名前を僕達はまだ知らない。
 
小さく始める Docker container の deploy
小さく始める Docker container の deploy小さく始める Docker container の deploy
小さく始める Docker container の deploy
 
DockerでWordPressサイトを開発してみよう
DockerでWordPressサイトを開発してみようDockerでWordPressサイトを開発してみよう
DockerでWordPressサイトを開発してみよう
 
Docker with RHEL7 技術勉強会
Docker with RHEL7 技術勉強会Docker with RHEL7 技術勉強会
Docker with RHEL7 技術勉強会
 
Docker hands on nifty sakura jul19
Docker hands on nifty sakura jul19Docker hands on nifty sakura jul19
Docker hands on nifty sakura jul19
 
Dockerは2016年の秋現在どのような状況なのか~忙しい人の5分で分かるDocker~
Dockerは2016年の秋現在どのような状況なのか~忙しい人の5分で分かるDocker~Dockerは2016年の秋現在どのような状況なのか~忙しい人の5分で分かるDocker~
Dockerは2016年の秋現在どのような状況なのか~忙しい人の5分で分かるDocker~
 
仮想化技術として注目されているDocker入門 - PASONATECH ADVANTAGE SEMINAR
仮想化技術として注目されているDocker入門 - PASONATECH ADVANTAGE SEMINAR仮想化技術として注目されているDocker入門 - PASONATECH ADVANTAGE SEMINAR
仮想化技術として注目されているDocker入門 - PASONATECH ADVANTAGE SEMINAR
 
Docker入門~word press環境を作ってみる ハンズオン編 ver1.4~ pulic
Docker入門~word press環境を作ってみる ハンズオン編 ver1.4~ pulicDocker入門~word press環境を作ってみる ハンズオン編 ver1.4~ pulic
Docker入門~word press環境を作ってみる ハンズオン編 ver1.4~ pulic
 

Viewers also liked

Docker入門: コンテナ型仮想化技術の仕組みと使い方
Docker入門: コンテナ型仮想化技術の仕組みと使い方Docker入門: コンテナ型仮想化技術の仕組みと使い方
Docker入門: コンテナ型仮想化技術の仕組みと使い方Yuichi Ito
 
【第11回 クラウドごった煮(コンテナ勉強会)】Docker networking tools
【第11回 クラウドごった煮(コンテナ勉強会)】Docker networking tools【第11回 クラウドごった煮(コンテナ勉強会)】Docker networking tools
【第11回 クラウドごった煮(コンテナ勉強会)】Docker networking toolsNobuyuki Matsui
 
paizaのオンラインジャッジを支えるDockerとその周辺
paizaのオンラインジャッジを支えるDockerとその周辺paizaのオンラインジャッジを支えるDockerとその周辺
paizaのオンラインジャッジを支えるDockerとその周辺paiza
 
Docker 1.12 & Swarm Mode Introduction ~ Docker の新しい技術と swarm モードの紹介
Docker 1.12 & Swarm Mode Introduction ~ Docker の新しい技術と swarm モードの紹介Docker 1.12 & Swarm Mode Introduction ~ Docker の新しい技術と swarm モードの紹介
Docker 1.12 & Swarm Mode Introduction ~ Docker の新しい技術と swarm モードの紹介Masahito Zembutsu
 
2015-07-27 Docker Introduction 〜Dockerの基礎とユースケースに関する考察〜
2015-07-27 Docker Introduction 〜Dockerの基礎とユースケースに関する考察〜2015-07-27 Docker Introduction 〜Dockerの基礎とユースケースに関する考察〜
2015-07-27 Docker Introduction 〜Dockerの基礎とユースケースに関する考察〜Shuji Yamada
 
What's New in Docker Enterprise Edition (in Japanese)
What's New in Docker Enterprise Edition (in Japanese)What's New in Docker Enterprise Edition (in Japanese)
What's New in Docker Enterprise Edition (in Japanese)Creationline,inc.
 
Docker Community Edition & Enterprise Edition
Docker Community Edition & Enterprise EditionDocker Community Edition & Enterprise Edition
Docker Community Edition & Enterprise EditionCreationline,inc.
 
Dockerの基本と応用~快適コンテナライフを実現するArukas~
Dockerの基本と応用~快適コンテナライフを実現するArukas~Dockerの基本と応用~快適コンテナライフを実現するArukas~
Dockerの基本と応用~快適コンテナライフを実現するArukas~Masahito Zembutsu
 
はてなにおける継続的デプロイメントの現状と Docker の導入
はてなにおける継続的デプロイメントの現状と Docker の導入はてなにおける継続的デプロイメントの現状と Docker の導入
はてなにおける継続的デプロイメントの現状と Docker の導入Yu Nobuoka
 
Dockerの基本的な話
Dockerの基本的な話Dockerの基本的な話
Dockerの基本的な話gree_tech
 
捕鯨!詳解docker
捕鯨!詳解docker捕鯨!詳解docker
捕鯨!詳解docker雄哉 吉田
 
さくらのDockerコンテナホスティング-Arukasの解説とインフラを支える技術(July Tech Festa 2016 『IoTxAIxインフラ時代...
さくらのDockerコンテナホスティング-Arukasの解説とインフラを支える技術(July Tech Festa 2016 『IoTxAIxインフラ時代...さくらのDockerコンテナホスティング-Arukasの解説とインフラを支える技術(July Tech Festa 2016 『IoTxAIxインフラ時代...
さくらのDockerコンテナホスティング-Arukasの解説とインフラを支える技術(July Tech Festa 2016 『IoTxAIxインフラ時代...さくらインターネット株式会社
 
8a1#19[はじめてのdocker] 公開版
8a1#19[はじめてのdocker] 公開版8a1#19[はじめてのdocker] 公開版
8a1#19[はじめてのdocker] 公開版Kamon Nobuchika
 
今さら聞けない人のためのDocker超入門 – OpenStack最新情報セミナー 2015年4月
今さら聞けない人のためのDocker超入門 – OpenStack最新情報セミナー 2015年4月今さら聞けない人のためのDocker超入門 – OpenStack最新情報セミナー 2015年4月
今さら聞けない人のためのDocker超入門 – OpenStack最新情報セミナー 2015年4月VirtualTech Japan Inc.
 
OSC 2014 Tokyo/Spring さくらの社長が語る!「さくらのクラウド」でのウェブサービスかんたん運用術~Dockerをつかってみた~
OSC 2014 Tokyo/Spring さくらの社長が語る!「さくらのクラウド」でのウェブサービスかんたん運用術~Dockerをつかってみた~OSC 2014 Tokyo/Spring さくらの社長が語る!「さくらのクラウド」でのウェブサービスかんたん運用術~Dockerをつかってみた~
OSC 2014 Tokyo/Spring さくらの社長が語る!「さくらのクラウド」でのウェブサービスかんたん運用術~Dockerをつかってみた~Kunihiro TANAKA
 
Docker技術情報アップデート 2015年7月号
Docker技術情報アップデート 2015年7月号Docker技術情報アップデート 2015年7月号
Docker技術情報アップデート 2015年7月号Masahito Zembutsu
 
Dockerのネットワークについて
DockerのネットワークについてDockerのネットワークについて
DockerのネットワークについてNobuyuki Matsui
 
Docker Enterprise Editionで実践するCaaS
Docker Enterprise Editionで実践するCaaSDocker Enterprise Editionで実践するCaaS
Docker Enterprise Editionで実践するCaaSDevOps Hub
 
Docker webinar 20170426−01
Docker webinar 20170426−01Docker webinar 20170426−01
Docker webinar 20170426−01Creationline,inc.
 

Viewers also liked (20)

Docker入門: コンテナ型仮想化技術の仕組みと使い方
Docker入門: コンテナ型仮想化技術の仕組みと使い方Docker入門: コンテナ型仮想化技術の仕組みと使い方
Docker入門: コンテナ型仮想化技術の仕組みと使い方
 
Nginx lua
Nginx luaNginx lua
Nginx lua
 
【第11回 クラウドごった煮(コンテナ勉強会)】Docker networking tools
【第11回 クラウドごった煮(コンテナ勉強会)】Docker networking tools【第11回 クラウドごった煮(コンテナ勉強会)】Docker networking tools
【第11回 クラウドごった煮(コンテナ勉強会)】Docker networking tools
 
paizaのオンラインジャッジを支えるDockerとその周辺
paizaのオンラインジャッジを支えるDockerとその周辺paizaのオンラインジャッジを支えるDockerとその周辺
paizaのオンラインジャッジを支えるDockerとその周辺
 
Docker 1.12 & Swarm Mode Introduction ~ Docker の新しい技術と swarm モードの紹介
Docker 1.12 & Swarm Mode Introduction ~ Docker の新しい技術と swarm モードの紹介Docker 1.12 & Swarm Mode Introduction ~ Docker の新しい技術と swarm モードの紹介
Docker 1.12 & Swarm Mode Introduction ~ Docker の新しい技術と swarm モードの紹介
 
2015-07-27 Docker Introduction 〜Dockerの基礎とユースケースに関する考察〜
2015-07-27 Docker Introduction 〜Dockerの基礎とユースケースに関する考察〜2015-07-27 Docker Introduction 〜Dockerの基礎とユースケースに関する考察〜
2015-07-27 Docker Introduction 〜Dockerの基礎とユースケースに関する考察〜
 
What's New in Docker Enterprise Edition (in Japanese)
What's New in Docker Enterprise Edition (in Japanese)What's New in Docker Enterprise Edition (in Japanese)
What's New in Docker Enterprise Edition (in Japanese)
 
Docker Community Edition & Enterprise Edition
Docker Community Edition & Enterprise EditionDocker Community Edition & Enterprise Edition
Docker Community Edition & Enterprise Edition
 
Dockerの基本と応用~快適コンテナライフを実現するArukas~
Dockerの基本と応用~快適コンテナライフを実現するArukas~Dockerの基本と応用~快適コンテナライフを実現するArukas~
Dockerの基本と応用~快適コンテナライフを実現するArukas~
 
はてなにおける継続的デプロイメントの現状と Docker の導入
はてなにおける継続的デプロイメントの現状と Docker の導入はてなにおける継続的デプロイメントの現状と Docker の導入
はてなにおける継続的デプロイメントの現状と Docker の導入
 
Dockerの基本的な話
Dockerの基本的な話Dockerの基本的な話
Dockerの基本的な話
 
捕鯨!詳解docker
捕鯨!詳解docker捕鯨!詳解docker
捕鯨!詳解docker
 
さくらのDockerコンテナホスティング-Arukasの解説とインフラを支える技術(July Tech Festa 2016 『IoTxAIxインフラ時代...
さくらのDockerコンテナホスティング-Arukasの解説とインフラを支える技術(July Tech Festa 2016 『IoTxAIxインフラ時代...さくらのDockerコンテナホスティング-Arukasの解説とインフラを支える技術(July Tech Festa 2016 『IoTxAIxインフラ時代...
さくらのDockerコンテナホスティング-Arukasの解説とインフラを支える技術(July Tech Festa 2016 『IoTxAIxインフラ時代...
 
8a1#19[はじめてのdocker] 公開版
8a1#19[はじめてのdocker] 公開版8a1#19[はじめてのdocker] 公開版
8a1#19[はじめてのdocker] 公開版
 
今さら聞けない人のためのDocker超入門 – OpenStack最新情報セミナー 2015年4月
今さら聞けない人のためのDocker超入門 – OpenStack最新情報セミナー 2015年4月今さら聞けない人のためのDocker超入門 – OpenStack最新情報セミナー 2015年4月
今さら聞けない人のためのDocker超入門 – OpenStack最新情報セミナー 2015年4月
 
OSC 2014 Tokyo/Spring さくらの社長が語る!「さくらのクラウド」でのウェブサービスかんたん運用術~Dockerをつかってみた~
OSC 2014 Tokyo/Spring さくらの社長が語る!「さくらのクラウド」でのウェブサービスかんたん運用術~Dockerをつかってみた~OSC 2014 Tokyo/Spring さくらの社長が語る!「さくらのクラウド」でのウェブサービスかんたん運用術~Dockerをつかってみた~
OSC 2014 Tokyo/Spring さくらの社長が語る!「さくらのクラウド」でのウェブサービスかんたん運用術~Dockerをつかってみた~
 
Docker技術情報アップデート 2015年7月号
Docker技術情報アップデート 2015年7月号Docker技術情報アップデート 2015年7月号
Docker技術情報アップデート 2015年7月号
 
Dockerのネットワークについて
DockerのネットワークについてDockerのネットワークについて
Dockerのネットワークについて
 
Docker Enterprise Editionで実践するCaaS
Docker Enterprise Editionで実践するCaaSDocker Enterprise Editionで実践するCaaS
Docker Enterprise Editionで実践するCaaS
 
Docker webinar 20170426−01
Docker webinar 20170426−01Docker webinar 20170426−01
Docker webinar 20170426−01
 

Similar to コンテナ型仮想化とはなんだったのか

N110 ws12概要 osamut_公開版
N110 ws12概要 osamut_公開版N110 ws12概要 osamut_公開版
N110 ws12概要 osamut_公開版Osamu Takazoe
 
BHyVeってなんや
BHyVeってなんやBHyVeってなんや
BHyVeってなんやTakuya ASADA
 
仮想化技術によるマルウェア対策とその問題点
仮想化技術によるマルウェア対策とその問題点仮想化技術によるマルウェア対策とその問題点
仮想化技術によるマルウェア対策とその問題点Kuniyasu Suzaki
 
x86-64/Linuxに独自メモリ空間を勝手増設
x86-64/Linuxに独自メモリ空間を勝手増設x86-64/Linuxに独自メモリ空間を勝手増設
x86-64/Linuxに独自メモリ空間を勝手増設Minoru Nakamura
 
x86-64/Linuxに独自メモリ空間を勝手増設
x86-64/Linuxに独自メモリ空間を勝手増設x86-64/Linuxに独自メモリ空間を勝手増設
x86-64/Linuxに独自メモリ空間を勝手増設Minoru Nakamura
 
20120609 cod ws2012概要
20120609 cod ws2012概要20120609 cod ws2012概要
20120609 cod ws2012概要Osamu Takazoe
 
SCUGJ第18回勉強会:よろしい、ならばVMMだ
SCUGJ第18回勉強会:よろしい、ならばVMMだSCUGJ第18回勉強会:よろしい、ならばVMMだ
SCUGJ第18回勉強会:よろしい、ならばVMMだwind06106
 
Bhyve code reading
Bhyve code readingBhyve code reading
Bhyve code readingTakuya ASADA
 
Spectre/Meltdownとその派生
Spectre/Meltdownとその派生Spectre/Meltdownとその派生
Spectre/Meltdownとその派生MITSUNARI Shigeo
 
Windows Azure で 2/29 に起こった問題のまとめ
Windows Azure で 2/29 に起こった問題のまとめWindows Azure で 2/29 に起こった問題のまとめ
Windows Azure で 2/29 に起こった問題のまとめSunao Tomita
 
DRBD/Heartbeat/Pacemakerで作るKVM仮想化クラスタ
DRBD/Heartbeat/Pacemakerで作るKVM仮想化クラスタDRBD/Heartbeat/Pacemakerで作るKVM仮想化クラスタ
DRBD/Heartbeat/Pacemakerで作るKVM仮想化クラスタ株式会社サードウェア
 
動画共有ツール
動画共有ツール動画共有ツール
動画共有ツールtamtam180
 
高速な暗号実装のためにしてきたこと
高速な暗号実装のためにしてきたこと高速な暗号実装のためにしてきたこと
高速な暗号実装のためにしてきたことMITSUNARI Shigeo
 
自宅スケーラブル・ファイルシステムのご紹介
自宅スケーラブル・ファイルシステムのご紹介自宅スケーラブル・ファイルシステムのご紹介
自宅スケーラブル・ファイルシステムのご紹介Kentaro Mitsuyasu
 
Altera SDK for OpenCL解体新書 : ホストとデバイスの関係
Altera SDK for OpenCL解体新書 : ホストとデバイスの関係Altera SDK for OpenCL解体新書 : ホストとデバイスの関係
Altera SDK for OpenCL解体新書 : ホストとデバイスの関係Mr. Vengineer
 
Cld002 windows server_2016_で作るシンプ
Cld002 windows server_2016_で作るシンプCld002 windows server_2016_で作るシンプ
Cld002 windows server_2016_で作るシンプTech Summit 2016
 
CLRの基礎 - プログラミング .NET Framework 第3版 読書会
CLRの基礎 - プログラミング .NET Framework 第3版 読書会CLRの基礎 - プログラミング .NET Framework 第3版 読書会
CLRの基礎 - プログラミング .NET Framework 第3版 読書会Yoshihisa Ozaki
 

Similar to コンテナ型仮想化とはなんだったのか (20)

N110 ws12概要 osamut_公開版
N110 ws12概要 osamut_公開版N110 ws12概要 osamut_公開版
N110 ws12概要 osamut_公開版
 
BHyVeってなんや
BHyVeってなんやBHyVeってなんや
BHyVeってなんや
 
Open VZ
Open VZOpen VZ
Open VZ
 
Osc2009 Do Xen Hara
Osc2009 Do Xen HaraOsc2009 Do Xen Hara
Osc2009 Do Xen Hara
 
仮想化技術によるマルウェア対策とその問題点
仮想化技術によるマルウェア対策とその問題点仮想化技術によるマルウェア対策とその問題点
仮想化技術によるマルウェア対策とその問題点
 
x86-64/Linuxに独自メモリ空間を勝手増設
x86-64/Linuxに独自メモリ空間を勝手増設x86-64/Linuxに独自メモリ空間を勝手増設
x86-64/Linuxに独自メモリ空間を勝手増設
 
第21回「Windows Server 2012 DeepDive!! Hyper-V と VDI を徹底解説」(2012/10/18 on しすなま!)...
第21回「Windows Server 2012 DeepDive!! Hyper-V と VDI を徹底解説」(2012/10/18 on しすなま!)...第21回「Windows Server 2012 DeepDive!! Hyper-V と VDI を徹底解説」(2012/10/18 on しすなま!)...
第21回「Windows Server 2012 DeepDive!! Hyper-V と VDI を徹底解説」(2012/10/18 on しすなま!)...
 
x86-64/Linuxに独自メモリ空間を勝手増設
x86-64/Linuxに独自メモリ空間を勝手増設x86-64/Linuxに独自メモリ空間を勝手増設
x86-64/Linuxに独自メモリ空間を勝手増設
 
20120609 cod ws2012概要
20120609 cod ws2012概要20120609 cod ws2012概要
20120609 cod ws2012概要
 
SCUGJ第18回勉強会:よろしい、ならばVMMだ
SCUGJ第18回勉強会:よろしい、ならばVMMだSCUGJ第18回勉強会:よろしい、ならばVMMだ
SCUGJ第18回勉強会:よろしい、ならばVMMだ
 
Bhyve code reading
Bhyve code readingBhyve code reading
Bhyve code reading
 
Spectre/Meltdownとその派生
Spectre/Meltdownとその派生Spectre/Meltdownとその派生
Spectre/Meltdownとその派生
 
Windows Azure で 2/29 に起こった問題のまとめ
Windows Azure で 2/29 に起こった問題のまとめWindows Azure で 2/29 に起こった問題のまとめ
Windows Azure で 2/29 に起こった問題のまとめ
 
DRBD/Heartbeat/Pacemakerで作るKVM仮想化クラスタ
DRBD/Heartbeat/Pacemakerで作るKVM仮想化クラスタDRBD/Heartbeat/Pacemakerで作るKVM仮想化クラスタ
DRBD/Heartbeat/Pacemakerで作るKVM仮想化クラスタ
 
動画共有ツール
動画共有ツール動画共有ツール
動画共有ツール
 
高速な暗号実装のためにしてきたこと
高速な暗号実装のためにしてきたこと高速な暗号実装のためにしてきたこと
高速な暗号実装のためにしてきたこと
 
自宅スケーラブル・ファイルシステムのご紹介
自宅スケーラブル・ファイルシステムのご紹介自宅スケーラブル・ファイルシステムのご紹介
自宅スケーラブル・ファイルシステムのご紹介
 
Altera SDK for OpenCL解体新書 : ホストとデバイスの関係
Altera SDK for OpenCL解体新書 : ホストとデバイスの関係Altera SDK for OpenCL解体新書 : ホストとデバイスの関係
Altera SDK for OpenCL解体新書 : ホストとデバイスの関係
 
Cld002 windows server_2016_で作るシンプ
Cld002 windows server_2016_で作るシンプCld002 windows server_2016_で作るシンプ
Cld002 windows server_2016_で作るシンプ
 
CLRの基礎 - プログラミング .NET Framework 第3版 読書会
CLRの基礎 - プログラミング .NET Framework 第3版 読書会CLRの基礎 - プログラミング .NET Framework 第3版 読書会
CLRの基礎 - プログラミング .NET Framework 第3版 読書会
 

コンテナ型仮想化とはなんだったのか

  • 1. コンテナ?それfreebsd でもできるよ! 2014/09/06 第四回 コンテナ型仮想化の情報交換会@東京 by @m_bird Ver.0.9.1 1
  • 3. 主催者「なんかFreeBSD Jail話してよ」 • Jailの話まで辿り着けませんでした 3
  • 4. コンテナ?それfreebsd でもできるよ! 2014/09/06 第四回 コンテナ型仮想化の情報交換会@東京 by @m_bird 4
  • 5. コンテナ型仮想化とは なんだったのか? 2014/09/06 第四回 コンテナ型仮想化の情報交換会@東京 by @m_bird 5
  • 6. オマエ is 誰 • FreeBSD6からのゆるふわFreeBSD使い • Just User, Not Developer • 自宅はFreeBSD + Debian(KVM Host) • ピチピチの20代 • 飲み友達募集中(ガールなら尚良し) 6
  • 7. オマエ is 誰 • 本業 • ドライブ • 読書 • 小説執筆 • vim + LaTeX • 余暇 • エンジニア? • インフラ寄り • 興味 • VMM • ファイルシステ ム 7
  • 8. お伝えしたいこと • VMWare流行った! • 何でもかんでも完全仮想化! • KVM流行った! • 何でもかんでもKVMにマイグレーション • クラウドマネジメントツール流行った! • 管理楽になるんでしょ?どうにゅ…… 8
  • 10. お伝えしたいこと • 仮想化について、概念を振り返る • 完全仮想化とコンテナ型仮想化(OSレベ ル仮想化)について比較 • ナウでヤングでグッチョイスな環境の構築 の第一歩に • ただしコンテナ型仮想化はFreeBSD jailし か触っていないので、jailをベースとしてお 話します 10
  • 11. 今日のお話 • コンテナ型仮想化とは何だったのか • 完全仮想化との比較 • コンテナ型仮想化の使いどころ • コンテナ型仮想化のキモ コンテナ型仮想化の構成要素の再認識 11
  • 12. そう思うんならそうなんだろう。 おまえん中ではな ! (ゆのっち画像) !注意! 本発表には発表者個人の主観が多分に含まれています 12
  • 14. FreeBSD Jail • コンテナ型仮想化 • FreeBSD 4(2000年)に登場 • chroot を強力進化! • UID空間、プロセス空間、ファイルシステ ム空間の分離を強化 LinuxでいうLXC的なサムシング 14
  • 15. その他コンテナなサムシング • Solaris Zone • Solaris10で登場(2005) • コンテナ環境でSolaris8や9が動く • Solaris Legacy Containers † @satokaz さんの発表でこの後すぐ! †http://jp.fujitsu.com/platform/server/sparcenterprise/solution/virtualization/oslc/ 15
  • 19. PopekとGoldbergの仮想化要件 • “Formal Requirements for Virtualizable Third Generation Architectures”(1974)†で 示された • 仮想計算機を提供するVMMたりえる要件を定 義 • 命令を3つに分類し、VMMではそれぞれどのよ うに扱えばよいかを示す • それぞれの命令をどのように扱えば、VMMた り得るか?の定理を示す †GJ Popek, RP Goldberg - Communications of the ACM 19
  • 20. PopekとGoldbergの仮想化要件 仮想計算機を提供するVMMの持つ3つの特性 • 等価性(Equivalence) • 実機上で実行される場合と、仮想計算機モニタ (VMM)上で実行される場合とで作用が同じ • 効率性(Efficiency) • 大部分の命令実行を、CPU上で直接実行可能 • 資源管理(Resource Control) • VMMはゲストOSの資源を完全に制御できる 20
  • 21. 3つの命令 • 特権命令 • ユーザーモードで動作中ならばトラップすべき命令 • 特権センシティブ命令 • システムの資源状態を変更する命令 • 動作センシティブ命令 • システムの状態に結果が依存する命令 命令セット センシティブ 特権命令 命令 こんな感じなら そのアーキテクチャ仮想化OKよ 21
  • 24. それぞれの仮想化 24 OS OS VM VM VMM Hardware container container OS Hardware 完全仮想化(TypeI) OSレベル仮想化 (コンテナ型仮想化)
  • 25. もう一度要件に立ち返る • 等価性(Equivalence) • 仮想計算機モニタの上で実行される場合と、VMM上で 実行される場合とで作用が同じ • 効率性(Efficiency) • 大部分の命令実行を、CPU上で直接実行可能であること • 資源管理(Resource Control) • VMMはゲストOSの資源を完全に制御できる 25
  • 26. もう一度要件に立ち返る コンテナ環境 • 等価性(Equivalence) • 仮想計算機モニタの上で実行される場合と、VMM上で 実行される場合とで作用が同じ • 効率性(Efficiency) • 大部分の命令実行を、CPU上で直接実行可能であること • 資源管理(Resource Control) • VMMはゲストOSの資源を完全に制御できる コンテナ環境のホスト 26
  • 28. 仮想化“っぽい”要件 • 「1コンテナ1独立環境」に見えること • ファイルシステムが分かれている • ユーザカウントの分離 • プロセス空間分かれている 進化した chroot 環境 28 FreeBSD jail の 出発点
  • 30. 仮想化っぽい: ファイルシステムが分かれている • ホスト環境のファイルシステム階層を一部切り出す • コンテナ環境を、その階層以下にとじ込める(jailed) • ある特定ディレクトリより上位層を見ることができない (chroot) • 他コンテナのファイルシステムは覗けない • ただし、コンテナのホストからはコンテナ環境のファイ ルシステム階層が見える(ホストからみると未分離) 完全仮想化では、ホスト環境からみても 分離されている 30
  • 31. 完全仮想化との比較:ファイルシステム • ファイルアクセスが早い • 完全仮想化で一番問題になるのはI/Oの遅 さ • ホストからゲストのファイルが操作可 • 完全仮想化だとディスクイメージをブロッ クデバイスとして扱い、マウントして…… 大変!>< 31
  • 33. 補足:完全仮想化におけるI/O速度の低下 • コンテキストスイッチを減らすための 工夫 • virtio†:準仮想化I/Oフレームワーク • リングバッファなどを用いてコンテキストスイッ チを削減 • 仮想化環境で用いられることを意識=準仮想化 ドライバ † R Russell. "virtio: towards a de-facto standard for virtual I/O devices", ACM SIGOPS Operating Systems Review, 2008 33
  • 35. 補足:完全仮想化におけるI/O速度の低下 • ファイルシステムのスタックの回避 • VirtFS†1 • Plan9由来の9pプロトコルを用いて、ホストOSのファイルシステ ムを直接マウント • WFS†2 • ゲストホスト間RPC ”VMRPC”†3 を用いて、ゲストOSからホス トOSのファイルシステムをマウントを行う †1 V Jujjuri, E Van Hensbergen. "VirtFS̶A virtualization aware File System passthrough". Ottawa Linux Symposium. 2010 †2 豊岡拓, 新城靖, 齊藤剛. “ホスト型仮想計算機環境におけるファイル入出力の VFS アウトソーシングによる高速化”. 情報処理学 会第 21 回コンピュータシステムシンポジウム,2009 †3 齊藤剛, 新城靖, 榮樂英樹, 佐藤聡, 中井央, 板野肯三. "仮想計算機におけるアウトソーシングのためのゲスト‒ホスト間 RPC", 第 20 回コンピュータシステム・シンポジウム,2008 35
  • 36. 補足:完全仮想化におけるI/O速度の低下 実機上 virtfs(仮想化ファイルシステム) 準仮想化ドライバ ブロックデバイス エミュレーション(IDE) 41% 81% 100% 99% 速度(%) 0 25 50 75 100 36 • ホストOS • CPU Intel Core 2 Duo • VMM qemu-kvm 0.14.0 • メモリ 4GB • OS Linux 2.6.32 • ディスクデバイス Serial ATA ディスク • ゲストOS • CPU 1 コア割り当て ‒ メモリ 512MB • OS Linux 2.6.32 コンテキストスイッチの切り替え、 ファイルシステムの重複のオーバヘッドが分かる
  • 37. つまり…… • ファイルI/Oに関して、コンテナ型仮 想化はすごいお得! • ディスクエミュレーション要らない • ファイルシステムが重複しない • オーバーヘッドがほとんどない(はず) 37
  • 38. 仮想化っぽい: アカウントの分離 • アカウント管理ファイルが分離 • /etc/passwd だとか、 /etc/shadow だとか • ファイルシステムの分離による • ユーザID空間の分離 • ユーザIDの重複も可能に • ホストや他コンテナのUIDを意識しなくて良い • Linux LXC:2013年末の Linux 3.12で User Namespaceの実装が完了 • FreeBSD Jail:FreeBSD4.0登場当初(2000年3月)から使えた(はず) 38
  • 39. 仮想化っぽい: ファイルシステムが分かれている • 見えるのは、自コンテナ内のプロセス のみ • あるコンテナ内から、別コンテナ内のプロ セスへは干渉できない • あるコンテナのアプリがクラックされても、 ほかアプリへの影響が最小限に 39
  • 40. 完全仮想化との比較:プロセス空間 • 利点:コンテナごとのプロセス制限が可能に! • 今までは、プロセスごとに制限 • limit(シェル組み込み) : syscall getrlimit/setrlimit • 欠点:ホストからは丸見え • 欠点、というよりも特徴か • ホスト環境から、ゲストのプロセスを殺すことが可能 • 完全仮想化の場合は、ホストOSからもゲストOSのプロ セスは見えない 40
  • 41. わかった! コンテナってすげー強いってことだな! 仮想化の要件をちょっと都合良く解釈 してやれば、仮想化とも言えるし、オー バーヘッド少ないし! ※ 発表者の主観です 41
  • 43. 実装どうなってんのさ • 突っ込んだ話はしません(できません) • Linux :cgroups • 本日のトップバッター @hiro_kamezawa さんの発表が凄い充実していましたね! • FreeBSD:jailシステムコール • see: $ man 2 jail 43
  • 44. FreeBSD: jail System Call • jail 環境(コンテナ環境)へ割り当てる • 割り当てるルートファイルシステムのパス • 割り当てるアドレス(v4/v6) • ホスト名 • jail名 44
  • 45. FreeBSD: jail System Call 45 struct jail { uint32_t version; char *path; char *hostname; char *jailname; unsigned int ip4s; unsigned int ip6s; struct in_addr *ip4; struct in6_addr *ip6; };
  • 47. コンテナを仮想化としてみた時のキモ コンテナ環境を、 あたかも独立した環境かのようにみせる コンテナ他環境とを 疎にするのはkernel container container kernel 各コンテナ毎の リソース分割がキモ 各コンテナは Kernelを共有 47
  • 48. そもそもはUnixは…… • 一台物理マシンを皆で利用しよう! • ユーザ間での資源の共有 • ユーザランドのプログラムに、計算機資源 をそれぞれに分配する • リソースの割り当て単位に、概念追加 • コンテナ単位での制限、という括り 48
  • 49. 資源共有 今昔 • 昔 • 皆で小さいリソースを分け合う • 今 • 一台で色々役割もたそう、中で分離して • 資源あまってるし 49
  • 50. 資源共有 完全仮想化? • 一台に詰め込むための完全仮想化 • CPUは効率的に使える • メモリは無駄食いしてしまう • そもそも、エミュレーション使ってまでの 環境分離は必要? • 今完全仮想化を使ってる目的の大半は コンテナで良いのでは? 50
  • 51. リソース制限 • 完全仮想化ならば、VMMで仮想計算 機に割り当てるリソースを制御 • ディスクイメージサイズ、CPUコア数、 ネットワーク帯域……etc • コンテナ型仮想化では、コンテナホス トでリソース制限を実施 51
  • 53. % :(){ :|:& };: (snip) maxproc limit exceeded maxproc limit exceeded リソby ーuid ス1001 制(pid 限9020); のsee 重tuning(要7) 性 and login.conf(5) by uid 1001 (pid 12751); see tuning(7) and login.conf(5) maxproc limit exceeded by uid 1001 (pid 12673); see tuning(7) and login.conf(5) maxproc limit exceeded by uid 1001 (pid 10873); see tuning(7) and login.conf(5) maxproc • 危limit 険シexceeded ェルby 芸 uid 1001 (pid 11813); see tuning(7) and login.conf(5) maxproc limit exceeded by uid 1001 (pid 7875); see tuning(7) and login.conf(5) maxproc limit exceeded by uid 1001 (pid 13779); see tuning(7) and login.conf(5) maxproc limit exceeded by uid 1001 (pid 10694); see tuning(7) and login.conf(5) maxproc • limit :(){ exceeded :|:& };: by uid 1001 (pid 13842); see tuning(7) and login.conf(5) maxproc limit exceeded by uid 1001 (pid 9440); see tuning(7) and login.conf(5) maxproc limit exceeded by uid 1001 (pid 13047); see tuning(7) and login.conf(5) maxproc limit exceeded by uid 1001 (pid 13796); see tuning(7) and login.conf(5) maxproc limit exceeded by uid 1001 (pid 11419); see tuning(7) and login.conf(5) kern.ipc.maxpipekva exceeded; see tuning(7) kern.ipc.maxpipekva exceeded; see tuning(7) maxproc limit exceeded by uid 1001 (pid 8605); see tuning(7) and login.conf(5) kern.ipc.maxpipekva exceeded; see tuning(7) maxproc limit exceeded by uid 1001 (pid 12225); see tuning(7) and login.conf(5) maxproc limit exceeded by uid 1001 (pid 10820); see tuning(7) and login.conf(5) kern.ipc.maxpipekva exceeded; see tuning(7) maxproc limit exceeded by uid 1001 (pid 10820); see tuning(7) and login.conf(5) kern.ipc.maxpipekva exceeded; see tuning(7) maxproc limit exceeded by uid 1001 (pid 12592); see tuning(7) and login.conf(5) maxproc limit exceeded by uid 1001 (pid 11193); see tuning(7) and login.conf(5) maxproc limit exceeded by uid 1001 (pid 12641); see tuning(7) and login.conf(5) maxproc limit exceeded by uid 1001 (pid 12176); see tuning(7) and login.conf(5) maxproc limit exceeded by uid 1001 (pid 53 10976); see tuning(7) and login.conf(5)
  • 54. リソース制限の重要性 • 危険シェル芸 • :(){ :|:& };: • >シリアルコンソールログイン不可!< • >ACPI shutdown 受け取らず!< • VM を デストローイ…… 54
  • 55. リソース制限の重要性 • :(){ :|:& };: • forkbomb(){ forkbomb|forkbomb & } ; forkbomb • fork爆弾、プロセスを再帰的にfork • 「プロセステーブル、メモリ、ゼンブ クイツクス!」 bomb fork bomb bomb fork fork 55 _人人人人人人人人人人人_ > ずっとforkのターン < ‾Y^Y^Y^Y^Y^Y^Y^Y^Y^Y‾
  • 56. fork爆弾を食い止めろ! • ユーザ権限でOS全体をハングさせる ことが可能 • ユーザごとの利用可能資源を制限すべし • 多数のユーザアカウント発行するサービ ス(レンサバ)とか特にまずい • さくらたんさんあたりが特にノウハウ持ってい そうですね 56
  • 57. 非コンテナでのリソース制限 • getrlimit/setrlimit を使った制限 • 4.2BSDで実装、POSIXでも定義あり • Unix系OSなら使える • シェル組み込みで”limits”コマンドで確認! 57
  • 58. 非コンテナでのリソース制限 デフォルト状態@FreeBSD10-amd64 % ulimit -a -t: cpu time (seconds) unlimited -f: file size (blocks) unlimited -d: data seg size (kbytes) 33554432 -s: stack size (kbytes) 524288 -c: core file size (blocks) unlimited -m: resident set size (kbytes) unlimited -l: locked-in-memory size (kbytes) 64 -u: processes 6670 -n: file descriptors 58293 -b: socket buffer size (bytes) unlimited -v: virtual memory size (kbytes) unlimited -N 11: unlimited -N 12: unlimited 58
  • 59. 非コンテナでのリソース制限 デフォルト状態@FreeBSD10-amd64 % :(){ :|:& };: (snip) maxproc limit exceeded by uid 1001 (pid 9020); see tuning(7) and login.conf(5) maxproc limit exceeded by uid 1001 (pid 12751); see tuning(7) and login.conf(5) maxproc limit exceeded by uid 1001 (pid 12673); see tuning(7) and login.conf(5) maxproc limit exceeded by uid 1001 (pid 10873); see tuning(7) and login.conf(5) maxproc limit exceeded by uid 1001 (pid 11813); see tuning(7) and login.conf(5) maxproc limit exceeded by uid 1001 (pid 7875); see tuning(7) and login.conf(5) maxproc limit exceeded by uid 1001 (pid 13779); see tuning(7) and login.conf(5) maxproc limit exceeded by uid 1001 (pid 10694); see tuning(7) and login.conf(5) maxproc limit exceeded by uid 1001 (pid 13842); see tuning(7) and login.conf(5) maxproc limit exceeded シスby テuid 1001 ム(pid 完9440); 全see にtuning(沈7) 黙 and login.conf(5) maxproc limit exceeded by uid 1001 (pid 13047); see tuning(7) and login.conf(5) maxproc limit exceeded by uid 1001 (pid 13796); see tuning(7) and login.conf(5) maxproc limit exceeded by uid 1001 (pid 11419); see tuning(7) and login.conf(5) kern.ipc.maxpipekva exceeded; see tuning(7) ern.ipc.maxpipekva exceeded; see tuning(7) maxproc limit exceeded by uid 1001 (pid 8605); see tuning(7) and login.conf(5) kern.ipc.maxpipekva exceeded; see tuning(7) maxproc limit exceeded by uid 1001 (pid 12225); see tuning(7) and login.conf(5) maxproc limit exceeded by uid 1001 (pid 10820); see tuning(7) and login.conf(5) kern.ipc.maxpipekva exceeded; see tuning(7) (snip) 59
  • 60. 非コンテナでのリソース制限 プロセス数制限変更@FreeBSD10-amd64 % ulimit -u 1024 % ulimit -a -t: cpu time (seconds) unlimited -f: file size (blocks) unlimited -d: data seg size (kbytes) 33554432 -s: stack size (kbytes) 524288 -c: core file size (blocks) unlimited -m: resident set size (kbytes) unlimited -l: locked-in-memory size (kbytes) 64 -u: processes 1024 -n: file descriptors 58293 -b: socket buffer size (bytes) unlimited -v: virtual memory size (kbytes) unlimited -N 11: unlimited -N 12: unlimited 60
  • 61. 非コンテナでのリソース制限 プロセス数制限変更@FreeBSD10-amd64 % :(){ :|:& };: (snip) maxproc limit exceeded by uid 1001 (pid 2632); see tuning(7) and login.conf(5) maxproc limit exceeded by uid 1001 (pid 2136); see tuning(7) and login.conf(5) maxproc limit exceeded by uid 1001 (pid 2644); see tuning(7) and login.conf(5) :: fork failed: リソースが一時的に利用できません :: fork failed: リソースが一時的に利用できません maxproc limit exceeded by uid 1001 (pid 2136); see tuning(7) and login.conf(5) maxproc limit exceeded by uid 1001 (pid 2644); see tuning(7) and login.conf(5) :: fork failed: リソース:: fork failed: リソース:: fork failed: リソース戻が一時っ的に利用でません が一時的に利て用でききませたん が一時的に利用できません ! :: fork failed: リソースが一時的に利用できません :: fork failed: リソースが一時的に利用できません :: fork failed: リソースが一時的に利用できません :: fork failed: リソースが一時的に利用できません :: fork failed: リソースが一時的に利用できません :: fork failed: リソースが一時的に利用できません :: fork failed: リソースが一時的に利用できません :: fork failed: リソースが一時的に利用できません :: fork failed: リソースが一時的に利用できません :: fork failed: リソースが一時的に利用できません (snip) 61
  • 62. 非コンテナでのリソース制限 • FreeBSD • /etc/login.conf • Linux • /etc/security/limits.conf • あたりに書けば、そのユーザのプロセ ス全てに制限が適用 62
  • 64. Linux のお話はたっぷりだったので、 少し FreeBSD jailのお話をします 64
  • 65. jailの使い方 • OS標準の仕組みでできます • /etc/jail.conf 書き書き • jail の起動停止 • 起動 # jail -c ${JAIL_NAME} • 停止 # jail -r ${JAIL_NAME} www { host.hostname = "www"; path = "/usr/jails/www"; mount.fstab = "/usr/local/etc/qjail.fstab/www"; exec.start = "/bin/sh /etc/rc"; exec.stop = "/bin/sh /etc/rc.shutdown"; exec.consolelog = "/var/log/qjail.www.console.log"; devfs_ruleset = "4"; allow.mount.devfs; mount.devfs = "1"; ip4.addr = 10.0.0.3; interface = "lo1"; } 65
  • 66. コンテナ(jail)環境での資源 • FreeBSDのjailシステムコールには特 にリソース制限ない • jail環境ごとのリソース制限は難しい • じゃあ、どうすんねん? • rlimitで頑張る? • RACCT/RCTL 66
  • 67. RACCTL/RCTL • RACCTL • カーネル内の資源量を把握する • RCTL • 資源の制限を行う FreeBSD9(2012,10)にて実装 67
  • 68. RACCTL/RCTL • 利用するには、GENERICカーネルじゃ駄目 • options RACCT • options RCTL • → カーネルビルド! • 設定するには • /etc/rctl.conf • ユーザランドツール:rctlコマンド 68
  • 69. RACCTL/RCTL • syntax • subject:subject-id:resource:action=amount/per. • 左の例だと • -u: 現在の設定値出力 • -h: 人間さんが読む用 • user:m-bird • m-birdユーザの制限設定値確認 • jailの場合 $ rctl -hu jail:${JAILNAME} • $ rctl -hu jail:www 69 # rctl -hu user:m-bird cputime=137 datasize=48K stacksize=392K coredumpsize=0 memoryuse=6744K memorylocked=0 maxproc=1 openfiles=0 vmemoryuse=35M pseudoterminals=0 swapuse=0 nthr=1 msgqqueued=0 msgqsize=0 nmsgq=0 nsem=0 nsemop=0 nshm=0 shmsize=0 wallclock=270K pcpu=0
  • 71. 時間とは有限なのである • 他、やりたかったこと • LXCとJailでの実装の違いを追っかけて比較する • ネットワーク仮想化(vimage/veth) • 周辺ツールの比較 • dockerのFreeBSD対応 • cbsdを動かしてみる • jailの管理している様子を実際に見せびらかす FreeBSDの可愛らしさをアッピルする 71
  • 74. その他FreeBSD jailで面白いこと • Jail環境でCentOS! • Linuxのバイナリ互換機能を利用 • https://wiki.freebsd.org/Image/Linux/ CentOS55 • Linux互換機能、何か使えるの? • SkypeやSkypeなどのLinuxバイナリを動かす のに利用 74
  • 75. 余談: Linux バイナリ互換 Linux は現在コンピュータの世界では最も「ホッ トなモノ」なのでたくさんの会社や開発者たち が Linux のためだけに開発を行なっています。 そのため、残された私たち FreeBSD ユーザは 彼らに対して FreeBSD ネイティブなアプリケー ションも出すように言うしかないのです。 via: https://www.freebsd.org/doc/ja/books/handbook/linuxemu.html 75
  • 76. 参考資料 • 佐藤広生. Jail機構と資源制御. FreeBSD勉強会. 2012 • http://people.allbsd.org/~hrs/FreeBSD/sato-FBSD20120608.pdf • Unixの基礎概念からJailのリソース制限への発展について詳しい • 読んでみると、今回の発表の内容がすごく分かりやすく丁寧に書かれているの で、私の発表読むよりこちら読む方が勉強になります • 長谷川 猛. とあるvirtioドライバの接続部分. 仮想化友の会恋バナ.2011 • http://www.slideshare.net/TakeshiHasegawa1/osc2011-tokyofall-virtio • virtioを用いた準仮想化ドライバについて詳しい • yuyarin. Kernel/VM Advent Calendar 38日目: 仮想化可能なアーキ テクチャの要件とx86. yuyarinの日記. 2011 • http://d.hatena.ne.jp/yuyarin/20110113/1294889935 76
  • 77. 発表版との差異 • 2014/09/07 Ver0.9.1 • 全体の話の流れを明確にするため、区切 りの見出しスライドを追加 • スライドだけを見る人に対する対応 • 引用元をいくつか明示 • ゆのっち画像を削除 77