Slide 1

Slide 1 text

Masaya Aoyama CyberAgent - adtech studio adtech studioʹ͓͚Δ CRD ʙந৅Խͨ͠GPUaaSʹΑΔஈ֊Ҡߦܭը& AKE Ingress v2ʙ @CloudNative Days Tokyo / OpenStack Days Tokyo 2019 amsy810 @amsy810

Slide 2

Slide 2 text

Publicity (excerpt)   書籍 『Kubernetes 完全ガイド』 『みんなの Docker/K8s』  基調講演 『Japan Container Days v18.04』 『Google Cloud K8s Day』   招待講演 『情報処理学会 コンピュータシステムシンポジウム』         『AWS Dev Day Tokyo』 『IBM Think Japan』 『JEITA 委員会』   登壇 『KubeCon + CloudNativeCon China 2019』 and so on  資格 『CKAD #2』 『CKA #138』 Masaya Aoyama (@amsy810) Infrastructure Engineer Community   Co-chair 『Cloud Native Days Tokyo (旧 Japan Container Days)』  Organizer 『Cloud Native Meetup Tokyo』   『Kubernetes Meetup Tokyo』   『KubeCon Japanese exchange meeting』   Contribute to OpenStack and Kubernetes 主業務: K8s as a Service の実装 K8s / CloudNative 関連のアーキテクト

Slide 3

Slide 3 text

Kubernetes 好きですか?

Slide 4

Slide 4 text

Palm-sized Personal Kubernetes Cluster Everyone has a personal Kubernetes cluster just like a smartphone, right?

Slide 5

Slide 5 text

Kubernetes is anywhere We can use phyisical Kubernetes cluster anywhere

Slide 6

Slide 6 text

Kubernetes is anywhere Be careful, this is not a bomb, this is Kubernetes.

Slide 7

Slide 7 text

Agenda 1.  What is Kubernetes? 2.  GPUaaS abstraction plan at CyberAgent 3.  Ingress Controller at CyberAgent

Slide 8

Slide 8 text

What is 『コンテナ/アプリケーション実⾏基盤』としての Kubernetes 『X as a Service 基盤』としての Kubernetes 『分散システムフレームワーク』としての Kubernetes

Slide 9

Slide 9 text

ʰίϯςφ/ΞϓϦέʔγϣϯ࣮ߦج൫ʱͱͯ͠ͷ Kubernetes Google Borg をベースとした洗練された基盤 •  セルフヒーリング •  ロードバランサとの⾃動連携 •  オートスケール •  様々なワークロードへの対応 •  データの管理

Slide 10

Slide 10 text

ʰX as a Service ج൫ʱͱͯ͠ͷ Kubernetes Platform for Platform •  Database as a Service on Kubernetes •  Queue as a Service on Kubernetes •  Serverless as a Service on Kubernetes •  ML as a Service on Kubernetes oracle/mysql-operator 『障害時のクラスタ復旧』 『バックアップなどの運用』 を自動化(マネージド)

Slide 11

Slide 11 text

ʰX as a Service ج൫ʱͱͯ͠ͷ Kubernetes Kubernetes は ⼩さなクラウド に近い oracle/mysql-operator 『障害時のクラスタ復旧』 『バックアップなどの運用』 を自動化(マネージド) Relational DB Key Value Store Document DB Queue Developer

Slide 12

Slide 12 text

ʰ෼ࢄγεςϜϑϨʔϜϫʔΫʱͱͯ͠ͷ Kubernetes Kubernetes のコアは『Decralative API 』と『分散システムフレームワーク』 ※ 厳密には Controller も API を⽤いて変更します。 reconcile() { … } 登録 (via API Request) Watch クラスタの状態 コンテナの作成・削除 Controller

Slide 13

Slide 13 text

ʰ෼ࢄγεςϜϑϨʔϜϫʔΫʱͱͯ͠ͷ Kubernetes Reconcile Loop (調整 Loop)により、あるべき状態に収束  = ただ起動するわけではなく、その状態を維持する Observe Diff Act Observe: 現状を確認 Diff: 理想と現実の差分を計算 Act: 差分に対する処理を実施 クラスタの状態 理想の状態 reconcile() { … } Controller

Slide 14

