![Page 1: 机上の Kubernetes - 形式手法で見るコンテナオーケストレーション #NGK2016B](https://reader031.vdocuments.mx/reader031/viewer/2022021422/586f715c1a28ab10258b4f05/html5/thumbnails/1.jpg)
机上の Kubernetes
チェシャ猫 (@y_taka_23)NGK2016B 昼の部 (2016/12/17)
形式手法で見るコンテナオーケストレーション
![Page 2: 机上の Kubernetes - 形式手法で見るコンテナオーケストレーション #NGK2016B](https://reader031.vdocuments.mx/reader031/viewer/2022021422/586f715c1a28ab10258b4f05/html5/thumbnails/2.jpg)
![Page 3: 机上の Kubernetes - 形式手法で見るコンテナオーケストレーション #NGK2016B](https://reader031.vdocuments.mx/reader031/viewer/2022021422/586f715c1a28ab10258b4f05/html5/thumbnails/3.jpg)
Docker だけだと辛い件
● 複数サーバ間クラスタリング
○ コンテナを立てるサーバの選択
○ 監視・自動復旧
○ オートスケーリング・サービスディスカバリ
○ ネットワークの動的設定
● オーケストレーションのレイヤが必要
![Page 4: 机上の Kubernetes - 形式手法で見るコンテナオーケストレーション #NGK2016B](https://reader031.vdocuments.mx/reader031/viewer/2022021422/586f715c1a28ab10258b4f05/html5/thumbnails/4.jpg)
そんなとき、役に立つのが
![Page 5: 机上の Kubernetes - 形式手法で見るコンテナオーケストレーション #NGK2016B](https://reader031.vdocuments.mx/reader031/viewer/2022021422/586f715c1a28ab10258b4f05/html5/thumbnails/5.jpg)
![Page 6: 机上の Kubernetes - 形式手法で見るコンテナオーケストレーション #NGK2016B](https://reader031.vdocuments.mx/reader031/viewer/2022021422/586f715c1a28ab10258b4f05/html5/thumbnails/6.jpg)
コンテナ配置の仕組み
Master
Node1A
Node2A
NodeX
・・・
User
![Page 7: 机上の Kubernetes - 形式手法で見るコンテナオーケストレーション #NGK2016B](https://reader031.vdocuments.mx/reader031/viewer/2022021422/586f715c1a28ab10258b4f05/html5/thumbnails/7.jpg)
Replica Set の作成リクエスト
Master
Node1A
Node2A
NodeX
・・・
User
A B × 2 組
![Page 8: 机上の Kubernetes - 形式手法で見るコンテナオーケストレーション #NGK2016B](https://reader031.vdocuments.mx/reader031/viewer/2022021422/586f715c1a28ab10258b4f05/html5/thumbnails/8.jpg)
Replica Set の作成リクエスト
API ServerScheduler
Controller Manager
User
Node1
etcd (DB)
× 2 組
A B
![Page 9: 机上の Kubernetes - 形式手法で見るコンテナオーケストレーション #NGK2016B](https://reader031.vdocuments.mx/reader031/viewer/2022021422/586f715c1a28ab10258b4f05/html5/thumbnails/9.jpg)
Replica Set が作成される
API ServerScheduler
Controller Manager
User
Node1
etcd (DB)
A B × 2 組
× 2 組
A B
![Page 10: 机上の Kubernetes - 形式手法で見るコンテナオーケストレーション #NGK2016B](https://reader031.vdocuments.mx/reader031/viewer/2022021422/586f715c1a28ab10258b4f05/html5/thumbnails/10.jpg)
Pod が作成される
API ServerScheduler
Controller Manager
etcd (DB)
A B × 2 組
![Page 11: 机上の Kubernetes - 形式手法で見るコンテナオーケストレーション #NGK2016B](https://reader031.vdocuments.mx/reader031/viewer/2022021422/586f715c1a28ab10258b4f05/html5/thumbnails/11.jpg)
Pod が作成される
API ServerScheduler
Controller Manager
etcd (DB)A B
A B
@ ????
@ ????
![Page 12: 机上の Kubernetes - 形式手法で見るコンテナオーケストレーション #NGK2016B](https://reader031.vdocuments.mx/reader031/viewer/2022021422/586f715c1a28ab10258b4f05/html5/thumbnails/12.jpg)
各 Pod を割り当てるサーバを決定
API ServerScheduler
Controller Manager
etcd (DB)A B
A B
@ ????
@ ????
![Page 13: 机上の Kubernetes - 形式手法で見るコンテナオーケストレーション #NGK2016B](https://reader031.vdocuments.mx/reader031/viewer/2022021422/586f715c1a28ab10258b4f05/html5/thumbnails/13.jpg)
各 Pod を割り当てるサーバを決定
API ServerScheduler
Controller Manager
etcd (DB)A B
A B
@ Node1
@ Node2
![Page 14: 机上の Kubernetes - 形式手法で見るコンテナオーケストレーション #NGK2016B](https://reader031.vdocuments.mx/reader031/viewer/2022021422/586f715c1a28ab10258b4f05/html5/thumbnails/14.jpg)
各サーバでコンテナが立ち上がる
API ServerScheduler
Controller Manager
Kubelet
Node1
etcd (DB)A B
A B
@ Node1
@ Node2
![Page 15: 机上の Kubernetes - 形式手法で見るコンテナオーケストレーション #NGK2016B](https://reader031.vdocuments.mx/reader031/viewer/2022021422/586f715c1a28ab10258b4f05/html5/thumbnails/15.jpg)
各サーバでコンテナが立ち上がる
API ServerScheduler
Controller Manager
Kubelet
Node1
etcd (DB)A B
A B
@ Node1
@ Node2
A B
![Page 16: 机上の Kubernetes - 形式手法で見るコンテナオーケストレーション #NGK2016B](https://reader031.vdocuments.mx/reader031/viewer/2022021422/586f715c1a28ab10258b4f05/html5/thumbnails/16.jpg)
コンテナの立ち上げ完了
Master
Node1A B
Node2A B
NodeX
・・・
A B × 2 組
User
![Page 17: 机上の Kubernetes - 形式手法で見るコンテナオーケストレーション #NGK2016B](https://reader031.vdocuments.mx/reader031/viewer/2022021422/586f715c1a28ab10258b4f05/html5/thumbnails/17.jpg)
Kubernetes の特徴
● データを保持するのは etcd のみ
○ 状態は一元管理 + 各コンポーネントによる書き換え
○ 事前状態・事後状態によるモデリング
● 各コンポーネントが自律的に動作
○ システム全体の状態遷移が複雑
○ 全数探索によるあらゆる遷移シナリオの生成
![Page 18: 机上の Kubernetes - 形式手法で見るコンテナオーケストレーション #NGK2016B](https://reader031.vdocuments.mx/reader031/viewer/2022021422/586f715c1a28ab10258b4f05/html5/thumbnails/18.jpg)
そんなとき、役に立つのが
![Page 19: 机上の Kubernetes - 形式手法で見るコンテナオーケストレーション #NGK2016B](https://reader031.vdocuments.mx/reader031/viewer/2022021422/586f715c1a28ab10258b4f05/html5/thumbnails/19.jpg)
![Page 20: 机上の Kubernetes - 形式手法で見るコンテナオーケストレーション #NGK2016B](https://reader031.vdocuments.mx/reader031/viewer/2022021422/586f715c1a28ab10258b4f05/html5/thumbnails/20.jpg)
Alloy Analyzer の特徴
● 形式手法の一種、モデル検査器
● 条件を満たす例・満たさない例を全探索
● 発見した具体例を可視化
![Page 21: 机上の Kubernetes - 形式手法で見るコンテナオーケストレーション #NGK2016B](https://reader031.vdocuments.mx/reader031/viewer/2022021422/586f715c1a28ab10258b4f05/html5/thumbnails/21.jpg)
Kubernetes + Alloy の特徴
● データを保持するのは etcd のみ
○ 状態の一元管理 + 各コンポーネントによる書き換え
○ 事前状態・事後状態によるモデリング
● 各コンポーネントが自律的に動作
○ システム全体の状態遷移が複雑
○ 初期状態と最終状態を与える
○ 全数探索によるあらゆる遷移シナリオの生成
![Page 22: 机上の Kubernetes - 形式手法で見るコンテナオーケストレーション #NGK2016B](https://reader031.vdocuments.mx/reader031/viewer/2022021422/586f715c1a28ab10258b4f05/html5/thumbnails/22.jpg)
Alloy によるモデリング例
https://gist.github.com/y-taka-23/c13a222aea26195811ca4a19951b86ac
![Page 23: 机上の Kubernetes - 形式手法で見るコンテナオーケストレーション #NGK2016B](https://reader031.vdocuments.mx/reader031/viewer/2022021422/586f715c1a28ab10258b4f05/html5/thumbnails/23.jpg)
初期状態
![Page 24: 机上の Kubernetes - 形式手法で見るコンテナオーケストレーション #NGK2016B](https://reader031.vdocuments.mx/reader031/viewer/2022021422/586f715c1a28ab10258b4f05/html5/thumbnails/24.jpg)
Replica Set が作成される
![Page 25: 机上の Kubernetes - 形式手法で見るコンテナオーケストレーション #NGK2016B](https://reader031.vdocuments.mx/reader031/viewer/2022021422/586f715c1a28ab10258b4f05/html5/thumbnails/25.jpg)
Pod が作成される
![Page 26: 机上の Kubernetes - 形式手法で見るコンテナオーケストレーション #NGK2016B](https://reader031.vdocuments.mx/reader031/viewer/2022021422/586f715c1a28ab10258b4f05/html5/thumbnails/26.jpg)
各 Pod を割り当てるサーバを決定
![Page 27: 机上の Kubernetes - 形式手法で見るコンテナオーケストレーション #NGK2016B](https://reader031.vdocuments.mx/reader031/viewer/2022021422/586f715c1a28ab10258b4f05/html5/thumbnails/27.jpg)
各サーバでコンテナが立ち上がる
![Page 28: 机上の Kubernetes - 形式手法で見るコンテナオーケストレーション #NGK2016B](https://reader031.vdocuments.mx/reader031/viewer/2022021422/586f715c1a28ab10258b4f05/html5/thumbnails/28.jpg)
最終状態
![Page 29: 机上の Kubernetes - 形式手法で見るコンテナオーケストレーション #NGK2016B](https://reader031.vdocuments.mx/reader031/viewer/2022021422/586f715c1a28ab10258b4f05/html5/thumbnails/29.jpg)
まとめ
● Kubernetes によるオーケストレーション
○ 個々のサーバを隠蔽したコンテナ配置
● Alloy で Kubernetes をモデリング
○ etcd の状態に対する書き換えイベントの列とみなす
● 動作のシナリオを自動生成
○ 初期状態と最終状態を与えると遷移を自動補間