Slide 1

Slide 1 text

kube-batch による Gang Scheduling チェシャ猫 (@y_taka_23) Kubernetes Invitational Meetup Tokyo #4 (2019/12/18) #k8sjp

Slide 2

Slide 2 text

Scheduling 完全に理解した人? #k8sjp

Slide 3

Slide 3 text

Queue Scheduling Cycle Binding Threads #k8sjp

Slide 4

Slide 4 text

Queue Scheduling Cycle Binding Threads 1 Pod 毎に判定 #k8sjp

Slide 5

Slide 5 text

ダメな例:学習タスクのブロック #k8sjp

Slide 6

Slide 6 text

例:機械学習用の Job ● 処理に依存性がある複数の Pod ○ 例えば 5 個の Pod に Training を分散させる ○ 各々の Pod の処理には他 Pod の結果が必要 ● デッドロックの可能性 ○ クラスタのキャパシティが充分でない場合 ○ 各タスクの一部分だけ Pod が Running になる ○ お互いの終了を待ち続けて動けない #k8sjp

Slide 7

Slide 7 text

Node Node Node Task A A A A A A Task B B B B B B #k8sjp

Slide 8

Slide 8 text

Node A A Node B A Node B Task A A A Task B B B B 待ち 待ち #k8sjp

Slide 9

Slide 9 text

Gang Scheduling ● 一度にまとめて Pod を配置したい ○ お互いに相手をブロックする状況を防ぐ ○ 通常の kube-scheduler では実現が困難 ● Gang (= 徒党) 単位での配置 ○ 全 Pod が配置できない限り残りも Pending ○ 最近の資料だと Co-Scheduling とも呼ばれる ○ 貨物積載の専門職も「ギャング」と呼ばれる #k8sjp

Slide 10

Slide 10 text

kube-batch https://github.com/kubernetes-sigs/kube-batch #k8sjp

Slide 11

Slide 11 text

kube-batch の特徴 ● バッチ処理用の特殊スケジューラ ○ Scheduling SIG による PoC のような扱い ○ Kubeflow のスケジューラ Volcano のベース ● kube-batch が提供する機能 ○ Pod Priority / Preemption(v1.8 で k/k に導入) ○ Pod Group による Gang Scheduling ○ 複数の Queue に CPU / Memory を按分 #k8sjp

Slide 12

Slide 12 text

Queue の定義 apiVersion: scheduling.sig.dev/v1alpha2 kind: Queue metadata: name: myqueue spec: weight: 1 #k8sjp

Slide 13

Slide 13 text

Queue の定義 apiVersion: scheduling.sig.dev/v1alpha2 kind: Queue metadata: name: myqueue spec: weight: 1 クラスタ全体のリソース(CPU / Memory)を 複数 Queue に配分する際の時の重み #k8sjp

Slide 14

Slide 14 text

PodGroup の定義 apiVersion: scheduling.sig.dev/v1alpha2 kind: PodGroup metadata: name: mygroup spec: minMember: 3 queue: myqueue priorityClassName: mypriority #k8sjp

Slide 15

Slide 15 text

PodGroup の定義 apiVersion: scheduling.sig.dev/v1alpha2 kind: PodGroup metadata: name: mygroup spec: minMember: 3 queue: myqueue priorityClassName: mypriority 配置時に最低限必要な Pod の個数 #k8sjp

Slide 16

Slide 16 text

Job に対する PodGroup の指定 apiVersion: batch/v1 kind: Job metadata: name: myjob spec: template: metadata: annotation: scheduling.k8s.io/group-name: mygroup spec: containers: ... #k8sjp

Slide 17

Slide 17 text

Job に対する PodGroup の指定 apiVersion: batch/v1 kind: Job metadata: name: myjob spec: template: metadata: annotation: scheduling.k8s.io/group-name: mygroup spec: containers: ... 先ほど作成した PodGroup 名を指定 #k8sjp

Slide 18

Slide 18 text

(DEMO) #k8sjp

Slide 19

Slide 19 text

まとめ ● 依存性のある複数の Pod の配置 ○ お互いに相手をブロックしてしまう ○ All or Nothing でまとめて配置したい ○ 通常の kube-scheduler では対応が困難 ● kube-batch の利用 ○ PodGroup による必要個数の指定 ○ 複数の Queue によるリソースの按分 #k8sjp

Slide 20

Slide 20 text

Let’s Be Gangstas Together! Presented by チェシャ猫 (@y_taka_23) #k8sjp