Slide 1

Slide 1 text

猫でもわかる rkt + Kubernetes チェシャ猫 (@y_taka_23) 市ヶ谷 Geek☆Night #16 (2017/12/20) #ichigayageek

Slide 2

Slide 2 text

rkt [rocket] https://github.com/rkt/rkt #ichigayageek

Slide 3

Slide 3 text

CNCF のプロジェクト群 https://www.cncf.io/projects/ #ichigayageek

Slide 4

Slide 4 text

Docker / rkt コマンド対応 Docker rkt docker images rkt image list docker pull rkt fetch (+ trust) docker run rkt run docker ps rkt list docker stop rkt stop docker rm rkt rm #ichigayageek

Slide 5

Slide 5 text

Hello, rkt ! ● コンテナ黎明期からのプロダクト ○ CoreOS から CNCF に寄贈 ● Docker とほぼ対応するコマンド ○ 使う上で新しく覚えることはほとんどない ○ ただし build には別ツール (acbuild) を使用 ● 従来の Docker イメージも動かせる ○ DockerHub 上のイメージも使用可能 #ichigayageek

Slide 6

Slide 6 text

新規性その 1:シンプルなプロセスモデル #ichigayageek

Slide 7

Slide 7 text

systemd docker run runC application systemd rkt run application containerd Docker rkt #ichigayageek

Slide 8

Slide 8 text

新規性その 2:Pod のネイティブサポート #ichigayageek

Slide 9

Slide 9 text

rkt run coreos.com/app1 coreos.com/app2 #ichigayageek

Slide 10

Slide 10 text

rkt Pod app1 app2 Stage 0 Stage 1 Stage 2 #ichigayageek

Slide 11

Slide 11 text

rkt Pod app1 app2 chroot (fly) KVM systemd-nspawn Stage 0 Stage 1 Stage 2 #ichigayageek

Slide 12

Slide 12 text

rkt の特徴 ● シンプルなプロセスモデル ○ 中央集権的なデーモンを持たない ○ rkt は単なるコマンド、systemd がコンテナ管理 ● Pod のネイティブサポート ○ 複数コンテナを rkt run すると Pod 込みで起動 ○ 選べる隔離レベル (chroot / systemd-nspawn / KVM) ○ Pod 内のコンテナは immutable #ichigayageek

Slide 13

Slide 13 text

Kubernetes と相性良さそう! #ichigayageek

Slide 14

Slide 14 text

rktnetes in Kubernetes v1.3 http://blog.kubernetes.io/2016/07/rktnetes-brings-rkt-container-engine-to-Kubernetes.html #ichigayageek

Slide 15

Slide 15 text

そこに突然の CRI #ichigayageek

Slide 16

Slide 16 text

Container Runtime Interface (CRI) ● Kubernetes v1.5 で導入 ○ v1.7 で Docker 呼び出しが完全移行 ● コンテナランタイムを抽象化 ○ 再コンパイルなしでコンテナ実装を入れ替え ● 2 種類の gRPC サービス ○ イメージの操作 / コンテナの操作 ○ Kubelet の引数に Unix ソケットを指定 #ichigayageek

Slide 17

Slide 17 text

CRI は命令型 ● 宣言型 (declarative) インタフェース ○ 例:Pod が n 個 Running になっているべき ○ Kubernetes 自体の基本思想 ● 命令型 (imperative) インタフェース ○ 例:Pod を作成、コンテナを追加・起動 ○ CRI が採用 ○ ランタイム側でのロジック再実装を避けるため #ichigayageek

Slide 18

Slide 18 text

CRI の例 ● ImageService: イメージの操作 ○ PullImage: イメージ DL ○ RemoveImage: イメージ削除 ● RuntimeService: コンテナの操作 ○ RunPodSandbox:(空の)Pod 作成 ○ CreateContainer: コンテナ作成 ○ StartContainer: コンテナ起動 #ichigayageek

Slide 19

Slide 19 text

rkt の特徴(再掲) ● シンプルなプロセスモデル ○ 中央集権的なデーモンを持たない ○ rkt は単なるコマンド、systemd がコンテナ管理 ● Pod のネイティブサポート ○ 複数コンテナを rkt run すると Pod 込みで起動 ○ 選べる隔離レベル (chroot / systemd-nspawn / KVM) ○ Pod 内のコンテナは immutable #ichigayageek

Slide 20

Slide 20 text

CRI と相性悪そう… #ichigayageek

Slide 21

Slide 21 text

rktlet https://github.com/kubernetes-incubator/rktlet #ichigayageek

Slide 22

Slide 22 text

kubelet rktlet rkt CRI (gRPC) 外部コマンド #ichigayageek

Slide 23

Slide 23 text

rkt app サブコマンド ● 現在 (v1.29.0) はまだ開発者版 ○ 環境変数で RKT_EXPERIMENT_APP を指定 ● 稼働中の Pod の状態を変更できる ○ rkt app sandbox-> RunPodSandbox ○ rkt app add -> CreateContainer ○ rkt app start -> StartContainer ● rktlet が gRPC を受け、rkt app を叩く #ichigayageek

Slide 24

Slide 24 text

kubelet rktlet rkt systemd CRI (gRPC) #ichigayageek

Slide 25

Slide 25 text

kubelet rktlet rkt RunPodSandbox rkt app sandbox systemd systemd-run Pod #ichigayageek

Slide 26

Slide 26 text

空の Pod の作成 $ export RKT_EXPERIMENT_APP=true $ sudo -E rkt app sandbox $ sudo -E rkt list UUID APP IMAGE NAME STATE ... NETWORKS 86037dba - - running ... default:ip4=172.16.28.2 $ systemctl list-units | grep rkt var-lib-rkt-pods-run-86037dba... loaded active mounted ... #ichigayageek

Slide 27

Slide 27 text

kubelet rktlet rkt StartContainer rkt app add systemd container Pod #ichigayageek #ichigayageek

Slide 28

Slide 28 text

Pod 内にコンテナ追加 $ sudo -E rkt app add 86037dba coreos.com/etcd:v3.1.7 $ sudo -E rkt list UUID APP IMAGE NAME STATE ... 86037dba etcd coreos.com/etcd:v3.1.7 running ... $ sudo -E rkt app add 86037dba docker://redis $ sudo -E rkt list UUID APP IMAGE NAME STATE ... 86037dba etcd coreos.com/etcd:v3.1.7 running ... redis registry-1.docker.io/library/redis #ichigayageek

Slide 29

Slide 29 text

まとめ ● rkt の特徴 ○ デーモン不要、シンプルな実行モデル ○ ネイティブ Pod、可変な隔離レベル ● 早すぎた rktnetes、後から来た CRI ● CRI 対応は現在進行形 ○ rktlet による CRI 提供 ○ rkt app サブコマンド群 #ichigayageek

Slide 30

Slide 30 text

It’s not rtk science! Presented by チェシャ猫 (@y_taka_23) #ichigayageek