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

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

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

C000f292a92b894afabbb352e8709667?s=128

Toshinori Sugita

March 06, 2019
Tweet

Transcript

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

  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
  3. 今日のお話 • 僕とServerlessとの出会い • 僕とKubernetesとの出会い • KubernetesとServerlessとの出会い • Knativeの構成要素 •

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

    Knativeの方向性 • 僕とKnativeの方向性 • 付録 ◦ Knativeの素敵資料 ◦ KnativeとCRDとOperator
  5. 僕とServerlessとの出会い ※https://developers.freee.co.jp/entry/aws-lambda-using-dotnet 1. Amazon S3バケットにZipファイルがアップロードされる 2. AWS Lambdaで別のS3バケットに展開

  6. 僕とServerlessとの出会い

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

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

    イベントドリブンな非同期処理(FaaS) →今以上にインフラ知識のなかった自分にとって、ちょっとした設 定でここまで色々整った状態で機能・サービスを世に出せるのは 衝撃だった
  9. 今日のお話 • 僕とServerlessとの出会い • 僕とKubernetesとの出会い • KubernetesとServerlessとの出会い • Knativeの構成要素 •

    Knativeの方向性 • 僕とKnativeの方向性 • 付録 ◦ Knativeの素敵資料 ◦ KnativeとCRDとOperator
  10. 僕とKubernetesとの出会い Go、GCP、Kubernetes、gRPC、マイクロサービス

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

  12. Kubernetesのある生活 • コードを書く • Dockerイメージをビルド • Dockerイメージをレジストリに登録 • デプロイ •

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

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

    インターネットに公開 • ロードバランシング設定 • スケール設定 • 監視設定 →開発 + 運用で実行環境を意識する割合が高い →さらにコードを書くことに注力できないか?
  15. None
  16. 今日のお話 • 僕とServerlessとの出会い • 僕とKubernetesとの出会い • KubernetesとServerlessとの出会い • Knativeの構成要素 •

    Knativeの方向性 • 僕とKnativeの方向性 • 付録 ◦ Knativeの素敵資料 ◦ KnativeとCRDとOperator
  17. Knativeとは? Kubernetes-based platform to build, deploy, and manage modern serverless

    workloads ※https://github.com/knative
  18. Knativeとは? • Kubernetesのリソースを抽象化する ◦ 開発者から見てよりシンプルに • 独自のFaaSを構築するためのパーツを提供 ◦ Serving、Build、Eventingから構成される •

    よくあるが難しい課題を解決 ◦ コンテナのデプロイ ◦ ソースコードからURLでアクセスできるアプリケーションへ ◦ ブルー/グリーンデプロイを伴うルーティングとトラフィック管理 ◦ オートスケーリングと需要に基づくワークロードのサイズ設定 ◦ 実行中のサービスをイベントエコシステムに結び付ける ※https://github.com/knative/docs
  19. 今日のお話 • 僕とServerlessとの出会い • 僕とKubernetesとの出会い • KubernetesとServerlessとの出会い • Knativeの構成要素 •

    Knativeの方向性 • 僕とKnativeの方向性 • 付録 ◦ Knativeの素敵資料 ◦ KnativeとCRDとOperator
  20. Knativeの構成要素 ※https://github.com/knative/docs Kubernetes Istio Serving Build Eventing Knative

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

  22. Servingの構成要素 ※https://github.com/knative/docs/tree/master/serving • Configuration: 最新のRevision • Revision: コードと設定のスナップショット • Route:

    Revisionにルーティング • Service: RouteとConfigurationを管理。k8sのServiceと別
  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
  24. Servingの構成要素 ※https://github.com/knative/serving/blob/master/docs/scaling/DEVELOPMENT.md • Autoscaler: Revisionの同時リクエスト数を監視、調整 • Activator: RevisionがReserve State時リクエストを受ける

  25. Buildの役割と構成要素 ※https://github.com/knative/docs/tree/master/build • ソースコードをコンテナイメージに変換する • ビルドパイプラインは複数のstepで構成される ◦ 各stepはコンテナイメージ ◦ クラスタのコンテナ内で実行される

    • BuildTemplateを利用しパラメタを渡して実行できる • Service(Configuration)で具体的なイメージの代わりにBuildを 指定できる
  26. BuildTemplate ※https://github.com/knative/build-templates

  27. Eventingの役割 ※https://github.com/knative/docs/tree/master/eventing • イベントドリブンなアーキテクチャをサポート • イベントの発行元と受け手を抽象化 • 既存の発行元、受け手の変更なく他サービスを接続 • CNCF

    Serverless WGのCloudEventsに則りサービス間の相互 運用性を保証
  28. Eventingの構成要素 ※https://github.com/knative/docs/tree/master/eventing • Source: イベントソース。種類毎にリソースを定義 • Channel: イベントのバッファリング、Serviceへの到達保証 • Subscription:

    ChannelからイベントをServiceに渡す
  29. Event Source ※https://github.com/knative/docs/blob/master/eventing/sources/README.md ContainerSource Event Sourceとして独自に作成も可能

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

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

    イベントドリブンな非同期処理(FaaS) →かつて出会ったServerlessな特徴をKubernetes上で実現できそ うな雰囲気があるけど自分たちで作らないといけない?
  32. Knativeとは? • Kubernetesのリソースを抽象化する ◦ 開発者から見てよりシンプルに • 独自のFaaSを構築するためのパーツを提供 ◦ Serving、Build、Eventingから構成される •

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

    よくあるが難しい課題を解決 ◦ コンテナのデプロイ ◦ ソースコードからURLでアクセスできるアプリケーションへ ◦ ブルー/グリーンデプロイを伴うルーティングとトラフィック管理 ◦ オートスケーリングと需要に基づくワークロードのサイズ設定 ◦ 実行中のサービスをイベントエコシステムに結び付ける ※https://github.com/knative/docs
  34. 今日のお話 • 僕とServerlessとの出会い • 僕とKubernetesとの出会い • KubernetesとServerlessとの出会い • Knativeの構成要素 •

    Knativeの方向性 • 僕とKnativeの方向性 • 付録 ◦ Knativeの素敵資料 ◦ KnativeとCRDとOperator
  35. Knativeの方向性 ※https://www.atmarkit.co.jp/ait/articles/1808/28/news036.html

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

    ソースでなければならない。これを実現する取り組みの1つが Knativeだ。 • Knativeにおける私たちの目標は、実装ごとに独自であっては ならないものを統一することだ。
  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.
  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
  39. Knativeの方向性 そこまで一貫性とかポータビリティとかって必要かな?

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

  41. 今日のお話 • 僕とServerlessとの出会い • 僕とKubernetesとの出会い • KubernetesとServerlessとの出会い • Knativeの構成要素 •

    Knativeの方向性 • 僕とKnativeの方向性 • 付録 ◦ Knativeの素敵資料 ◦ KnativeとCRDとOperator
  42. 僕とKnativeの方向性 • 『入門 Knative(仮)』@技術書典6 う46 ◦ 明日から本気出す! • Serverlessconf NYC

    2019にプロポーザル出す ◦ CFP closes 2019/6/3 ◦ https://nyc2019.serverlessconf.io/ • CloudNative Days Tokyo 2019にプロポーザル出しました ◦ ご興味ある方いいねやリツイートで応援お願いします!
  43. 今日のお話 • 僕とServerlessとの出会い • 僕とKubernetesとの出会い • KubernetesとServerlessとの出会い • Knativeの構成要素 •

    Knativeの方向性 • 僕とKnativeの方向性 • 付録 ◦ Knativeの素敵資料 ◦ KnativeとCRDとOperator
  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
  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
  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
  47. 付録 KnativeとCRDとOperator • Kubernetesは期待する状態を宣言的に記述したマニフェスト情報 をもとにリソースを登録する ◦ Deployment、ReplicaSet、Pod、Serviceなど • Kubernetesは現在の状態と期待する状態が異なれば期待する状 態になるように調整する ◦

    コントロールループ • リソースはユーザが独自に定義でき (CustomResourceDefinition)、その状態を調整するコントロー ラー(Operator)も実装できる • Knativeのコンポーネントの個々の構成要素(Service、Route、 Configration、Revisionなど)もCRD • KnativeはKubenetes nativeな機能で構成されている
  48. We’re hiring! ※https://open.talentio.com/1/c/mercari/requisitions/411

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