Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

自己紹介 ● 杉田 寿憲 ○ 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

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

僕とServerlessとの出会い

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

No content

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

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

Slide 26

Slide 26 text

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

Slide 27

Slide 27 text

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

Slide 28

Slide 28 text

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

Slide 29

Slide 29 text

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

Slide 30

Slide 30 text

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

Slide 31

Slide 31 text

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

Slide 32

Slide 32 text

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

Slide 33

Slide 33 text

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

Slide 34

Slide 34 text

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

Slide 35

Slide 35 text

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

Slide 36

Slide 36 text

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

Slide 37

Slide 37 text

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.

Slide 38

Slide 38 text

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

Slide 39

Slide 39 text

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

Slide 40

Slide 40 text

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

Slide 41

Slide 41 text

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

Slide 42

Slide 42 text

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

Slide 43

Slide 43 text

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

Slide 44

Slide 44 text

付録 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

Slide 45

Slide 45 text

付録 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

Slide 46

Slide 46 text

付録 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

Slide 47

Slide 47 text

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

Slide 48

Slide 48 text

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

Slide 49

Slide 49 text

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