Kubernetesで始める新しい開発 ~3つの側面~ / kubernetes-bcu30-2019

Kubernetesで始める新しい開発 ~3つの側面~ / kubernetes-bcu30-2019

Kubernetes を利用することで、Cloud Native な開発を始めることが可能です。この Kubernetes には「コンテナ実行基盤」としての側面以外にも、「フレームワーク」「XaaS基盤」という側面の計 3 つがあると思っています。この10分でこれら 3 つについて紹介します。

青山 真也 @amsy810
株式会社サイバーエージェント アドテク本部
インフラエンジニア

De266761b955b2636e454a1bc7a99ed4?s=128

Masaya Aoyama (@amsy810)

July 06, 2019
Tweet

Transcript

  1. Masaya Aoyama CyberAgent - adtech studio Kubernetes Ͱ࢝ΊΔ৽͍͠։ൃ Let’s start

    new development with Kubernetes @BCU30 2019 amsy810 @amsy810
  2. 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 関連のΞʔΩςΫτ
  3. みなさん、 Kubernetes は知っていますか?

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

  5. Kubernetes is anywhere

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

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

  8. 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/)
  9. Google Kubernetes Engine Managed Kubernetes Serivce Azure Kubernetes Service 2014-11〜

    2017-02〜 2017-11〜 Amazon Elastic Container Service for Kubernetes
  10. 今年のテーマは 『羽化』 Kubernetes と共に成長してきた 3 年間

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

  12. CNCF and The Linux Foundation •  KubernetesはThe Linux Foundationの サブプロジェクトであるCNCFによってホスト

    •  その他にも多くのプロジェクトを ホストしている
  13. 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なシステムを実現
  14. Cloud Native != Kubernetes

  15. CyberAgent では Kubernetes 使ってるの?

  16. Kubernetes as a Service at adtech studio ではプライベートクラウド上に独⾃の KaaS を実装

     (2016 年後半から検証を開始) •  “type: LoadBalancer” の⾃社⽤プロバイダを独⾃実装 •  GKE-like な Ingress Controller を独⾃実装 •  Container-native LoadBalancing の弊社⽤ Ingress Controller を独⾃実装 もちろん •  クラスタのローリングアップデート、ノードの⾃動復旧なども完備 •  数分でクラスタを起動、クラスタのスケーリングも可能
  17. 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
  18. Kubernetes を使うと何ができるの?

  19. What is 『コンテナ/アプリケーション実⾏基盤』としての Kubernetes 『X as a Service 基盤』としての Kubernetes

    『分散システムフレームワーク』としての Kubernetes
  20. ʰίϯςφ/ΞϓϦέʔγϣϯ࣮ߦج൫ʱͱͯ͠ͷ Kubernetes Google Borg をベースとした洗練された基盤 •  セルフヒーリング •  ロードバランサとの⾃動連携 • 

    オートスケール •  様々なワークロードへの対応 •  データの管理
  21. ʰ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 『障害時のクラスタ復旧』 『バックアップなどの運用』 を自動化(マネージド)
  22. ʰX as a Service ج൫ʱͱͯ͠ͷ Kubernetes Kubernetes は ⼩さなクラウド に近い

    oracle/mysql-operator 『障害時のクラスタ復旧』 『バックアップなどの運用』 を自動化(マネージド) Relational DB Key Value Store Document DB Queue Developer
  23. ʰ෼ࢄγεςϜϑϨʔϜϫʔΫʱͱͯ͠ͷ Kubernetes Kubernetes のコアは『Decralative API 』と『分散システムフレームワーク』 ※ 厳密には Controller も

    API を⽤いて変更します。 reconcile() { … } 登録 (via API Request) Watch クラスタの状態 コンテナの作成・削除 Controller
  24. ʰ෼ࢄγεςϜϑϨʔϜϫʔΫʱͱͯ͠ͷ Kubernetes Reconcile Loop (調整 Loop)により、レベルトリガーであるべき状態に収束  = ただ起動するわけではなく、その状態を維持する Observe Diff

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

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

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

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

    Controller(Operator) ReplicaSet Controller は必要なレプリカ数が •  ⾜りなかったら新しく⽴ち上げ •  超過していたら停⽌させる Observe Diff Act Observe: 現状を確認 Diff: 理想と現実の差分を計算 Act: 差分に対する処理を実施
  29. ʰ෼ࢄγεςϜϑϨʔϜϫʔΫʱͱͯ͠ͷ Kubernetes Kubernetes では⾮常に沢⼭の Controller が動いている •  Deployment Controller • 

    ReplicaSet Controller •  Endpoints Controller •  Cloud Controller •  etc. これらの Controller が⾮同期に動作することで ⼀つの分散システムとして成り⽴っている reconcile() { … } Controller reconcile() { … } Controller reconcile() { … } Controller reconcile() { … } Controller reconcile() { … } Controller 実際の状態 理想の状態 watch
  30. ʢ࠶ܝʣʰ෼ࢄγεςϜϑϨʔϜϫʔΫʱͱͯ͠ͷ Kubernetes Kubernetes のコアは『Decralative API 』と『分散システムフレームワーク』 ※ 厳密には Controller も

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

    API を⽤いて変更します。 reconcile() { … } 登録 (via API Request) 監視 MySQL Cluster の管理 reconcile() { … } Controller 独⾃のリソースに対してどのような処理をするか Controller を書くことで運⽤が容易に (運⽤ナレッジのプログラム化)
  32. Conclusion 『コンテナ/アプリケーション実⾏基盤』としての Kubernetes コンテナを⽤いたスケーラブルなシステムや、 Google Borg に由来する洗練された⾃動化を利⽤して安定的なシステムを実現 『X as a

    Service 基盤』としての Kubernetes 様々な X as a Service を提供するマネージド・サービス基盤として、 Platform for Platform を実現 『分散システムフレームワーク』としての Kubernetes Kubernetes の根幹となる Reconciliation の考え⽅と ⾼い拡張性を組み合わせることで、運⽤ナレッジをプログラム化
  33. ʢ͓·͚ʣ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
  34. Thank you for your attention Let’s enjoy with Kubernetes follow

    me: @amsy810