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

Knativeで実現するKubernetes上のサーバーレスアーキテクチャ #CNDT2019 #1E3 / serverless architecture on the top of K8s with Knative

Knativeで実現するKubernetes上のサーバーレスアーキテクチャ #CNDT2019 #1E3 / serverless architecture on the top of K8s with Knative

CloudNative Days 2019の登壇資料です。
https://cloudnativedays.jp/cndt2019/

YouTubeはこちら
https://youtu.be/rD9czFIT4Iw

Toshinori Sugita

July 22, 2019
Tweet

More Decks by Toshinori Sugita

Other Decks in Technology

Transcript

  1. Knativeで実現する

    Kubernetes上のサーバーレスアーキテクチャ

    @toshi0607

    #CNDT2019
    #OSDT2019
    #RoomE
    #1E3

    View Slide

  2. ※https://cloudnativedays.jp/cndt2019/
    #CNDT2019
    #OSDT2019
    #RoomE
    #1E3

    View Slide

  3. 自己紹介

    ● 杉田 寿憲

    ○ Toshinori Sugita

    ○ toshi0607

    ● Software Engineer@メルペイ

    ○ Go、gPRC、GKEなマイクロサービスのバックエンド開発

    ● 本

    ○ 『Knativeの歩き方 KubernetesからServerlessを訪ねて』

    ○ 『GoとSAMで学ぶAWS Lambda』

    ○ 『Extensive Xamarin(共著)』

    #CNDT2019
    #OSDT2019
    #RoomE
    #1E3

    View Slide

  4. #ふわふわくん
    #CNDT2019
    #OSDT2019
    #RoomE
    #1E3

    View Slide

  5. 今日のお話

    ● Knativeの概要

    ● KnativeとKuberentes

    ● KubernetesとServerless

    ● Knativeのユースケース

    ● まとめ

    ● 参考資料

    #CNDT2019
    #OSDT2019
    #RoomE
    #1E3

    View Slide

  6. 今日のお話

    ● Knativeの概要

    ● KnativeとKuberentes

    ● KubernetesとServerless

    ● Knativeのユースケース

    ● まとめ

    ● 参考資料

    #CNDT2019
    #OSDT2019
    #RoomE
    #1E3

    View Slide

  7. Knativeとは?

    Kubernetes-based platform to build, deploy, and manage modern
    serverless workloads

    ※https://github.com/knative
    #CNDT2019
    #OSDT2019
    #RoomE
    #1E3

    View Slide

  8. Knativeとは?

    ● Kubernetesのリソースを抽象化する

    ○ 開発者から見てよりシンプルに

    ● 独自のPaaS/FaaSを構築するためのパーツを提供

    ○ Serving、Build、Eventingから構成される

    ● よくあるが難しい課題を解決

    ○ コンテナのデプロイ

    ○ ソースコードからURLでアクセスできるアプリケーションへ

    ○ ブルー/グリーンデプロイを伴うルーティングとトラフィック管理

    ○ オートスケーリングと需要に基づくワークロードのサイズ設定

    ○ 実行中のサービスをイベントエコシステムに結び付ける

    ※https://github.com/knative/docs
    #CNDT2019
    #OSDT2019
    #RoomE
    #1E3

    View Slide

  9. Knativeの構成要素

    ※https://github.com/knative/docs/tree/master/docs
    Kubernetes

    Istio or Gloo

    Serving
 Build
 Eventing

    Platform

    Gateway

    Primitives


    View Slide

  10. Servingの役割

    ※https://github.com/knative/docs/tree/master/serving
    ● コンテナの迅速なデプロイ

    ● オートスケールアウト・イン(0まで)

    ● Istio向けのトラフィック・ネットワーク設定

    ● コードと設定のバージョン管理

    #CNDT2019
    #OSDT2019
    #RoomE
    #1E3

    View Slide

  11. Servingの構成要素

    ※https://github.com/knative/docs/tree/master/serving
    ● Revision: コードと設定のスナップショット

    ● Configuration: 最新のRevision

    ● Route: Revisionにルーティング

    ● Service: RouteとConfigurationを管理。k8s
    のServiceとは別

    #CNDT2019
    #OSDT2019
    #RoomE
    #1E3

    View Slide

  12. REVISION
    Servingの構成要素

    ※https://github.com/knative/serving/blob/master/docs/scaling/DEVELOPMENT.md
    ● Autoscaler: Revisionの同時リクエスト数を監視、調整

    ● Activator: RevisionがReserve State時リクエストを受ける

    ROUTE
    Istio Route

    Activator
 Pods
 Deployment

    Autoscaler

    metrics

    resize

    active route

    inactive route

    activate

    create

    watch

    first


    View Slide

  13. Istioは必須?

    ※https://knative.dev/docs/install/index.html
    代替手段はあるがKnative全コンポーネントを利用するには今のところ必須

    #CNDT2019
    #OSDT2019
    #RoomE
    #1E3

    View Slide

  14. Buildの役割と構成要素

    ※https://github.com/knative/docs/tree/master/build
    ● ソースコードをコンテナイメージに変換する

    ● ビルドパイプラインは複数のstepで構成される

    ○ 各stepはコンテナイメージ

    ○ クラスタのコンテナ内で実行される

    ● BuildTemplateでテンプレート化・再利用できる

    #CNDT2019
    #OSDT2019
    #RoomE
    #1E3

    View Slide

  15. BuildTemplate

    ※https://github.com/knative/build-templates
    #CNDT2019
    #OSDT2019
    #RoomE
    #1E3

    View Slide

  16. BuildとTeketon

    ※https://github.com/knative/build/issues/614
    ● knative/build-pipelineとしてはじまった
    knative/build強化プロジェクトのTekton
    Pipelineに移行の議論中

    ● v0.7でServingがBuildを利用していた機能
    (DockerイメージにBuild自体を指定する)を
    廃止

    ● BuildのREADME上でもdeplicationへの
    feedback受付中を明記

    ● v1.0でknative/buildをアーカイブするスケ
    ジュール

    #CNDT2019
    #OSDT2019
    #RoomE
    #1E3

    View Slide

  17. BuildとTeketon

    ※https://github.com/knative/build/issues/614
    ● 2019/7/12にKnative BuildをTektonに移行
    するためのドキュメントPRが
    tektoncd/pipelineにマージされる

    ● K8sリソースの対応関係、差異、
    BuildTemplate -> TaskとBuild -> TaskRun
    の移行例がまとまっている

    #CNDT2019
    #OSDT2019
    #RoomE
    #1E3

    View Slide

  18. BuildとTeketon

    ※https://github.com/triggermesh/tm/releases/tag/v0.0.12
    ● Knative活用プロジェクトにも移行が完了し
    たものがある

    ● knative/buildの互換性は維持

    #CNDT2019
    #OSDT2019
    #RoomE
    #1E3

    View Slide

  19. Eventingの役割

    ※https://github.com/knative/docs/tree/master/eventing
    ● イベントドリブンなアーキテクチャをサポート

    ● イベントの発行元と受け手を抽象化

    ● 既存の発行元、受け手の変更なく他サービスを接続

    ● CNCF Serverless WGのCloudEventsに則りサービス間の相互
    運用性を保証

    #CNDT2019
    #OSDT2019
    #RoomE
    #1E3

    View Slide

  20. Eventingの構成要素

    ※https://github.com/knative/docs/tree/master/eventing
    ● Source: イベントソース。種類毎にリソースを定義

    ● Broker: イベントを受け取り、フィルタリングされたものをService(subscriber)に渡す

    ● Trigger: subscriberにわたすイベントのフィルター

    Broker
 Service

    Trigger

    ✓ ✓ ✓
    filter
 subscriber

    broker

    #CNDT2019
    #OSDT2019
    #RoomE
    #1E3

    View Slide

  21. Eventingの構成要素(〜v0.3)

    ※https://github.com/knative/docs/tree/master/eventing
    ● Source: イベントソース。種類毎にリソースを定義

    ● Channel: イベントのバッファリング、Serviceへの到達保証

    ● Subscription: ChannelからイベントをServiceに渡す

    #CNDT2019
    #OSDT2019
    #RoomE
    #1E3

    View Slide

  22. Event Source

    ※https://github.com/knative/docs/tree/master/docs/eventing/sources
    ContainerSource Event Sourceとして独自に作成することも可能
 #CNDT2019
    #OSDT2019
    #RoomE
    #1E3

    View Slide

  23. 今日のお話

    ● Knativeの概要

    ● KnativeとKuberentes

    ● KubernetesとServerless

    ● Knativeのユースケース

    ● まとめ

    ● 参考資料

    #CNDT2019
    #OSDT2019
    #RoomE
    #1E3

    View Slide

  24. Kubernetesとは?

    Kubernetes (K8s) is an open-source system for automating
    deployment, scaling, and management of containerized
    applications.

    ※https://kubernetes.io/
    #CNDT2019
    #OSDT2019
    #RoomE
    #1E3

    View Slide

  25. Kubernetesのコンセプト

    ● 「あるべきリソースの状態」を宣言的
    に定義した設定を適用

    ● K8sのコントローラーがリソースを監
    視し、「あるべきリソースの状態」を維
    持し続ける

    →故障時の復旧や高負荷時のオートス
    ケールなどで運用負荷を低減できる

    ※https://kubernetes.io/docs/concepts/workloads/controllers/deployment/
    #CNDT2019
    #OSDT2019
    #RoomE
    #1E3

    View Slide

  26. Kubernetesのアーキテクチャ

    node2

    node1

    kubectl

    etcd

    kube-

    apiserver

    kube-

    scheduler

    kube-

    controller-

    manager

    kube-proxy

    kubelet

    kube-proxy

    kubelet

    Docker etc...

    Docker etc...

    ・・・
    ※https://kubernetes.io/docs/concepts/architecture/cloud-controller/
    #CNDT2019
    #OSDT2019
    #RoomE
    #1E3

    View Slide

  27. カスタムリソース

    ● 独自のリソースを追加できる

    ○ CustomResourceDefinition

    ○ API server aggrigation

    ● バリデーションやその他メタ情報を定
    義

    ● CRDで定義したカスタムリソースに対
    するCRUDが可能になる

    ※https://kubernetes.io/docs/concepts/extend-kubernetes/api-extension/custom-resources/
    #CNDT2019
    #OSDT2019
    #RoomE
    #1E3

    View Slide

  28. カスタムコントローラー

    ● 独自のコントローラーを追加できる

    ● 既存のリソースやカスタムリソースの変更を検知し、理想状態にな
    るよう調整する

    ● カスタムコントローラーのDockerイメージをDeploymentでK8sクラス
    ター上にデプロイする

    ※https://kubernetes.io/docs/concepts/extend-kubernetes/api-extension/custom-resources/

    View Slide

  29. Kubernetes nativeなKnative

    ※https://github.com/knative/serving/tree/master/config
    ● Knativeもカスタムリソースとカスタムコント
    ローラーで構成されている

    ● KnativeのインストールはCRD(左図青枠が
    knative/servingのもの)に加え、カスタムコ
    ントローラーのDeploymentなど必要なコン
    ポーネントのyamlをkubectl applyすることが
    主な作業になる

    ● K8s nativeな手法でプラットフォームを拡張
    する

    #CNDT2019
    #OSDT2019
    #RoomE
    #1E3

    View Slide

  30. 今日のお話

    ● Knativeの概要

    ● KnativeとKuberentes

    ● KubernetesとServerless

    ● Knativeのユースケース

    ● まとめ

    ● 参考資料

    #CNDT2019
    #OSDT2019
    #RoomE
    #1E3

    View Slide

  31. サーバーレスとは

    ※https://martinfowler.com/articles/serverless.html
    ● サーバーレスアーキテクチャは、サードパー
    ティのBaaSサービスを組み込んだ、または
    FaaSプラットフォーム上の管理された一時的
    なコンテナで実行されるカスタムコードを含
    むアプリケーション設計

    ● ベンダー依存と比較的未成熟なサービスサ
    ポートと引き換えに運用コスト、複雑性、エン
    ジニアリングリードタイムを低減

    #CNDT2019
    #OSDT2019
    #RoomE
    #1E3

    View Slide

  32. サーバーレスとは

    ※https://medium.com/@PaulDJohnston/serverless-is-a-doctrine-not-a-technology-4193ccb66cfc
    ● (FaaSなどの)サービス自体はサーバーレス
    ではない。どのように構築されるかのアプ
    ローチがサーバーレスであり、サーバーレ
    スアプリケーションを生み出す。

    ● サーバーレスアプリケーションは、アプリ
    ケーションのライフサイクル全体にわたって
    最大のビジネス価値を提供するものであ
    り、データストレージの費用を除いて、誰も
    使用していないときに実行する必要はない
    というもの


    View Slide

  33. サーバーレスとは

    ※https://github.com/cncf/wg-serverless/tree/master/whitepapers/serverless-overview
    ● サーバー管理を必要としないアプリケーション
    を構築および実行するという概念

    ● 必要とされている正確な需要に応じて実行、
    拡張、請求を行うデプロイモデル

    ● サーバーレスコンピューティングの利用者は、
    サーバーのプロビジョニング、メンテナンス、
    アップデート、拡張、キャパシティプランニング
    に時間とリソースを費やす必要がなくなる

    ● 開発者がよりアプリケーションのビジネスロ
    ジック開発に集中できるようになる

    ● 運用者がよりビジネスクリティカルなタスクに
    集中できる


    View Slide

  34. Kubernetesとサーバーレス

    ※https://github.com/knative/serving/blob/master/docs/spec/motivation.md
    ● Knativeはステートレス、プロセススケールア
    ウトモデル、アプリケーションレベルのリクエ
    ストトラフィック駆動をサーバーレスワーク
    ロードを捉える

    ● それらのうちK8s自体で基本的なパーツは
    提供している

    ● 共通インフラの自動化を一層推進するため
    の抽象度の高いパーツを標準化することで
    「yamlをkubectlで更新」より使いやすいツー
    ルキットを提供できるはず

    #CNDT2019
    #OSDT2019
    #RoomE
    #1E3

    View Slide

  35. Knativeとは?

    ● Kubernetesのリソースを抽象化する

    ○ 開発者から見てよりシンプルに

    ● 独自のPaaS/FaaSを構築するためのパーツを提供

    ○ Serving、Build、Eventingから構成される

    ● よくあるが難しい課題を解決

    ○ コンテナのデプロイ

    ○ ソースコードからURLでアクセスできるアプリケーションへ

    ○ ブルー/グリーンデプロイを伴うルーティングとトラフィック管理

    ○ オートスケーリングと需要に基づくワークロードのサイズ設定

    ○ 実行中のサービスをイベントエコシステムに結び付ける

    ※https://github.com/knative/docs
    開発者・運用者がよりビジネス価値に集中できるプラットフォームを構築する


    View Slide

  36. Knativeによるプラットフォームの拡張

    ※https://github.com/knative/docs/tree/master/docs
    Kubernetes

    Istio or Gloo

    Serving
 Build
 Eventing

    Platform

    Gateway

    Primitives

    GitLab Serverless
 Your Own!

    Pivotal Function
    Service

    OpenFaaS functions
 Cloud Run

    Knative Lambda
    Runtimes

    Products


    View Slide

  37. 今日のお話

    ● Knativeの概要

    ● KnativeとKuberentes

    ● KubernetesとServerless

    ● Knativeのユースケース

    ● まとめ

    ● 参考資料

    #CNDT2019
    #OSDT2019
    #RoomE
    #1E3

    View Slide

  38. ユースケース① コンテナのデプロイ

    ※https://github.com/toshi0607/CNDT2019-Knative/tree/master/usecase1
    ● 課題

    ○ URLでアクセスできるサービスをより楽に管理したい

    ○ Deployment、Service…

    ● knative/serving

    ○ Deployment、Service(K8s)リソースなどが抽象化されたService(Knative)リ
    ソースを適用してURLアクセスできるアプリケーションを楽にデプロイ

    ● Demo

    ○ TARGET環境変数にセットされた文字列を使ってHello worldを出力するアプリ
    ケーションをService(Knative)リソースの適用でデプロイ

    #CNDT2019
    #OSDT2019
    #RoomE
    #1E3

    View Slide

  39. ユースケース① コンテナのデプロイ

    Deployment
 k8s Service

    ReplicaSet

    Pod

    #CNDT2019
    #OSDT2019
    #RoomE
    #1E3

    View Slide

  40. ユースケース② オートスケール

    ※https://github.com/toshi0607/CNDT2019-Knative/tree/master/usecase2
    ● 課題

    ○ リクエスト数に応じてオートスケールさせたい

    ○ スケール具合を可視化しながら調整したい

    ● knative/serving

    ○ Pod毎の並列リクエスト数を制御・設定

    ■ K8sのメモリベースのHPA(Horizontal Pod Autoscaler)に変更でき、カスタ
    ムメトリクス対応も目標の1つとされている

    ○ servingのReleasesにモニタリング系のyamlも含まれており、メトリクス、ログ、ト
    レースそれぞれ選択肢がある

    ■ kubectl apply --filename
    https://github.com/knative/serving/releases/download/v0.7.0/monitoring.yaml 

    ● Demo


    View Slide

  41. ユースケース② オートスケール

    ※https://github.com/knative/docs/blob/master/docs/serving/configuring-the-autoscaler.md
    ● autoscalerの設定はConfigMapとして管理さ
    れている

    ● knative/servingのインストール(kubectl
    apply)時に適用するyamlにこのデフォルト設
    定が含まれる

    ● Serviceリソースの
    spec.template.metadata.annotationsで設定
    できるものもあるが詳細はConfigMapを変更
    する


    View Slide

  42. ユースケース③ トラフィック分割

    ※https://github.com/toshi0607/CNDT2019-Knative/tree/master/usecase3
    ● 課題

    ○ 新実装へのトラフィックを徐々に増やし、影響を見ながら安全にデプロイしたい

    ● knative/serving

    ○ Routeを利用したブルーグリーンデプロイ

    ● Demo

    ○ Hello Worldアプリケーションに設定するTARGET環境変数を“blue”から
    “green”に変更(2つのRevisionを作成)

    ○ “green”のRevisionへのトラフィックを0 -> 50 -> 100%と大きくしていく

    #CNDT2019
    #OSDT2019
    #RoomE
    #1E3

    View Slide

  43. ユースケース④ イベントエコシステム

    ※https://github.com/knative/docs/tree/master/docs/eventing/samples/gcp-pubsub-source
    ● 課題

    ○ 特定のイベントが発生したときに処理を実行したい

    ● knative/eventing

    ○ イベントをServiceリソースへのリクエストに変換して処理を実行する

    ● Demo

    ○ Google Cloud PubSubをイベントソースとして利用

    ○ 必要な権限は事前に準備済み

    ■ eventing-contribのgcppubsub関連のリソースをapply

    ■ pubsub.editor権限付きservice accountを作成

    ■ service accountのJSONファイルからSecretリソース作成

    ○ 受け取ったイベントをフォーマットして出力するアプリケーション
 #CNDT2019
    #OSDT2019
    #RoomE
    #1E3

    View Slide

  44. ユースケース④ イベントエコシステム

    ※https://cloudevents.io/
    #CNDT2019
    #OSDT2019
    #RoomE
    #1E3

    View Slide

  45. ユースケース⑤ ビルドパイプライン

    ● 課題

    ○ CI/CDもK8sの世界で済ませたい

    ○ ビルドパイプラインを共有したい

    ● knative/build -> tektoncd/pipeline

    ○ K8sのリソースでビルドパイプラインを定義する

    ○ テンプレート化できるので再利用できる

    ※https://github.com/tektoncd/pipeline
    #CNDT2019
    #OSDT2019
    #RoomE
    #1E3

    View Slide

  46. ユースケース⑤ ビルドパイプライン

    Pipeline

    Task

    Task

    PipelineResource(input)

    PipelineResource(output)

    PipelineResource(input)

    Pipeline

    Run

    Step
 Step

    Step
 Step

    ※https://github.com/tektoncd/pipeline

    View Slide

  47. ユースケース⑥ FaaS イベントpull型

    ※https://github.com/triggermesh/knative-lambda-runtime
    ● 課題

    ○ イベントドリブンな関数をシュッとデプロイしたい

    ● knative/serving + knative/build (BuildTemplate)

    ○ triggermesh/knative-lambda-runtimeを利用するとユーザーはAWS Lambda互
    換のfunctionだけ書いたらデプロイできるプラットフォームを構築できる

    ○ Serviceでリクエストを受けfunctionに受け渡す処理(aws-custom-runtime、
    bootstrap)はBuildTemplateを活用してイメージビルド時に埋め込む

    #CNDT2019
    #OSDT2019
    #RoomE
    #1E3

    View Slide

  48. AWS Lambdaのfunction(Go)

    ※https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/go-programming-model-handler-types.html
    ● Handler: イベントを引数にそれをハンドリングするメイン処理を書く

    ● lambda.Start: rpcサーバーにhandlerを登録し、rpcサーバーを起動する


    View Slide

  49. aws/aws-lambda-go

    AWS LambdaとRuntime Interface

    ※https://github.com/aws/aws-lambda-go
    Amazon API
    Gateway

    lambda.start(handler)

    container

    rpc server

    AWS Lambda Runtime 

    AWS Lambda Runtimeはrpcサーバーを含むコンテナを起動し、イベントを渡す

    request

    proxy

    event

    event

    http

    request

    S3

    event

    SQS

    event

    DynamoDB

    stream

    event


    View Slide

  50. AWS LambdaとRuntime Interface

    ※https://qiita.com/toshi0607/items/39004c19d7361a837986
    Amazon API
    Gateway

    container

    bootstrap

    AWS Lambda Custom Runtimes 

    bootstrapからRuntime APIにイベントを取得にし行くのでCOBOLも動く

    proxy

    event

    event

    http

    request

    S3

    event

    SQS

    event

    DynamoDB

    stream

    event

    Next Invocation
    API

    Invocation
    Response API

    Invocation Error
    API

    Initialization Error
    API

    response

    event

    error

    error


    View Slide

  51. ユースケース⑥ FaaS イベントpull型

    ※https://github.com/triggermesh/knative-lambda-runtime
    ● aws-custom-runtimeがAWS Runtime Interfaceとタスクキューを実装

    ● bootstrapがイベントを取得し、functionをinvoke

    Route

    Service

    Build

    Build

    Template

    Pod

    aws/aws-lambda-go

    lambda.start(handler)

    tm/aws-custom-runtime

    bootstrap

    Configuratio
    n

    Revision

    get

    event

    exec

    bin

    exec

    bin

    rpc

    Server

    http

    request

    K8s

    request

    #CNDT2019
    #OSDT2019
    #RoomE
    #1E3

    View Slide

  52. BuildTemplateで生成するDockerfile

    ※https://github.com/triggermesh/knative-lambda-runtime/blob/master/go-1.x/buildtemplate.yaml

    View Slide

  53. ユースケース⑦ FaaS イベントpush型

    ※https://github.com/openfaas
    ● 課題

    ○ イベントドリブンな関数をシュッとデプロイしたい

    ● knative/serving + knative/build (BuildTemplate)

    ○ OpenFaaSのwatchdogサーバーを利用するとユーザーはfunctionだけ書いたら
    デプロイできるプラットフォームを構築できる

    ○ Serviceでリクエストを受けfunctionに受け渡す処理(watchdog)は
    BuildTemplateを活用してイメージビルド時に埋め込む

    #CNDT2019
    #OSDT2019
    #RoomE
    #1E3

    View Slide

  54. OpenFaaSのfunction(Go)

    ※https://github.com/openfaas/faas/blob/master/sample-functions/BaseFunctions/golang/handler.go
    functionは標準入力経由でリクエスト・イベント情報を受け取って処理


    View Slide

  55. OpenFaaSのアーキテクチャー

    ※https://docs.openfaas.com/architecture/gateway/
    #CNDT2019
    #OSDT2019
    #RoomE
    #1E3

    View Slide

  56. Watchdogによるfunction制御

    ※https://docs.openfaas.com/architecture/watchdog/
    ● functionの起動、モニタリングを責務とするGoで書かれたサーバー

    ● リクエストを標準入力経由でfunctionのプロセスに渡す

    ● watchdogとして再利用することでプラットフォームのユーザーはビジネスロジック
    (function)の実装に集中できる


    View Slide

  57. ユースケース⑦ FaaS イベントpush型

    リクエストとfunctionのハンドリングにwatchdogを活用

    Route

    Service

    Build

    Build

    Template

    Configuratio
    n

    Revision

    http

    request

    K8s

    #CNDT2019
    #OSDT2019
    #RoomE
    #1E3

    View Slide

  58. watchdogとfunction同梱のDockerfile

    ※https://github.com/openfaas/faas/blob/master/sample-functions/BaseFunctions/golang/Dockerfile

    View Slide

  59. Knativeを使ったFaaS

    ● Serviceでデプロイするのはコンテナなので、functionの実装に
    集中するためにリクエストをfunctionに渡すサーバーを準備す
    る必要がある

    ● サーバーからfunctionを独立させることでサーバーとfunction
    を同梱するイメージテンプレートを準備できる

    ● faas-cliやtmのようにCLIでmanifestとkubectlを意識させないデ
    プロイも実現できる

    ● イベントがcloudeventsに準拠していると各イベント用のライブ
    ラリを各言語で準備する手間も省ける

    #CNDT2019
    #OSDT2019
    #RoomE
    #1E3

    View Slide

  60. ユースケース⑧ コンテナサーバーレス

    ※https://cloud.google.com/run/
    ● 課題

    ○ コンテナをシュッとデプロイしたい

    ● knative/serving + knative/build

    ○ Cloud RunやCloud Run on GKEを利用し、コンテナを手軽にデプロイし、負荷
    に応じてスケールさせることができるプラットフォームを構築する

    #CNDT2019
    #OSDT2019
    #RoomE
    #1E3

    View Slide

  61. ユースケース⑧ コンテナサーバーレス

    ※https://twitter.com/ahmetb/status/1116041166359654400
    ● Cloud Runマネージドサービスもあり、コンテ
    ナを動かすのにK8sの運用をなくす選択肢
    もある

    ● Knative Serving APIと互換のAPIで操作す
    るので操作感も同じ

    ● GCPのコンソールからどちらも同じように状
    態や生成されたRevisionのyamlを確認でき
    る

    #CNDT2019
    #OSDT2019
    #RoomE
    #1E3

    View Slide

  62. 今日のお話

    ● Knativeの概要

    ● KnativeとKuberentes

    ● KubernetesとServerless

    ● Knativeのユースケース

    ● まとめ

    ● 参考資料

    #CNDT2019
    #OSDT2019
    #RoomE
    #1E3

    View Slide

  63. まとめ

    ● KnativeはK8s nativeな方法でK8sプラットフォームを拡張・抽象
    化する

    ● K8s上でサーバーレスを実現する手段の1つがKnativeであり、
    FaaSに限らず課題に応じて開発者の生産性向上、運用者の
    負荷低減のための様々な使い方ができる

    ● FaaSを自分で構築することもできるし、Knativeを利用したプロ
    ダクトを利用することもできる

    #CNDT2019
    #OSDT2019
    #RoomE
    #1E3

    View Slide

  64. 今日のお話

    ● Knativeの概要

    ● KnativeとKuberentes

    ● KubernetesとServerless

    ● Knativeのユースケース

    ● まとめ

    ● 参考資料

    #CNDT2019
    #OSDT2019
    #RoomE
    #1E3

    View Slide

  65. 参考資料 Knative

    ● 公式ドキュメント

    ○ とても整理されていて図も豊富でわかりやすいです

    ○ 主なユースケースのサンプル・解説もある

    ○ https://github.com/knative/docs

    ● 『Getting Started with Knative』

    ○ Pivotalの方が執筆したebookが無料です

    ○ https://content.pivotal.io/ebooks/getting-started-with-knative

    ○ バージョンは古くなってしまったがそれでもユースケースまで載っていて楽しい

    ● 『Knativeの歩き方 KubernetesからServerlessを訪ねて』

    ○ 完全な手前味噌

    ○ https://booth.pm/ja/items/1309468
 #CNDT2019
    #OSDT2019
    #RoomE
    #1E3

    View Slide

  66. ※https://techbookfest.org/event/tbf07
    ● Knative既刊ユースケース + 書き直しの大幅パワーアップ!

    ● Knativeの実装を見ながらK8sのコントローラーを学ぶ新刊

    参考資料 Knative

    #CNDT2019
    #OSDT2019
    #RoomE
    #1E3

    View Slide

  67. 参考資料 Knative

    ● 8/29 ServerlessDays Melbourne 2019

    ○ Build serverless application on the top of Kubernetes

    ● 10/21、22 ServerlessDays Tokyo 2019

    ○ Knativeのハンズオンをする可能性あり

    ○ プロポーザル募集中!

    ■ https://tokyo.serverlessdays.io/

    ● 12/13、14 ServerlessDays Fukuoka 2019

    ○ Knativeで作るDIY FaaSの話をすべく準備します

    #CNDT2019
    #OSDT2019
    #RoomE
    #1E3

    View Slide

  68. ご清聴ありがとうございました!

    Knativeで実現する

    Kubernetes上のサーバーレスアーキテクチャ

    #CNDT2019
    #OSDT2019
    #RoomE
    #1E3

    View Slide