Slide 14 text

ʰ෼ࢄγεςϜϑϨʔϜϫʔΫʱͱͯ͠ͷ Kubernetes たとえば 2 つしかコンテナ(Pod)が起動していない場合… Observe: 理想=3、現状=2 Observe Diff Act Observe: 現状を確認 Diff: 理想と現実の差分を計算 Act: 差分に対する処理を実施 クラスタの状態 理想の状態 reconcile() { … } Controller

Slide 15

Slide 15 text

ʰ෼ࢄγεςϜϑϨʔϜϫʔΫʱͱͯ͠ͷ Kubernetes たとえば 2 つしかコンテナ(Pod)が起動していない場合… Diff: 1 つコンテナ(Pod)が⾜りない Observe Diff Act Observe: 現状を確認 Diff: 理想と現実の差分を計算 Act: 差分に対する処理を実施 クラスタの状態 理想の状態 reconcile() { … } Controller

Slide 16

Slide 16 text

ʰ෼ࢄγεςϜϑϨʔϜϫʔΫʱͱͯ͠ͷ Kubernetes たとえば 2 つしかコンテナ(Pod)が起動していない場合… Act: 1つ nginx:1.12 のコンテナ(Pod)を作成する Observe Diff Act Observe: 現状を確認 Diff: 理想と現実の差分を計算 Act: 差分に対する処理を実施 クラスタの状態 理想の状態 reconcile() { … } Controller

Slide 17

Slide 17 text

ʰ෼ࢄγεςϜϑϨʔϜϫʔΫʱͱͯ͠ͷ Kubernetes Reconcile Loop (調整 Loop)により、あるべき状態に収束  = ただ起動するわけではなく、その状態を維持する つまり、運⽤ナレッジをプログラム化することで⾃動化 このプログラムが Controller(Operator) ReplicaSet Controller は必要なレプリカ数が •  ⾜りなかったら新しく⽴ち上げ •  超過していたら停⽌させる Observe Diff Act Observe: 現状を確認 Diff: 理想と現実の差分を計算 Act: 差分に対する処理を実施

Slide 18

Slide 18 text

ʰ෼ࢄγεςϜϑϨʔϜϫʔΫʱͱͯ͠ͷ Kubernetes Kubernetes では⾮常に沢⼭の Controller が動いている •  Deployment Controller •  ReplicaSet Controller •  Endpoints Controller •  Cloud Controller •  etc. これらの Controller が⾮同期に動作することで ⼀つの分散システムとして成り⽴っている reconcile() { … } Controller reconcile() { … } Controller reconcile() { … } Controller reconcile() { … } Controller reconcile() { … } Controller 実際の状態 理想の状態 watch

Slide 19

Slide 19 text

ʢ࠶ܝʣʰ෼ࢄγεςϜϑϨʔϜϫʔΫʱͱͯ͠ͷ Kubernetes Kubernetes のコアは『Decralative API 』と『分散システムフレームワーク』 ※ 厳密には Controller も API を⽤いて変更します。 reconcile() { … } 登録 (via API Request) 監視 クラスタの状態 コンテナの作成・削除

Slide 20

Slide 20 text

ʰ෼ࢄγεςϜϑϨʔϜϫʔΫʱͱͯ͠ͷ Kubernetes Kubernetes のコアは『Decralative API 』と『分散システムフレームワーク』 ※ 厳密には Controller も API を⽤いて変更します。 reconcile() { … } 登録 (via API Request) 監視 MySQL Cluster の管理 reconcile() { … } Controller 独⾃のリソースに対してどのような処理をするか Controller を書くことで運⽤が容易に (運⽤ナレッジのプログラム化)

Slide 21

Slide 21 text

MySQL operator reconcile() { … } Register (via API Request) Watch Manage StatefulSet and so on MySQL Operator

Slide 22

Slide 22 text

At CyberAgent, GPU as a Service Abstraction

Slide 23

Slide 23 text

GPU as a Service GPU GPU GPU GPU GPU GPU GPU GPU GPU GPU GPU GPU GPU GPU GPU GPU GPU GPU GPU GPU GPU GPU GPU GPU GPU GPU GPU GPU GPU GPU GPU GPU GPU with nvidia-docker Developer Developer Developer Developer Developer Developer Developer Developer GPU GPU GPU 払い出し

