Slide 1

Slide 1 text

Docker との比較で知る Quiz! Singularity Singularity Meet-up Japan #1 May 16, 2018 Ryo NAKAMARU, SUPINF Inc. / Rescale, Inc.

Slide 2

Slide 2 text

中丸 良 @pottava • AWS Certified Solutions Architect, DevOps Engineer - Professional • Google Certified Professional - Cloud Architect • CTO at SUPINF Inc. / Solutions Architect at Rescale, Inc. • クラサバ ERP → Web アプリ → クラウド → 機械学習 / HPC My profile !2

Slide 3

Slide 3 text

コンテナ、みなさん使ってますか? !3

Slide 4

Slide 4 text

Fortune 100 !4 29% 71% Yes No http://redmonk.com/fryan/2017/09/10/cloud-native-technologies-in-the-fortune-100/

Slide 5

Slide 5 text

とはいえ、この “コンテナ” はほとんど Docker のこと.. !5

Slide 6

Slide 6 text

(比較のために)Docker . • 思想:Build, Ship, and Run any app, Anywhere • 主に名前空間を使いアプリケーションの実行コンテキストを他から分離 • ユーザも利害関係者も増え、標準化が進み本番利用も活発 ‣ https://www.opencontainers.org/ !6

Slide 7

Slide 7 text

!7 Solomon Hykes “ɹɹɹɹɹɹɹɹɹ ” To program, you need tools. If these tools are not designed to be accessible and useful to programmers of all levels of expertise and specialization, then as an industry we failed. “”

Slide 8

Slide 8 text

VirtualMachines !8 ハイパーバイザ ホスト OS ホスト OS dockerd containerd application A … Docker ゲスト OS Y ゲスト OS Z VM と Docker コンテナ application B application C runc application A runc application B runc application C

Slide 9

Slide 9 text

VirtualMachines !9 ハイパーバイザ ホスト OS ホスト OS dockerd containerd application A … Containers ゲスト OS Y ゲスト OS Z VM と Docker コンテナ application B application C runc application A runc application B runc application C リソースの分離が VM ほど厳密ではない • Docker コンテナは ホストのカーネルで 走る • ユーザが何も考えないと root ユーザで動く • ホストのリソースをほぼ 直接利用 する ⇨ 各種設定で縛っていく必要あり、あうー・・

Slide 10

Slide 10 text

VirtualMachines !10 ハイパーバイザ ホスト OS ホスト OS dockerd containerd application A … Docker ゲスト OS Y ゲスト OS Z VM と Docker コンテナ application B application C runc application A runc application B runc application C しかもこいつは root で動く..

Slide 11

Slide 11 text

システムコールを制限するには !11 頑張って strace でトレースしてからの〜・・ • --security-opt seccomp での制御 • --cap-add / --cap-drop ‣ それぞれの Capability で制御できるシステムコールとにらめっこ え、つらくない?

Slide 12

Slide 12 text

そんな折、Google から新星あらわる !12

Slide 13

Slide 13 text

!13 gVisor • サンドボックス環境 • システムコールをイン ターセプト

Slide 14

Slide 14 text

想定用途はマルチテナントなど 依然として Web 界隈、かつ現状限定的 そして何より HPC 的に解決したい課題は・・ !14

Slide 15

Slide 15 text

Singularity とは

Slide 16

Slide 16 text

Singularity • http://singularity.lbl.gov • Singularity = Docker のいいところ(特に再現性)+ HPC サポート ‣ 基本思想は一緒: Build, Ship, and Run any app, Anywhere ‣ 高性能ハードウェアそのまま、ジョブスケジューラもそのまま • DockerHub のように公式レジストリもあるよ ‣ https://singularity-hub.org !16

Slide 17

Slide 17 text

2.5.1 released !17

Slide 18

Slide 18 text

ちょっと試したい方に

Slide 19

Slide 19 text

Ubuntu 16.04 !19  $ sudo apt-get update  $ sudo apt-get -y build-essential libarchive-dev python  $ ./configure --prefix=/usr/local  $ make  $ sudo make install

