$30 off During Our Annual Pro Sale. View Details »

入門 Knative 〜KubernetesとServerlessとの出会い〜 / getting started with knative

入門 Knative 〜KubernetesとServerlessとの出会い〜 / getting started with knative

Serverless Meetup Tokyo #11の資料です。
https://serverless.connpass.com/event/119559/

Toshinori Sugita

March 06, 2019
Tweet

More Decks by Toshinori Sugita

Other Decks in Technology

Transcript

  1. 入門 Knative
    〜KubernetesとServerlessとの出会い〜
    2019/3/6 Serverless Meetup Tokyo #11

    View Slide

  2. 自己紹介
    ● 杉田 寿憲
    ○ Toshinori Sugita
    ○ toshi0607
    ○ toshi0607
    ○ toshi0607
    ● Software Engineer@メルペイ
    ○ Backend、Tech Lead
    ● 本
    ○ 『GoとSAMで学ぶAWS Lambda』
    ○ 『Extensive Xamarin(共著)』
    ● OSS contribution(Serverless関連)
    ○ serverless/serverless
    ○ aws/aws-lambda-go
    ○ aws/aws-lambda-dotnet

    View Slide

  3. 今日のお話
    ● 僕とServerlessとの出会い
    ● 僕とKubernetesとの出会い
    ● KubernetesとServerlessとの出会い
    ● Knativeの構成要素
    ● Knativeの方向性
    ● 僕とKnativeの方向性
    ● 付録
    ○ Knativeの素敵資料
    ○ KnativeとCRDとOperator

    View Slide

  4. 今日のお話
    ● 僕とServerlessとの出会い
    ● 僕とKubernetesとの出会い
    ● KubernetesとServerlessとの出会い
    ● Knativeの構成要素
    ● Knativeの方向性
    ● 僕とKnativeの方向性
    ● 付録
    ○ Knativeの素敵資料
    ○ KnativeとCRDとOperator

    View Slide

  5. 僕とServerlessとの出会い
    ※https://developers.freee.co.jp/entry/aws-lambda-using-dotnet
    1. Amazon S3バケットにZipファイルがアップロードされる
    2. AWS Lambdaで別のS3バケットに展開

    View Slide

  6. 僕とServerlessとの出会い

    View Slide

  7. 僕とServerlessとの出会い
    ● プロビジョニングをそこまで気にしなくていい
    ● サーバー自体のメンテナンスはプロバイダー任せ
    ● 実行時のみサーバーリソースを使用
    ● 負荷に応じてスケール
    ● イベントドリブンな非同期処理(FaaS)

    View Slide

  8. 僕とServerlessとの出会い
    ● プロビジョニングをそこまで気にしなくていい
    ● サーバー自体のメンテナンスはプロバイダー任せ
    ● 実行時のみサーバーリソースを使用
    ● 負荷に応じてスケール
    ● イベントドリブンな非同期処理(FaaS)
    →今以上にインフラ知識のなかった自分にとって、ちょっとした設
    定でここまで色々整った状態で機能・サービスを世に出せるのは
    衝撃だった

    View Slide

  9. 今日のお話
    ● 僕とServerlessとの出会い
    ● 僕とKubernetesとの出会い
    ● KubernetesとServerlessとの出会い
    ● Knativeの構成要素
    ● Knativeの方向性
    ● 僕とKnativeの方向性
    ● 付録
    ○ Knativeの素敵資料
    ○ KnativeとCRDとOperator

    View Slide

  10. 僕とKubernetesとの出会い
    Go、GCP、Kubernetes、gRPC、マイクロサービス

    View Slide

  11. 僕とKubernetesとの出会い
    Go、GCP、Kubernetes、gRPC、マイクロサービス

    View Slide

  12. Kubernetesのある生活
    ● コードを書く
    ● Dockerイメージをビルド
    ● Dockerイメージをレジストリに登録
    ● デプロイ
    ● インターネットに公開
    ● ロードバランシング設定
    ● スケール設定
    ● 監視設定

    View Slide

  13. Kubernetesのある生活
    ● コードを書く
    ● Dockerイメージをビルド
    ● Dockerイメージをレジストリに登録
    ● デプロイ
    ● インターネットに公開
    ● ロードバランシング設定
    ● スケール設定
    ● 監視設定
    →開発 + 運用で実行環境を意識する割合が高い

    View Slide

  14. Kubernetesのある生活
    ● コードを書く
    ● Dockerイメージをビルド
    ● Dockerイメージをレジストリに登録
    ● デプロイ
    ● インターネットに公開
    ● ロードバランシング設定
    ● スケール設定
    ● 監視設定
    →開発 + 運用で実行環境を意識する割合が高い
    →さらにコードを書くことに注力できないか?

    View Slide

  15. View Slide

  16. 今日のお話
    ● 僕とServerlessとの出会い
    ● 僕とKubernetesとの出会い
    ● KubernetesとServerlessとの出会い
    ● Knativeの構成要素
    ● Knativeの方向性
    ● 僕とKnativeの方向性
    ● 付録
    ○ Knativeの素敵資料
    ○ KnativeとCRDとOperator

    View Slide

  17. Knativeとは?
    Kubernetes-based platform to build, deploy, and manage modern
    serverless workloads
    ※https://github.com/knative

    View Slide

  18. Knativeとは?
    ● Kubernetesのリソースを抽象化する
    ○ 開発者から見てよりシンプルに
    ● 独自のFaaSを構築するためのパーツを提供
    ○ Serving、Build、Eventingから構成される
    ● よくあるが難しい課題を解決
    ○ コンテナのデプロイ
    ○ ソースコードからURLでアクセスできるアプリケーションへ
    ○ ブルー/グリーンデプロイを伴うルーティングとトラフィック管理
    ○ オートスケーリングと需要に基づくワークロードのサイズ設定
    ○ 実行中のサービスをイベントエコシステムに結び付ける
    ※https://github.com/knative/docs

    View Slide

  19. 今日のお話
    ● 僕とServerlessとの出会い
    ● 僕とKubernetesとの出会い
    ● KubernetesとServerlessとの出会い
    ● Knativeの構成要素
    ● Knativeの方向性
    ● 僕とKnativeの方向性
    ● 付録
    ○ Knativeの素敵資料
    ○ KnativeとCRDとOperator

    View Slide

  20. Knativeの構成要素
    ※https://github.com/knative/docs
    Kubernetes
    Istio
    Serving Build Eventing
    Knative

    View Slide

  21. Servingの役割
    ※https://github.com/knative/docs/tree/master/serving
    ● コンテナの迅速なデプロイ
    ● オートスケールアップ・ダウン(0まで)
    ● Istio向けのトラフィック・ネットワーク設定
    ● コードと設定のバージョン管理

    View Slide

  22. Servingの構成要素
    ※https://github.com/knative/docs/tree/master/serving
    ● Configuration: 最新のRevision
    ● Revision: コードと設定のスナップショット
    ● Route: Revisionにルーティング
    ● Service: RouteとConfigurationを管理。k8sのServiceと別

    View Slide

  23. Servingの構成要素
    ※https://github.com/knative/docs/tree/master/serving
    ● Configuration: 最新のRevision
    ● Revision: コードと設定のスナップショット
    ● Route: Revisionにルーティング
    ● Service: RouteとConfigurationを管理。k8sのServiceと別
    Deployment k8s Service
    ReplicaSet
    Pod

    View Slide

  24. Servingの構成要素
    ※https://github.com/knative/serving/blob/master/docs/scaling/DEVELOPMENT.md
    ● Autoscaler: Revisionの同時リクエスト数を監視、調整
    ● Activator: RevisionがReserve State時リクエストを受ける

    View Slide

  25. Buildの役割と構成要素
    ※https://github.com/knative/docs/tree/master/build
    ● ソースコードをコンテナイメージに変換する
    ● ビルドパイプラインは複数のstepで構成される
    ○ 各stepはコンテナイメージ
    ○ クラスタのコンテナ内で実行される
    ● BuildTemplateを利用しパラメタを渡して実行できる
    ● Service(Configuration)で具体的なイメージの代わりにBuildを
    指定できる

    View Slide

  26. BuildTemplate
    ※https://github.com/knative/build-templates

    View Slide

  27. Eventingの役割
    ※https://github.com/knative/docs/tree/master/eventing
    ● イベントドリブンなアーキテクチャをサポート
    ● イベントの発行元と受け手を抽象化
    ● 既存の発行元、受け手の変更なく他サービスを接続
    ● CNCF Serverless WGのCloudEventsに則りサービス間の相互
    運用性を保証

    View Slide

  28. Eventingの構成要素
    ※https://github.com/knative/docs/tree/master/eventing
    ● Source: イベントソース。種類毎にリソースを定義
    ● Channel: イベントのバッファリング、Serviceへの到達保証
    ● Subscription: ChannelからイベントをServiceに渡す

    View Slide

  29. Event Source
    ※https://github.com/knative/docs/blob/master/eventing/sources/README.md
    ContainerSource Event Sourceとして独自に作成も可能

    View Slide

  30. 僕とServerlessとの出会い
    ● プロビジョニングをそこまで気にしなくていい
    ● サーバー自体のメンテナンスはプロバイダー任せ
    ● 実行時のみサーバーリソースを使用
    ● 負荷に応じてスケール
    ● イベントドリブンな非同期処理(FaaS)

    View Slide

  31. 僕とServerlessとの出会い
    ● プロビジョニングをそこまで気にしなくていい
    ● サーバー自体のメンテナンスはプロバイダー任せ
    ● 実行時のみサーバーリソースを使用
    ● 負荷に応じてスケール
    ● イベントドリブンな非同期処理(FaaS)
    →かつて出会ったServerlessな特徴をKubernetes上で実現できそ
    うな雰囲気があるけど自分たちで作らないといけない?

    View Slide

  32. Knativeとは?
    ● Kubernetesのリソースを抽象化する
    ○ 開発者から見てよりシンプルに
    ● 独自のFaaSを構築するためのパーツを提供
    ○ Serving、Build、Eventingから構成される
    ● よくあるが難しい課題を解決
    ○ コンテナのデプロイ
    ○ ソースコードからURLでアクセスできるアプリケーションへ
    ○ ブルー/グリーンデプロイを伴うルーティングとトラフィック管理
    ○ オートスケーリングと需要に基づくワークロードのサイズ設定
    ○ 実行中のサービスをイベントエコシステムに結び付ける
    ※https://github.com/knative/docs

    View Slide

  33. Knativeとは?
    ● Kubernetesのリソースを抽象化する
    ○ 開発者から見てよりシンプルに
    ● 独自のFaaSを構築するためのパーツを提供
    ○ Serving、Build、Eventingから構成される
    ● よくあるが難しい課題を解決
    ○ コンテナのデプロイ
    ○ ソースコードからURLでアクセスできるアプリケーションへ
    ○ ブルー/グリーンデプロイを伴うルーティングとトラフィック管理
    ○ オートスケーリングと需要に基づくワークロードのサイズ設定
    ○ 実行中のサービスをイベントエコシステムに結び付ける
    ※https://github.com/knative/docs

    View Slide

  34. 今日のお話
    ● 僕とServerlessとの出会い
    ● 僕とKubernetesとの出会い
    ● KubernetesとServerlessとの出会い
    ● Knativeの構成要素
    ● Knativeの方向性
    ● 僕とKnativeの方向性
    ● 付録
    ○ Knativeの素敵資料
    ○ KnativeとCRDとOperator

    View Slide

  35. Knativeの方向性
    ※https://www.atmarkit.co.jp/ait/articles/1808/28/news036.html

    View Slide

  36. Knativeの方向性
    ※https://www.atmarkit.co.jp/ait/articles/1808/28/news036.html
    ● Googleのウルス・ヘルツル氏は、Google CloudのIstioや
    Knativeに関する取り組みの長期的な目標が、複数クラウド間
    のAPI標準化にあると話している。
    ● (クラウドベンダーは、)実装の優劣を競うことはできる。だが、
    運用APIは統一されるべきだ。このため、運用APIはオープン
    ソースでなければならない。これを実現する取り組みの1つが
    Knativeだ。
    ● Knativeにおける私たちの目標は、実装ごとに独自であっては
    ならないものを統一することだ。

    View Slide

  37. Knativeの方向性
    ※https://www.redhat.com/en/blog/red-hat-collaborates-google-and-others-knative-deliver-hybrid-serverl
    ess-workloads-enterprise
    ● The model enables developers to write and manage
    serverless applications in a consistent way and is both
    developer and operator-friendly.

    View Slide

  38. Knativeの方向性
    ※https://github.com/knative/docs
    Kubernetes
    Serving Build Eventing
    Knative
    GKE Serverless
    Add-on
    riff GitLab Serverless
    Pivotal Function
    Service
    SAP Kyma
    OpenFaaS functions

    View Slide

  39. Knativeの方向性
    そこまで一貫性とかポータビリティとかって必要かな?

    View Slide

  40. Knativeの方向性
    その謎を明らかにすべく我々はアマゾン(どちらかというとグーグ
    ル)の奥地へ向かうのであった…

    View Slide

  41. 今日のお話
    ● 僕とServerlessとの出会い
    ● 僕とKubernetesとの出会い
    ● KubernetesとServerlessとの出会い
    ● Knativeの構成要素
    ● Knativeの方向性
    ● 僕とKnativeの方向性
    ● 付録
    ○ Knativeの素敵資料
    ○ KnativeとCRDとOperator

    View Slide

  42. 僕とKnativeの方向性
    ● 『入門 Knative(仮)』@技術書典6 う46
    ○ 明日から本気出す!
    ● Serverlessconf NYC 2019にプロポーザル出す
    ○ CFP closes 2019/6/3
    ○ https://nyc2019.serverlessconf.io/
    ● CloudNative Days Tokyo 2019にプロポーザル出しました
    ○ ご興味ある方いいねやリツイートで応援お願いします!

    View Slide

  43. 今日のお話
    ● 僕とServerlessとの出会い
    ● 僕とKubernetesとの出会い
    ● KubernetesとServerlessとの出会い
    ● Knativeの構成要素
    ● Knativeの方向性
    ● 僕とKnativeの方向性
    ● 付録
    ○ Knativeの素敵資料
    ○ KnativeとCRDとOperator

    View Slide

  44. 付録 Knativeの素敵資料
    ● 公式ドキュメント
    ○ とても整理されていて図も豊富でわかりやすいです
    ○ https://github.com/knative/docs
    ● Getting Started with Knative (Compliments of Pivotal)
    ○ Pivotalの方が執筆した81ページのebookが無料です
    ○ https://content.pivotal.io/ebooks/getting-started-with-knative
    ● Using Knative to deploy serverless applications to Kubernetes
    ○ GKEを使ったServingとBuildのハンズオン
    ○ Cloud Shell上でサクサク進められてよかったです
    ○ https://codelabs.developers.google.com/codelabs/knative-intro/#0

    View Slide

  45. 付録 Knativeの素敵資料
    ● Hands on Knative — Part 1
    ○ Serving
    ○ https://medium.com/google-cloud/hands-on-knative-part-1-f2d5ce89944e
    ● Hands on Knative — Part 2
    ○ Eventing
    ○ https://medium.com/google-cloud/hands-on-knative-part-2-a27729f4d756
    ● Hands on Knative — Part 3
    ○ Build
    ○ https://medium.com/google-cloud/hands-on-knative-part-3-d8731ad2f23d

    View Slide

  46. 付録 Knativeの素敵資料
    ● Knative: Building serverless platforms on top of Kubernetes
    ○ https://seattle.serverlessdays.io/media/slides/Kubernetes+Serverless=Knative.pd
    f
    ● Beyond Kubernetes - Knative, riff, and Spring Cloud Function
    ○ https://speakerdeck.com/saturnism/beyond-kubernetes-knative-riff-and-spring-
    cloud-function
    ● サーバーレスからコンテナまで。Knativeのお話
    ○ https://speakerdeck.com/jacopen/sabaresukarakontenamade-knativefalseohua
    ● Knative Serving 入門
    ○ https://speakerdeck.com/takaishi/kubernetes-meetup-13

    View Slide

  47. 付録 KnativeとCRDとOperator
    ● Kubernetesは期待する状態を宣言的に記述したマニフェスト情報
    をもとにリソースを登録する
    ○ Deployment、ReplicaSet、Pod、Serviceなど
    ● Kubernetesは現在の状態と期待する状態が異なれば期待する状
    態になるように調整する
    ○ コントロールループ
    ● リソースはユーザが独自に定義でき
    (CustomResourceDefinition)、その状態を調整するコントロー
    ラー(Operator)も実装できる
    ● Knativeのコンポーネントの個々の構成要素(Service、Route、
    Configration、Revisionなど)もCRD
    ● KnativeはKubenetes nativeな機能で構成されている

    View Slide

  48. We’re hiring!
    ※https://open.talentio.com/1/c/mercari/requisitions/411

    View Slide

  49. ご清聴ありがとうございました!
    入門 Knative
    〜KubernetesとServerlessとの出会い〜

    View Slide