Upgrade to Pro — share decks privately, control downloads, hide ads and more …

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

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

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

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

Masaya Aoyama (@amsy810)

July 06, 2019
Tweet

More Decks by Masaya Aoyama (@amsy810)

Other Decks in Technology

Transcript

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

    View Slide

  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 関連のΞʔΩςΫτ

    View Slide

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

    View Slide

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

    View Slide

  5. Kubernetes is anywhere

    View Slide

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

    View Slide

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

    View Slide

  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/)

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  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なシステムを実現

    View Slide

  14. Cloud Native != Kubernetes

    View Slide

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

    View Slide

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

    View Slide

  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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  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
    『障害時のクラスタ復旧』
    『バックアップなどの運用』
    を自動化(マネージド)

    View Slide

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

    View Slide

  23. ʰ෼ࢄγεςϜϑϨʔϜϫʔΫʱͱͯ͠ͷ Kubernetes
    Kubernetes のコアは『Decralative API 』と『分散システムフレームワーク』
    ※ 厳密には Controller も API を⽤いて変更します。
    reconcile()
    {

    }
    登録
    (via API Request)
    Watch
    クラスタの状態
    コンテナの作成・削除
    Controller

    View Slide

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

    }
    Controller

    View Slide

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

    }
    Controller

    View Slide

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

    }
    Controller

    View Slide

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

    }
    Controller

    View Slide

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

    View Slide

  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

    View Slide

  30. ʢ࠶ܝʣʰ෼ࢄγεςϜϑϨʔϜϫʔΫʱͱͯ͠ͷ Kubernetes
    Kubernetes のコアは『Decralative API 』と『分散システムフレームワーク』
    ※ 厳密には Controller も API を⽤いて変更します。
    reconcile()
    {

    }
    登録
    (via API Request)
    監視
    クラスタの状態
    コンテナの作成・削除

    View Slide

  31. ʰ෼ࢄγεςϜϑϨʔϜϫʔΫʱͱͯ͠ͷ Kubernetes
    Kubernetes のコアは『Decralative API 』と『分散システムフレームワーク』
    ※ 厳密には Controller も API を⽤いて変更します。
    reconcile()
    {

    }
    登録
    (via API Request)
    監視
    MySQL Cluster の管理
    reconcile()
    {

    }
    Controller
    独⾃のリソースに対してどのような処理をするか
    Controller を書くことで運⽤が容易に
    (運⽤ナレッジのプログラム化)

    View Slide

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

    View Slide

  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

    View Slide

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

    View Slide