Slide 20

Slide 20 text

mac での最短お試し環境 !20  $ docker run --rm -it --privileged -e UID=$(id -u) -e GID=$(id -g) \    -v /var/run/docker.sock:/var/run/docker.sock \    -v $(pwd):/home/singularity -v /tmp:/tmp \    -w /home/singularity \    pottava/singularity:2.5 sh

Slide 21

Slide 21 text

Quiz !

Slide 22

Slide 22 text

ディレクトリのマウント `singularity exec some.simg ls . /tmp` で見えるものは? 1. イメージ内のカレントディレクトリと /tmp 以下 2. ホスト側のカレントディレクトリと /tmp 以下 3. イメージ内のカレントディレクトリとホスト側の /tmp 以下 4. ホスト側のカレントディレクトリとのイメージ内の /tmp 以下 !22

Slide 23

Slide 23 text

ディレクトリのマウント 正解:ホスト側のカレントディレクトリと /tmp 以下 Singularity ではホストの /etc/singularity.conf に設定された マウントオプションがすべてのコンテナに適用されます。 デフォルトでは PROC, SYS, DEV, HOME, TMP !23

Slide 24

Slide 24 text

リソースの競合 すでに`singularity run nginx.simg`(Web サーバ)を実行している中 別端末から`singularity run nginx.simg` すると何が起こる? 1. ポートが動的にアサインされ、正常に動作する 2. プロセスが起動せずに落ちる 3. プロセスが起動してしばらくすると必ず落ちる 4. プロセスが起動し、落ちるかどうかはアプリ次第 !24

Slide 25

Slide 25 text

正解:プロセスが起動し、落ちるかどうかはアプリ次第 Docker とは異なり、事前にホストのリソース競合状態は確認されません。 (Docker の場合は exit code が 0 以外で落ちますよね) Singularity はある意味ドライに、よくいえばシンプルに責務を果たすのみ。 !25 リソースの競合

Slide 26

Slide 26 text

プロセス 1 `singularity exec some.simg sleep 100` を実行中、 ホスト側から `ps a` で見えるコマンドは? 1. `singularity exec some.img sleep 100` 2. `sh -c “sleep 100“` 3. `sleep 100` 4. 見えない !26

Slide 27

Slide 27 text

プロセス 1 正解:`sleep 100` Singularity が内部的に使う execv で Singularity プロセスそのものが exec や run で指定したコンテナ内部のプロセスに置き換えられます。 Docker では実行したコマンドそのままがプロセスとして走ります。 !27   $ ps   PID USER COMMAND   29619 ubuntu docker run --rm -it alpine:3.7 sleep 30

Slide 28

Slide 28 text

プロセス 2 `singularity exec some.simg ps | wc -l` が返すのは? 1. `ps | wc -l`と同じ値 2. `ps a | wc -l`と同じ値(自分以外のユーザーのプロセスも表示) 3. `ps x | wc -l`と同じ値(制御端末のないプロセスの情報も表示) 4. どれでもない !28

Slide 29

Slide 29 text

プロセス 2 正解:`ps ax | wc -l`+ 1 した値 自分以外のユーザのプロセスも制御端末のないプロセスも表示され プロセス ID もホスト側のものがそのまま見えます。 Docker の場合はプロセスも隔離されるのでこうなります。 !29   $ docker run alpine:3.7 ps   PID USER TIME COMMAND    1 root 0:00 ps

Slide 30

Slide 30 text

Containerize your app! !30 • クラウド / コンテナ を強みにした受託開発運用、コンサルティング • 2015 年から Docker の本番運用を開始・豊富な CI / CD 事例 • スピンフ、と読みます・・ We’re hiring!!!

Slide 31

Slide 31 text

ご静聴ありがとうございました 参考文献: • Containers for Science, Reproducibility and Mobility SINGULARITY P2      https://www.intel.com/content/dam/www/public/us/en/documents/presentation/hpc- containers-singularity-advanced.pdf • Singularity - Google Groups         https://groups.google.com/a/lbl.gov/forum/#!forum/singularity