Slide 1

Slide 1 text

Masaya Aoyama CyberAgent - adtech studio Kubernetes Ͱ࢝ΊΔ৽͍͠։ൃ Let’s start new development with Kubernetes @BCU30 2019 amsy810 @amsy810

Slide 2

Slide 2 text

Publicity (一部抜粋)  著者 『Kubernetes 完全ガイド』 『みんなの Docker/K8s』  基調講演 『Japan Container Days v18.04』 『Google Cloud K8s Day』   招待講演 『৘ใॲཧֶձ ίϯϐϡʔλγεςϜγϯϙδ΢Ϝ』         『AWS Dev Day Tokyo』 『IBM Think Japan』 『JEITA 委員会』  登壇 『KubeCon + CloudNativeCon China 2019』 『OSSummit 2019』  資格 『CKAD #2』 『CKA #138』 Masaya Aoyama (@amsy810) Infrastructure Engineer Community  Co-chair 『Cloud Native Days Tokyo (旧 Japan Container Days)』  Organizer 『Cloud Native Meetup Tokyo』  Organizer 『Kubernetes Meetup Tokyo』  Organizer 『KubeCon 日本交流会』  Contribute to OpenStack and Kubernetes 主業務は KaaS の実装 / 運用 K8s 関連のΞʔΩςΫτ

Slide 3

Slide 3 text

みなさん、 Kubernetes は知っていますか?

Slide 4

Slide 4 text

Personal Kubernetes Cluster スマホのように⼀⼈⼀台Kubernetes クラスタを持っている時代が既に到来(?)

Slide 5

Slide 5 text

Kubernetes is anywhere

Slide 6

Slide 6 text

Kubernetes is anywhere 機内に持ち込む際は誰がどう⾒ても 爆弾 なので気をつけましょう。

Slide 7

Slide 7 text

今年のテーマは 『羽化』 Kubernetes が成長してきた 5 年間

Slide 8

Slide 8 text

KubeCon + CloudNativeCon KubeCon + CloudNativeCon Barcelona 2019 Call for Proposals (CFP) Is Open, CNCF, 2018-11-28 (https://www.cncf.io/blog/2018/11/16/kubecon-barcelona-2019-call-for-proposals-cfp-is-open/)

Slide 9

Slide 9 text

Google Kubernetes Engine Managed Kubernetes Serivce Azure Kubernetes Service 2014-11〜 2017-02〜 2017-11〜 Amazon Elastic Container Service for Kubernetes

Slide 10

Slide 10 text

今年のテーマは 『羽化』 Kubernetes と共に成長してきた 3 年間

Slide 11

Slide 11 text

そもそも Kubernetes とか Cloud Native ってなんなの?

Slide 12

Slide 12 text

CNCF and The Linux Foundation •  KubernetesはThe Linux Foundationの サブプロジェクトであるCNCFによってホスト •  その他にも多くのプロジェクトを ホストしている

Slide 13

Slide 13 text

Cloud Nativeͱ͸ʁ page 013 Cloud native technologies empower organizations to build and run scalable applications in modern, dynamic environments such as public, private, and hybrid clouds. Containers, service meshes, microservices, immutable infrastructure, and declarative APIs exemplify this approach. These techniques enable loosely coupled systems that are resilient, manageable, and observable. Combined with robust automation, they allow engineers to make high-impact changes frequently and predictably with minimal toil. The Cloud Native Computing Foundation seeks to drive adoption of this paradigm by fostering and sustaining an ecosystem of open source, vendor-neutral projects. We democratize state-of-the-art patterns to make these innovations accessible for everyone. CNCF Cloud Native Defenition v1.0, CNCF, 2018-11-28 (https://github.com/cncf/toc/blob/master/DEFINITION.md) •  疎結合なシステム •  復元力がある •  管理しやすい •  可観測である •  堅牢な自動化により、頻繁かつ期待通りに最 小限の労力で大きな変更が可能 OpenかつScalableなシステムを実現

Slide 14

Slide 14 text

Cloud Native != Kubernetes

Slide 15

Slide 15 text

CyberAgent では Kubernetes 使ってるの?

Slide 16

Slide 16 text

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

Slide 17

Slide 17 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 18

Slide 18 text

Kubernetes を使うと何ができるの?

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

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

Slide 21

Slide 21 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 22

Slide 22 text

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

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

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

Slide 26

Slide 26 text

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

Slide 27

Slide 27 text

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

Slide 28

Slide 28 text

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

Slide 29

Slide 29 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 30

Slide 30 text

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

Slide 31

Slide 31 text

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

Slide 32

Slide 32 text

Conclusion 『コンテナ/アプリケーション実⾏基盤』としての Kubernetes コンテナを⽤いたスケーラブルなシステムや、 Google Borg に由来する洗練された⾃動化を利⽤して安定的なシステムを実現 『X as a Service 基盤』としての Kubernetes 様々な X as a Service を提供するマネージド・サービス基盤として、 Platform for Platform を実現 『分散システムフレームワーク』としての Kubernetes Kubernetes の根幹となる Reconciliation の考え⽅と ⾼い拡張性を組み合わせることで、運⽤ナレッジをプログラム化

Slide 33

Slide 33 text

ʢ͓·͚ʣLet’s try Kubernetes with “kind” Kubernetes in Docker https://github.com/kubernetes-sigs/kind (インターンシップも募集中) OS Docker Container Docker / kubelet Container Container Docker / kubelet Container Container Container

Slide 34

Slide 34 text

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