狠狠撸
Submit Search
奥补谤诲别苍で学ぶコンテナの基础
?
3 likes
?
1,355 views
H
Hiroaki_UKAJI
Follow
第25回PaaS勉強会 「奥补谤诲别苍で学ぶコンテナの基础」発表資料
Read less
Read more
1 of 47
Download now
Downloaded 11 times
More Related Content
奥补谤诲别苍で学ぶコンテナの基础
1.
奥补谤诲别苍で学ぶコンテナの基础 Hiroaki UKAJI
2.
こんな?向け ? ?????コンテナって何?
3.
コンテナ?
4.
コンテナ? ?ユーザ空間の隔離 ?????????????????密度化 ???VMより軽い ??????????????リソース分離??? ??????????LXC ?起動が速い?? ??????????????名前空間??
5.
コンテナ? ??????
6.
コンテナがなぜ必要か (Baremetal) Machine OS
7.
コンテナがなぜ必要か ある環境の上で2つのAppを開発します (Baremetal) Machine OS
8.
コンテナがなぜ必要か (Baremetal) Machine OS App1 App2
9.
コンテナがなぜ必要か でもこの図はちょっとマズイ?? ?????????????????なぜならば??? (Baremetal) Machine OS App1 App2
10.
コンテナがなぜ必要か (Baremetal) Machine OS App1 App2 / |--
: |-- home/ | |-- usr1/ | | `-- app1/ | `-- usr2/ | `-- app2/ | : $ rm -rf /home/usr2/app2/? ?緒のマシン上での開発は ????????ちょっと?配
11.
コンテナがなぜ必要か 何か対策を??? (Baremetal) Machine OS
12.
コンテナがなぜ必要か すぐに思いつくのは??? ??????????????UNIX User? (Baremetal) Machine OS usr1 App1 usr2 App2
13.
コンテナがなぜ必要か しかしUNIX Userでは… (Baremetal) Machine OS usr1 App1 App2
14.
でもこれはちょっとやりたくない 作るの時間かかるし??? 重いし??? コンテナがなぜ必要か (Baremetal) Machine OS/Hypervisor VM VM OS
OS App1 App2
15.
コンテナがなぜ必要か (Baremetal) Machine OS
16.
欲しいものは Appを隔離する「箱」のようなもの (Baremetal) Machine OS App1 App2
17.
欲しいものは 「箱」= 環境の隔離 + リソースの制限 ???????????? (Baremetal)
Machine OS App1 App2
18.
欲しいものは 「箱」= 環境の隔離 + リソースの制限 ???????????? (Baremetal)
Machine OS App1 App2 これがコンテナ
19.
wardenでは? 環境の隔離? ??リソースの制限
20.
wardenでは? 環境の隔離? ??リソースの制限 ||
|| namespace cgroup ※他のコンテナでも使われてます
21.
まずは隔離環境の作成から 環境の隔離? ??リソースの制限 ||
|| namespace cgroup
22.
namespace 空間を隔離し名前別に管理するもの
23.
namespace namespace?覧 ipc, mnt, net,
pid, usr, utsの6種類 (各リソースにタグ付けられたID的なもの) $ readlink /proc/$$/ns/*? ipc:[4026531839] mnt:[4026531840] net:[4026531956] pid:[4026531836] user:[4026531837] uts:[4026531838] OS起動時にすでにdefault名前空間が決定
24.
namespace ‘unshare’コマンドで切り替えが可能 net:[4026531956] ↓? net:[4026532257] $ readlink /proc/$$/ns/net? net:[4026531956] $
sudo unshare --net /bin/bash? $ readlink /proc/$$/ns/net? net:[4026532257] unshare --net
25.
namespace net名前空間をunshareした時は… network環境「だけ」が切り替わります $ ls? tmp/ warden/
workspace/ $ ifconfig eth0? eth0 Link encap:Ethernet HWaddr 08:00:27:95:c2:a1 inet addr:10.0.2.15 Bcast:10.0.2.255 : : $ sudo unshare --net /bin/bash? $ ls? tmp/ warden/ workspace/ $ ifconfig eth0? eth0: error fetching interface information: Device not found
26.
namespace (Baremetal) Machine OS unshare --net <command>
された空間 || ?leはそのまま?えるのにeth0は?えない空間 eth0
27.
namespace @ warden
28.
namespace @ warden warden>
create (Baremetal) Machine OS unshare -m {$target}/setup.sh unshare(CLONE_NEWNS)
29.
namespace @ warden >> ! host#
readlink /proc/$$/ns/*? ipc:[4026531839] mnt:[4026531840] net:[4026531956] pid:[4026531836] user:[4026531837] uts:[4026531838] host# bin/wsh /bin/bash? container# readlink /proc/$$/ns/*? ipc:[4026532199] mnt:[4026532197] net:[4026532202] pid:[4026532200] user:[4026531837] uts:[4026532198] ※ホストマシン側 ※コンテナ側
30.
namespace @ warden warden>
create (Baremetal) Machine OS ipc:proc間通信オブジェクト mnt:マウント操作 net:ネットワーク系リソース??の隔離空間 pid:プロセスID uts:ホスト?ドメイン名
31.
次に隔離環境の操作 環境の隔離? ??リソースの制限 ||
|| namespace cgroup
32.
cgroup プロセスのグループを作り ?括した管理を?うもの ※cgroup = control
group
33.
cgroup controlできるのは cpuやmemoryの制限 プロセスのstart&stop等々??? $ lssubsys? cpuset cpu cpuacct memory devices freezer blkio perf_event hugetlb
34.
cgroup 各サブシステムはこんな感じ tasks ? pid freezer.state ?
状態 $ cd /sys/fs/cgroup/freezer? $ tree -L 2? . |-- : |-- tasks `-- user/ |-- 1000.user/ |-- freezer.state |-- : `-- tasks 1 2 : 23788 THAWED
35.
cgroup controlの方法は 1. グループ用ディレクトリを作成 2. tasksにpidを登録
3. freezer.stateで状態を制御 # cd /sys/fs/cgroup/freezer? # mkdir testfs? # echo 18327 > testfs/tasks? # echo 18336 >> testfs/tasks? # echo FROZEN > testfs/freezer.state? FROZEN これで pid=18327 pid=18336 のprocが停止
36.
cgroup 1. グループ用ディレクトリを作成 $ cd
/sys/fs/cgroup/freezer? $ tree -L 2? . |-- freezer.state |-- tasks |-- testfs01/ | |-- freezer.state | `-- tasks `-- testfs02/ |-- freezer.state `-- tasks 親DIRと同様の?leが自動生成 (default時)全PIDは親DIRに登録
37.
cgroup 2. tasksにpidを登録
$ cd /sys/fs/cgroup/freezer? $ tree -L 2? . |-- freezer.state |-- tasks |-- testfs01/ | |-- freezer.state | `-- tasks `-- testfs02/ |-- freezer.state `-- tasks $ echo 3861 >> testfs01/tasks 等でPIDを書き込み 下で書き込まれたPIDは自動的に defaultの場所から消失
38.
cgroup 3. freezer.stateで状態を制御 tasksに登録されたprocだけがFROZENに $ cd
/sys/fs/cgroup/freezer? $ tree -L 2? . |-- freezer.state |-- tasks |-- testfs01/ | |-- freezer.state | `-- tasks `-- testfs02/ |-- freezer.state `-- tasks $ cat tasks 3861 $ echo FROZEN > freezer.state FROZEN
39.
cgroup <制限したいリソース> |-- <tasks(PID)> |-- <status> `--
SubDirectory/ |-- <tasks(PID)> `-- <status>①制限したい項目に サブDIR作っておく ②制限かけたいprocの PIDをtasksに書き込む ③statusで一気に制御
40.
cgroup @ warden
41.
cgroup @ warden 1. グループ用ディレクトリを作成 instance-<handle>/ ????…コンテナ?成時に出現 ($PWD=/sys/fs/cgroup/memory) . |--
memory.limit_in_bytes |-- tasks `-- instance-18fgfj7va3n/ |-- memory.limit_in_bytes `-- tasks
42.
cgroup @ warden 2.
tasksにpidを登録 tasks ????…defaultではdaemonのPIDのみ ?????コンテナでproc起動すれば追加 ($PWD=/sys/fs/cgroup/memory) . |-- memory.limit_in_bytes |-- tasks `-- instance-18fgfj7va3n/ |-- memory.limit_in_bytes `-- tasks
43.
cgroup @ warden 3.
memory.limitで状態を制御 memory.limit_in_bytes ????…tasksに登録したprocにのみ ?????使?memoryの制限がかかる ($PWD=/sys/fs/cgroup/memory) . |-- memory.limit_in_bytes |-- tasks `-- instance-18fgfj7va3n/ |-- memory.limit_in_bytes `-- tasks
44.
cgroup @ warden warden>
limit_memory (Baremetal) Machine OS mkdir ~~~/cgroup/memory/instance-$id ! echo [コンテナ内のPID] > tasks ! (←本当はここまで前準備) echo [制限値] > memory.limit_in_bytes
45.
container container = 環境の隔離 +
リソースの制限 ???????????? (Baremetal) Machine OS App1 App2
46.
container @ warden 環境の隔離?
??リソースの制限 || || namespace cgroup
47.
まとめ WardenコンテナはOS上に隔離環境を作る ? 環境を隔離するのは??namespace 隔離環境の操作は???cgroup
Download