Slide 24

Slide 24 text

ϚχϑΣετͷෳࡶԽ GPU GPU GPU GPU GPU GPU GPU GPU GPU GPU GPU GPU GPU GPU GPU GPU GPU GPU GPU GPU GPU GPU GPU GPU GPU GPU GPU GPU GPU GPU GPU GPU GPU with nvidia-docker Developer Developer Developer Developer Developer Developer Developer Developer GPU GPU GPU 払い出し

Slide 25

Slide 25 text

MLTask CustomResource for GPUaaS abstraction GPUaaS を抽象化 ML エンジニアなどが複雑なマニフェストを理解するのは困難 Simple settings •  どのイメージを使うか •  どのトレーニングデータを使うか •  どこにモデルを出⼒するか •  ⼀時ファイル置き場にとこを利⽤するか •  同時実⾏する並列数 •  GPUなどのリソースをどのくらい割り当てるか

Slide 26

Slide 26 text

reconcile() { … } Register (via API Request) Watch Manage StatefulSet MLTask Controller GPU GPU GPU GPU GPU GPU MLTask CustomResource for GPUaaS abstraction

Slide 27

Slide 27 text

ஈ֊Ҡߦͷংষ 最初の Step では通常の Instance のように利⽤することを想定  StatefulSet + Headless Service

Slide 28

Slide 28 text

募集

Slide 29

Slide 29 text

Kubernetes as a Service at adtech studio ではプライベートクラウド上に独⾃の KaaS を実装  (2016 年後半から検証を開始) •  “type: LoadBalancer” の⾃社⽤プロバイダを独⾃実装 •  GKE-like な Ingress Controller を独⾃実装 •  Container-native LoadBalancing の弊社⽤ Ingress Controller を独⾃実装 もちろん •  クラスタのローリングアップデート、ノードの⾃動復旧なども完備 •  数分でクラスタを起動、クラスタのスケーリングも可能

Slide 30

Slide 30 text

our company own Ingress controller L4 LB VM Network Pod Network VM . VM . Software LB cluster Ingress Controller Watch Manage

Slide 31

Slide 31 text

our company own Ingress controller L4 LB VM Network Pod Network VM . VM . Software LB cluster Ingress Controller Watch Manage Day2 7/22 17:40 - 18:20 OpenStackとIngress Controllerで作るContainer Nativeロードバランシング (CyberAgent 牧垣 秀⼀朗)

Slide 32

Slide 32 text

その他の CyberAgent の事例

Slide 33

Slide 33 text

Using Kubernetes at AbemaTV でも 2016年〜2017年頃に利⽤を開始 他にも adtech studio では、新規開発の多くで Kubernetes を利⽤(2018年〜) https://speakerdeck.com/wappy100/legacy-to-container https://speakerdeck.com/chokkoyamada/midoruuea-webapurimadequan-tewohelmhua-sitasabisufalseyun-yong-shi-li

Slide 34

Slide 34 text

最後にお知らせ

Slide 35

Slide 35 text

Kubernetes 好きですか?

Slide 36

Slide 36 text

全然関係ないですけど、 k キーって見づらくないですか?

Slide 37

Slide 37 text

Kubernetes * Keyboard Cap

Slide 38

Slide 38 text

Kubernetes * Keyboard Cap alias k=“kubectl” e.g.) k get pods

Slide 39

Slide 39 text

全然関係ないですけど、 ESC キーって見づらくないですか?

Slide 40

Slide 40 text

Kubernetes * Keyboard Cap

Slide 41

Slide 41 text

Kubernetes * Keyboard Cap

Slide 42

Slide 42 text

ϒʔεʹͯ഑෍த 1⽇⽬ と 2⽇⽬ で分けて配布予定です

Slide 43

Slide 43 text

͓͏ͪ Kubernetes ΋లࣔத OS Docker Container Docker / kubelet Container Container Docker / kubelet Container Container Container (Kind) Kubernetes in Docker

Slide 44

Slide 44 text

No content

Slide 45

Slide 45 text

Thank you for your attention Let’s enjoy with Kubernetes follow me: @amsy810

Slide 46

Slide 46 text

No content