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

サーバレス on Kubernetes/serverless-on-kubernetes

サーバレス on Kubernetes/serverless-on-kubernetes

OCHaCafe Season6 #5の資料です.

oracle4engineer

January 11, 2023
Tweet

More Decks by oracle4engineer

Other Decks in Technology

Transcript

  1. サーバレス on Kubernetes
    イベントドリブンでスケーラブルなワークロードをあなたの⼿に!!
    Takuya Niita
    Oracle Corporation Japan
    Jan 11, 2023
    Oracle Cloud Hangout Cafe Season6 #5

    View full-size slide

  2. Copyright © 2023, Oracle and/or its affiliates.
    2
    1. サーバレスの復習
    2. Kubernetes on サーバレスの実現⼿法
    3. Knative(デモ含)
    4. KEDA(Kubernetes-based Event-Driven Autoscaling) (デモ含)
    5. まとめ
    Agenda

    View full-size slide

  3. Copyright © 2023, Oracle and/or its affiliates.
    3
    ⾃⼰紹介
    仁井⽥ 拓也
    • ⽇本オラクル株式会社
    • ソリューション・アーキテクト本部
    • AppDev/Container/FaaS/(a little)ML…
    • 前職は某SIer
    • Oracle歴/Cloud Native歴︓4年弱
    • ジブリ⼤好き
    • OCHaCafeは10回⽬の登壇(R:9回/P:1回)
    • 初オンサイト…!!!
    @takuya_0301

    View full-size slide

  4. Copyright © 2023, Oracle and/or its affiliates.
    4
    サーバレスの復習
    Oracle Cloud Hangout Cafe 6 #4 – サーバレス on k8s

    View full-size slide

  5. Serverless(サーバレス) とは︖
    広義には・・・
    • クラウドの柔軟なコンピューティング・リソースをサービスとして必要な時に必要な分だけ利⽤
    • 開発者は、サーバー(=インフラストラクチャ)について意識しなくて良い
    • サーバーが存在しないことではなく、サーバーの管理が不要
    • ユーザーに価値を提供することに⼒を注ぐことができる
    「サーバレス=Functions as a Service(FaaS)」として⾒ていきます!!
    • イベントドリブン(あるイベントをトリガーにして)にユーザが指定したアプリケーションコードを実⾏可能にするプラットフォーム
    Ex)OCI Functions、AWS Lambda、Azure Functions、Cloud Functions…
    Copyright © 2023, Oracle and/or its affiliates.
    5
    今⽇は・・・

    View full-size slide

  6. Serverless – Functions as a Service (FaaS)
    Copyright © 2023, Oracle and/or its affiliates.
    Bare Metal Virtual Machine Container Function
    Code
    App Container
    Language Runtime
    Operating System
    Hardware
    Code
    App Container
    Language Runtime
    Operating System
    Code
    App Container
    Code
    … ユーザーの管理するレイヤー
    6

    View full-size slide

  7. Copyright © 2023, Oracle and/or its affiliates.
    7
    1. イベントドリブン
    • 未起動の状態から何らかのイベントをトリガーに
    して処理を起動
    • トリガーとなる要素はAPI呼び出し、外部プログ
    ラムからの実⾏などがある
    2. オートスケール
    • 発⽣したイベントのトラフィック量に合わせてス
    ケールイン、スケールアウトが可能
    • スケールに関する運⽤⾯はFaaSプラットフォーム
    側が⾯倒を⾒る
    サーバレスに必要な2つの要素

    Code
    Code
    Code
    API
    Gateway
    … …
    リクエストの数に応じて
    自動的に”ゼロ”からスケール

    View full-size slide

  8. Copyright © 2023, Oracle and/or its affiliates.
    8
    Kubernetes on サーバレスの実現⼿法
    Oracle Cloud Hangout Cafe 6 #4 – サーバレス on k8s

    View full-size slide

  9. Copyright © 2023, Oracle and/or its affiliates.
    9
    1. イベントドリブン
    • 未起動の状態から何らかのイベントをトリガーに
    して処理を起動
    • トリガーとなる要素はAPI呼び出し、外部プログ
    ラムからの実⾏などがある
    2. オートスケール
    • 発⽣したイベントのトラフィック量に合わせてス
    ケールイン、スケールアウトが可能
    • スケールに関する運⽤⾯はFaaSプラットフォーム
    側が⾯倒を⾒る
    サーバレスに必要な2つの要素

    Code
    Code
    Code
    API
    Gateway
    … …
    リクエストの数に応じて
    自動的に”ゼロ”からスケール

    View full-size slide

  10. Copyright © 2023, Oracle and/or its affiliates.
    10
    オートスケール
    • Podの⽔平スケール(Horizontal Pod Autoscaler)
    • Podの垂直スケール(Vertical Pod Autoscaler)
    • Nodeの⽔平スケール(Cluster Autoscaler)
    資料︓https://onl.bz/Fy6swNv
    動画︓https://youtu.be/NlUQEgHKL8o
    サーバレスを実現する要素の⼀つ「オートスケール」は既にある程度備わっていそう・・・
    (※後述しますが、サーバレス on Kubernetesを実現するプロダクトでは独⾃のオートスケールを実装してる場合もあります)
    Kubernetesの重要な機能の⼀つ・・・

    View full-size slide

  11. Copyright © 2023, Oracle and/or its affiliates.
    11
    1. イベントドリブン
    • 未起動の状態から何らかのイベントをトリガーに
    して処理を起動
    • トリガーとなる要素はAPI呼び出し、外部プログ
    ラムからの実⾏などがある
    2. オートスケール
    • 発⽣したイベントのトラフィック量に合わせてス
    ケールイン、スケールアウトが可能
    • スケールに関する運⽤⾯はFaaSプラットフォーム
    側が⾯倒を⾒る
    サーバレスに必要な2つの要素

    Code
    Code
    Code
    API
    Gateway
    … …
    リクエストの数に応じて
    自動的に”ゼロ”からスケール

    View full-size slide

  12. Copyright © 2023, Oracle and/or its affiliates.
    12
    宣⾔的オペレーション
    Kubernetesが実現するオペレーションのコンセプト
    • Manifestに定義された内容を「あるべき状態」と
    し、Controller (Operator)に実装された
    Reconciliation Loopにより、今の状態を「あるべ
    き状態」に収束させていく
    Reconciliation Loop
    • 宣⾔的オペレーションを実現する仕組み
    • Manifestに定義された内容を「正」とし、今の
    状態を「正」に収束させていくループ
    KubernetesでのPod(コンテナ)の起動
    Observe
    Analyze
    Act
    spec.replicas=3
    Podが⼀つ⾜りない・・・
    Podを⼀つ増やす!!
    Podの起動

    View full-size slide

  13. Copyright © 2023, Oracle and/or its affiliates.
    13
    エッジドリブントリガー
    • 状態が変化したイベントに応じて処理を実⾏
    レベルドリブントリガー
    • 現在の状態に応じて処理を実⾏
    Kubernetesに標準で備わっているイベントドリブン
    +1
    +3 -3
    -1 1
    2 2
    1
    これはあくまでもKubernetes内部でのイベントドリブン・・・
    外部からの呼び出しには対応できない…??
    Controllerが落ちてもいいように
    「現在の状態」も一緒に保持
    4

    View full-size slide

  14. Copyright © 2023, Oracle and/or its affiliates.
    14
    Reconciliation Loopを外部要因に対して⾏えば「イベントドリブン」が可能・・・︖︖
    もう⼀度Reconciliation Loopについて思いを馳せる・・・
    Observe
    Analyze
    Act
    何かイベントが
    起こった…!!
    どんなイベントだろう・・・??
    イベントに合わせて
    アプリを起動…!!

    View full-size slide

  15. Copyright © 2023, Oracle and/or its affiliates.
    15
    Reconciliation Loopを外部要因に対して⾏えば「イベントドリブン」が可能・・・︖︖
    もう⼀度Reconciliation Loopについて思いを馳せる・・・
    Observe
    Analyze
    Act
    何かイベントが
    起こった…!!
    どんなイベントだろう・・・??
    イベントに合わせて
    アプリを起動…!!
    カスタムリソース + Controller(Operator)があれば、
    イベントドリブンが実現できる??

    View full-size slide

  16. Copyright © 2023, Oracle and/or its affiliates.
    16
    サーバレス on Kubernetes(=カスタムリソースの塊で実現)
    • Kubernetesの標準コンポーネント(Pod,ReplicaSet,Deployment…)の上にサーバレス on Kubernetesの独⾃
    コンポーネント(カスタムリソース)を構成
    • カスタムリソースに対するコントローラーと協業することによって「サーバレス(Functions as a Service)」に近しい機構
    を実現
    サーバレス on Kubernetes
    CR1
    CR2
    CR3
    の世界
    サーバレス on Kubernetesの世界

    View full-size slide

  17. Copyright © 2023, Oracle and/or its affiliates.
    17
    Kubernetes上で⼀つのアプリケーションを動作させるには・・・
    もう少しサーバレス on Kubernetesに踏み込む・・・
    割と定義するものがたくさんある・・・︖︖

    View full-size slide

  18. Copyright © 2023, Oracle and/or its affiliates.
    18
    サーバレス on Kubernetesでは・・・
    サーバレス on Kubernetesで最低限applyすればよいもの
    これをapplyするだけでPodもDeploymentもServiceもIngressもできてしまう!!
    Knativeの例

    View full-size slide

  19. Copyright © 2023, Oracle and/or its affiliates.
    19
    Kubernetesで必要な環境構築を⾃動化
    • Pod/ReplicaSet/Deployment/Service/Ingre
    ss…などを⾃動的に⽣成
    • Kubernetesを意識しなくてもアプリケーションを動
    かすことが可能
    さらに・・・
    • ゼロスケールからのイベントドリブンなワークロードの
    実⾏
    • リクエストに応じたオートスケール
    • B/GデプロイやCanary Releaseもネイティブに提供
    サーバレス on Kubernetesのメリット
    CR
    俺に
    任せろ!!
    自動生成
    Kubernetesの下廻りを気にしなくても良い!!
    これこそが「サーバレス on Kubernetes」の真髄!!

    View full-size slide

  20. Copyright © 2023, Oracle and/or its affiliates.
    20
    サーバレス on Kubernetes
    • HTTP/gRPCなどのAPIリクエストに応じた起動や
    cron、ベンダーサービスをトリガーとする起動も可能
    • ゼロスケールから起動可能
    • 起動対象となるのは「コンテナ」
    • Kubernetesのインフラはある程度抽象化されてい
    るが、多少意識する必要はある・・・
    FaaSプラットフォーム
    • イベントに応じて起動(Object Storage、各ベン
    ダーのイベント・ハブ・サービスなど)
    • ゼロスケールから起動可能
    • 起動対象となるのは「アプリケーションコード」
    • インフラは全く意識しない
    結局、サーバレス on KubernetesはFaaSなのか??
    サーバレス on Kubernetes ≠ FaaS
    だけど
    多少なりともFaaSの仕組みを持っているとは⾔える
    Developers run and manage application code with functions that are triggered by events or HTTP requests.
    Developers deploy small units of code to the FaaS, which are executed as needed as discrete actions,
    scaling without the need to manage servers or any other underlying infrastructure.
    出典:CNCF Serverless Whitepaper v1.0(https://github.com/cncf/wg-serverless/tree/master/whitepapers/serverless-overview)
    この辺を
    満たさない…??

    View full-size slide

  21. Copyright © 2023, Oracle and/or its affiliates.
    21
    OCI Functionsとサーバレス on KubernetesのPros/Cons
    OCI Functions
    Pros
    • OCI上のAPIGW/イベントハブ系のサービスとネイティ
    ブに連携可能
    • Ex1)API Gateway => OCI Functions
    • Ex2)OCI Events => OCI Functions
    • インフラは全てOracle管理
    Cons
    • リクエスト : コンテナインスタンス = 1 : 1
    • トリガーは原則ベンダーが指定しているものに限定
    サーバレス on Kubernetes
    Pros
    • 豊富なアダプターを利⽤してトリガーが可能
    • RedisやRDBMSへのクエリ結果などをトリガーにすること
    も可能(アダプターの⾃作も可能)
    • リクエスト : コンテナインスタンスが柔軟に設定可能
    Cons
    • インフラはKubernetesのため、ユーザ管理が必要
    • トラブルシューティングの際にはKubernetesの知識が必要
    • クラウドベンダー上のネイティブサービスをトリガーにサービスを起動/スケールさせたい、手軽にイ
    ベントドリブンでスケーラブルなアプリケーションを構築したい => FaaS
    • 汎用トリガー(RDBMS/Prometheusなど)でサービスを起動/スケールさせたい、柔軟にイベントドリブ
    ンでスケーラブルなアプリケーションを構築したい => サーバレス on Kubernetes

    View full-size slide

  22. Copyright © 2023, Oracle and/or its affiliates.
    22
    コールドスタート問題
    • 未起動からの初回起動時にアプリケーションが起動するまでの待機時間が発⽣するという問題
    • ユーザへのレスポンスのレイテンシが増加
    • サーバレス on Kubernetesでも、FaaSに仕組みが近い以上同様の問題が発⽣
    サーバレス on Kubernetesでの対策は・・・??
    • ゼロスケールにしない(常時1インスタンスは起動しておく状態にする)
    • KnativeやKEDAではゼロスケールをON/OFFするための設定が存在(後述)
    【参考】サーバレス on Kubernetesでのコールドスタート問題

    Code
    API
    Gateway
    FaaSの場合 サーバレス on Kubernetesの場合
    5秒
    5秒

    View full-size slide

  23. Copyright © 2023, Oracle and/or its affiliates.
    23
    Knative
    Oracle Cloud Hangout Cafe 6 #4 – サーバレス on k8s

    View full-size slide

  24. Copyright © 2023, Oracle and/or its affiliates.
    24
    Knative
    • Knative Serving︓最新v1.8.3(2023/1現在)
    • Knative Eventing︓最新v1.7.7(2023/1現在)
    • https://github.com/knative
    • https://knative.dev/docs/
    • “a platform-agnostic solution for
    running serverless deployments.”
    • 2018年にGoogle社が発表したオープンソースソフトウェア
    • 他にもIBM社(RedHat社)、SAP社、Vmware社など
    が参加
    • CNCF Incubating Projectの⼀つ(2021年末に参加)
    • ServingやEventingよりシンプルな仕組みとしてKnative
    Functionsもあるが、本⽇は割愛・・・
    Knative

    View full-size slide

  25. Copyright © 2023, Oracle and/or its affiliates.
    25
    Knative Serving
    • HTTPリクエストベースでのサーバレスワークロードを構
    築するための⼀連のオブジェクト
    • カスタムリソースでは主に以下の定義と制御を実施
    • Service︓ワークロードのライフサイクル全体を管理
    • Route︓トラフィックやルーティングなどの情報を管

    • Configuration︓アプリケーションコードとインフラ
    構成を分離し、ワークロードに必要な構成を管理
    • Revision︓ワークロードのコードや構成内容に応
    じたpoint-in-time-snapshot
    Knative Eventing
    • イベント駆動アーキテクチャを実現するためのAPIの
    コレクション
    • イベントの管理はCloud Events仕様に準拠
    • 主に以下のコンポーネントが存在
    • Source︓イベントの発⽣元と管理
    • Channel/Broker︓Sourceからイベントを収
    集し、サーバレスワークロードに送信
    • Trigger/ Subscriber ︓Channel/Brokerか
    らイベントを受け取りワークロードの起動を管理
    • Sink先はKnative Service、Channel/Broker、
    呼び出し可能なURI
    Knativeを構成するコンポーネント

    View full-size slide

  26. Copyright © 2023, Oracle and/or its affiliates.
    26
    Knative Serving
    • HTTPリクエストベースでのサーバレスワークロードを構
    築するための⼀連のオブジェクト
    • カスタムリソースでは主に以下の定義と制御を実施
    • Service︓ワークロードのライフサイクル全体を管理
    • Route︓トラフィックやルーティングなどの情報を管

    • Configuration︓アプリケーションコードとインフラ
    構成を分離し、ワークロードに必要な構成を管理
    • Revision︓ワークロードのコードや構成内容に応
    じたpoint-in-time-snapshot
    Knative Eventing
    • イベント駆動アーキテクチャを実現するためのAPIの
    コレクション
    • イベントの管理はCloud Events仕様に準拠
    • 主に以下のコンポーネントが存在
    • Source︓イベントの発⽣元と管理
    • Channel/Broker︓Sourceからイベントを収
    集し、サーバレスワークロードに送信
    • Trigger/ Subscriber ︓Channel/Brokerか
    らイベントを受け取りワークロードの起動を管理
    • Sink先はKnative Service、Channel/Broker、
    呼び出し可能なURI
    Knativeを構成するコンポーネント

    View full-size slide

  27. Copyright © 2023, Oracle and/or its affiliates.
    27
    Knative Servingのカスタムリソース
    Knativeの最上位のリソース
    RouteとConfiguration、関連する標
    準リソース(Podなど)を生成
    Revisionを作成するための
    テンプレート情報を保持
    現在のワークロードの状態
    Revisionに対する振り分け情報を保持
    デフォルトでは最新のRevisionに
    100%ルーティング
    Configurationのテンプレートを元に作成
    したワークロードのスナップショット
    作成されたRevisionはImmutable
    新たなバージョンがデプロイされると新
    しくRevisionを作成(更新はしない)
    参考:https://knative.dev/docs/concepts/
    Revision配下に標準
    リソースが紐づく

    View full-size slide

  28. Copyright © 2023, Oracle and/or its affiliates.
    28
    Knative Servingに必要な主な周辺コンポーネント
    • Ingress(Network Layer) => Envoyの導⼊
    • 以下の6つをサポート(環境構築が別途必要)
    • Istio Ingress Gateway
    • Gloo
    • Contour
    • Kourier
    • Emissary-ingress
    • Gateway API(Ingressの後継)
    • DNS構成 => ワークロードのドメイン管理
    • ワークロードのエンドポイントドメインの設定
    • ConfigMapで設定可能
    • cert-manager => ドメインの証明書管理
    Knative Servingの周辺コンポーネント
    動画:
    https://youtu.be/9nN3PsPig2g
    資料:
    https://onl.bz/3Q91Dse

    View full-size slide

  29. Copyright © 2023, Oracle and/or its affiliates.
    29
    Knative Servingの挙動
    Knative Servingのオートスケール(1)
    Knative Pod
    Autoscaler(KPA)
    Podが存在しない
    リクエスト
    キューイング
    スケールアウト
    Activator呼出
    サイドカーとして
    Envoyが置かれる
    Activator
    スケールアウト
    を命令
    リクエスト
    リクエスト
    Knative Pod Autoscaler(KPA)のスケールメトリクスはリクエスト数
    (HPAは原則CPU/メモリ)
    Pod が1個以上

    View full-size slide

  30. Copyright © 2023, Oracle and/or its affiliates.
    30
    KPA(Knative Pod Autoscaler)
    • Knativeでデフォルトで利⽤されるオートスケールの
    仕組み(カスタムリソース)
    • “stable”と”panic”の2つのモードが存在
    • “stable”の場合、リクエスト数に基づき(HPAで
    は通常CPU/メモリ)スケールイン、スケールアウト
    を決定
    • “panic”の場合、スケールインは実施されず、ス
    ケールアウトの判定時間が⾮常に短くなる(急
    激にスケールアウトするために利⽤)
    • 各閾値はService(serving.knative.dev/v1)
    のアノテーションやConfigMapで変更可能
    • 設定をすれば、HPA(Horizontal Pod
    Autoscaler)も利⽤することが可能
    Zero
    Instance(Pod)
    One
    Instance(Pod)
    Many
    Instance(Pod)
    Many
    Requests
    Panic Panic スケールアウト
    One
    Requests
    1までスケール
    アウト
    変化なし スケールイン
    Zero
    Requests
    0のまま 0までスケール
    イン
    0までスケール
    イン
    Knative Servingのオートスケール(2)
    stable
    panic

    View full-size slide

  31. Copyright © 2023, Oracle and/or its affiliates.
    31
    Per Revision(インスタンス毎の設定)
    • Revision(Pod)ごとに設定する⽅法
    • “enable-scale-to-zero: false”の場
    合もしくはHPAを利⽤する場合
    は”min-scale”に設定可能な最⼩数
    は⾃動的に”1”
    • ゼロスケール要否の設定は不可
    ConfigMap(クラスタ全体の設定)
    • ConfigMapに設定する⽅法
    • グローバルに適⽤される
    • インスタンス毎の設定/クラスタ全体
    の設定の両⽅が存在する場合はイ
    ンスタンス毎の設定が優先
    Operator(クラスタ全体の設定)
    • カスタムリソース(CRD)に設定する⽅法
    • グローバルに適⽤される
    • インスタンス毎の設定/クラスタ全体の
    設定の両⽅が存在する場合はインス
    タンス毎の設定が優先
    Knativeにおけるスケール設定
    Operatorを利用して
    インストールした場合

    View full-size slide

  32. Copyright © 2023, Oracle and/or its affiliates.
    32
    Knative Servingのワークロードの実装例(w/ Helidon JAX-RS)
    JAX-RSを利用した
    シンプルなREST APIの実装
    従来通りのREST APIを実装すればOK!!

    View full-size slide

  33. Copyright © 2023, Oracle and/or its affiliates.
    33
    1. ゼロスケールを体感!!
    2. オートスケールを体感!!
    3. トラフィックマネジメントを体感!!
    デモ ー Knative Serving ー
    v1
    v2
    v3
    Route
    v1:30
    v2:40
    v3:30
    Revision
    OCI LB
    OKE
    KService
    Route
    1.ゼロスケール
    2.オートスケール
    KService
    3.トラフィック
    マネジメント

    View full-size slide

  34. Copyright © 2023, Oracle and/or its affiliates.
    34
    Knative Serving
    • HTTPリクエストベースでのサーバレスワークロードを構
    築するための⼀連のオブジェクト
    • カスタムリソースでは主に以下の定義と制御を実施
    • Service︓ワークロードのライフサイクル全体を管理
    • Route︓トラフィックやルーティングなどの情報を管

    • Configuration︓アプリケーションコードとインフラ
    構成を分離し、ワークロードに必要な構成を管理
    • Revision︓ワークロードのコードや構成内容に応
    じたpoint-in-time-snapshot
    Knative Eventing
    • イベント駆動アーキテクチャを実現するためのAPIの
    コレクション
    • イベントの管理はCloud Events仕様に準拠
    • 主に以下のコンポーネントが存在
    • Source︓イベントの発⽣元と管理
    • Channel/Broker︓Sourceからイベントを収
    集し、サーバレスワークロードに送信
    • Trigger/ Subscriber ︓Channel/Brokerか
    らイベントを受け取りワークロードの起動を管理
    • Sink先はKnative Service、Channel/Broker、
    呼び出し可能なURI
    Knativeを構成するコンポーネント

    View full-size slide

  35. Copyright © 2023, Oracle and/or its affiliates.
    35
    利⽤可能なイベントソース(stableの⼀部を記載)
    • PingSource
    • cronでスケジュールしたタイミングで定期的にメッセー
    ジを送信
    • ContainerSource
    • 定期的にカスタムのイベントを送信するコンテナをイベ
    ントソースとする
    • KafkaSource/RabbitMQ
    • メッセージをイベントソースとする
    • ApiServerSource
    • APIサーバから得られるKubernetesイベントをイベント
    ソースとする
    ※他にもSlack、Webhookや各ベンダーサービスをイベント
    ソースとしてサポートするためのサードパーティソースが存在
    Knative Eventingで利⽤可能なイベントソース
    PingSourceのManifest例
    直接ワークロードを
    指定する場合

    View full-size slide

  36. Copyright © 2023, Oracle and/or its affiliates.
    36
    Knative Eventingでのイベント配信パターン(Apache Kafkaトリガーの場合)
    Channel and Subscription
    Broker and Trigger
    source channel
    subscription
    (Knative)
    Service
    (Knative)
    Service
    source
    trigger (Knative)
    Service
    (Knative)
    Service
    subscription
    配信
    配信
    配信
    配信先の
    Channelを指定
    紐づけるchannelと配
    信先のServiceを指定
    配信
    Kafka/NATSが
    利用可能
    配信
    イベントフィルタ
    が設定可能
    フィルター
    フィルター
    • 配信失敗時の再送に対
    応可能
    • 一つのSourceから複数
    のServiceに配信可能
    • 上記メリット + イベン
    トのフィルタリングが
    可能
    =>イベント属性により配
    信先を振り分け可能
    channel
    broker
    subscription
    trigger
    subscription
    Subscribe
    Subscribe

    View full-size slide

  37. Copyright © 2023, Oracle and/or its affiliates.
    37
    Knative Eventingのワークロードの実装例(w/ Helidon JAX-RS)
    JAX-RSを利用したシンプルなREST APIの実装
    Knative Eventingでは以下のインタフェース規定がある
    • Cloud Events 0.3/1.0(推奨)の仕様に準拠すること
    • HTTP Protocol Bindingを介して行うこと => Knative Servingと同様の実装方法でOK!!
    • コンテンツモードはStructure(構造化)モードとBinary(バイナリ)モードのいずれか(後述)
    参考:https://github.com/knative/eventing/blob/main/docs/spec/sources.md#source-event-delivery
    イベントソースが何であっても
    REST APIで実装可能
    =>疎結合にやりとりできる!!

    View full-size slide

  38. Copyright © 2023, Oracle and/or its affiliates.
    38
    Structure(構造化)モード
    • メタデータ(イベント属性)とイベントデータとペイロード
    (HTTP Body)に⼀緒に格納される形式
    • 複数のプロトコルで転送可能
    • Content-Typeは”application/cloudevents+json”
    Binary(バイナリ)モード
    • メタデータ(イベント属性)はHTTPヘッダー、イベントデータ
    はペイロード(HTTP Body)に格納
    • 受信側はCloud Eventsであることを意識する必要なし
    Content-Typeは”ce-datacontenttype”に対応
    【補⾜】Knativeで利⽤可能なコンテンツモード
    参考: https://github.com/cloudevents/spec/blob/main/cloudevents/bindings/http-protocol-binding.md#13-content-modes

    View full-size slide

  39. Copyright © 2023, Oracle and/or its affiliates.
    39
    Streaming(Kafka互換)へのメッセージPushをトリガーにゼロスケール起動!!
    デモ ー Knative Eventing ー
    Revision
    source
    KService
    Streaming
    Route
    OKE
    Subscribe Trigger
    Streamingの認
    証情報を保持
    Knative Eventing Knative Serving

    View full-size slide

  40. Copyright © 2023, Oracle and/or its affiliates.
    40
    Kn CLI
    • ServiceやイベントソースなどのKnativeリソースを迅速に作成可能なインタフェースを提供(Manifest(YAML)ファイル不
    要)
    • インストール⽅法は以下の通り
    • Homebrew(Macの場合)/バイナリ/Goによるビルド/コンテナイメージ
    Serviceの作成
    イベントソース(ContainerSource)の作成
    ※Kafkaイベントソースを管理するためのプラグインやKnative Opeatorを管理するためのプラグインなど複数の拡張プラグ
    インもインストール可能
    その他のKnativeコンポーネント
    $ kn service create ocha-app --env TARGET=“Hello World” --image knative-sample
    $ kn source container create ocha-source --image knative-sample --sink ksvc:ocha-app

    View full-size slide

  41. Copyright © 2023, Oracle and/or its affiliates.
    41
    Knative Serving
    • ゼロスケールの状態から主にHTTPリクエストによって
    ワークロード(Pod)を起動可能
    • 通常のKubernetesワークロードだと意識しなければ
    ならないワークロードのバージョン管理やネットワーク
    周り、スケールなどの管理⾯を省⼒化
    とは⾔え・・・・
    • Network LayerではサービスメッシュやEnvoyの知
    識が求められそう…
    • 実際に運⽤をしていくにはKubernetesの知識がな
    いとやはり厳しい…
    Knative Eventing
    • Kubernetes上で主にPub/Subなどをベースとした
    イベントドリブンなアーキテクチャを実現
    • イベントソースからの配信にchannelやbrokerを利
    ⽤することが可能で、単⼀のイベントから複数の
    ターゲットをトリガー可能
    とは⾔え・・・・
    • channelやbrokerでは実運⽤を考慮するとKafka
    などのメッセージング基盤の利⽤と知識は必須
    • 実際に運⽤をしていくにはKubernetesの知識がな
    いとやはり厳しい…
    Knativeまとめ

    View full-size slide

  42. Copyright © 2023, Oracle and/or its affiliates.
    42
    KEDA(Kubernetes-based Event-Driven Autoscaling)
    Oracle Cloud Hangout Cafe 6 #4 – サーバレス on k8s

    View full-size slide

  43. Copyright © 2023, Oracle and/or its affiliates.
    43
    KEDA
    • 最新v2.9.1(2023/1現在)
    • https://keda.sh/
    • https://github.com/kedacore/keda
    • アプリケーションの⾃動スケーリングのシンプル化を⽬
    指した軽量コンポーネント
    • ⾃動スケーリングはHPA(Horizontal Pod
    Autoscaler)を利⽤
    • Microsoft社とRedHat社が開発を主導している
    オープンソースソフトウェア
    • CNCF Incubating Projectの⼀つ(2020年に参
    加)
    • アーキテクチャとしてはKnativeよりもシンプル
    • Knativeとの併⽤も可能
    KEDA(Kubernetes-based Event-Driven Autoscaling)

    View full-size slide

  44. Copyright © 2023, Oracle and/or its affiliates.
    44
    Scaled Objects(Scaled Job)
    • ワークロードのスケーリング定義とそのトリガーを定義し
    たカスタムリソース
    • Kubernetes Jobをトリガーすることも可能
    Scaler
    • サーバレスワークロードをスケールする判断元となるリ
    ソース(スケールのトリガー)
    • さまざまなサービスに対応(後述)
    Controller
    • keda-operatorと呼ばれるKEDAのOperator
    • ドキュメントではエージェントと記載
    Metrics adapter
    • KEDAが公開するメトリクスサーバ
    • ScalerのメトリクスがHPAに公開され、スケールが決定
    KEDAのコンポーネント
    参考:https://keda.sh/docs/2.7/concepts/

    View full-size slide

  45. Copyright © 2023, Oracle and/or its affiliates.
    45
    Scaled Objects
    • https://keda.sh/docs/2.9/scalers/で公開
    (2023/1 時点で59のScalerが存在)
    • Apache Kafka/ Elasticsearch/AWS
    CloudWatch/Cassandra/Azure Blob
    Storage/Cron/PostgreSQL…
    • それぞれのScalerによって”Trigger
    Specification”がある
    • ”Trigger Specification”はScaled
    Objects(Scaled Job)に定義
    • Scalerに対する認証情報
    は”(Cluster)TriggerAuthentication”とい
    うカスタムリソースとSecretに定義
    Scaled Objects
    KafkaをScalerとする場合
    Trigger Specification

    View full-size slide

  46. Copyright © 2023, Oracle and/or its affiliates.
    46
    KEDAのワークロードの実装例(w/ Helidon Reactive Messaging and Kafka)
    受信側は自分でトリガー
    に対してイベントを取得
    ワークロード側はイベントソースに合わせて
    実装する必要がある…(密結合)
    =>でも、仕組みはシンプル!!

    View full-size slide

  47. Copyright © 2023, Oracle and/or its affiliates.
    47
    HPA KEDA
    KEDAとHPAそのものの併⽤
    外部リソース(キューサイズなど)によるスケール
    原則としてCPU/メモリによるスケール
    HPAによるスケールとKEDAによるスケールを併用することは非推奨。
    (CPU/メモリによるHPAとVPAの併用が非推奨であるのと考え方は同じ…??)
    スケールのメトリクスが異なるため、想定外のスケール挙動となる可能性あり。
    FAQにも記載あり。
    https://keda.sh/docs/2.5/faq/#dont-combine-scaledobject-with-horizontal-pod-autoscaler-hpa
    “We recommend not to combine using KEDA’s ScaledObject with a Horizontal Pod Autoscaler (HPA) to scale the same workload.”

    View full-size slide

  48. Copyright © 2023, Oracle and/or its affiliates.
    48
    ゼロスケール設定
    • Scaled Objectにスケールの範囲やスケール時の閾値を定

    ※HPAそのものでゼロスケールを実施するには、Feature Gate
    の”HPAScaleToZero”を有効化する必要がある
    ※現時点ではAlphaのため、意図的にFeature Gateを有効
    化しないと使えない
    KEDAにおけるスケール設定
    KEDAでは”minReplicaCount”を
    ”0”に設定すればゼロスケール可能

    View full-size slide

  49. Copyright © 2023, Oracle and/or its affiliates.
    49
    eventing-autoscaler-keda
    • Knative-sandboxプロジェクトの⼀つ(まだアルファ版)
    • https://github.com/knative-
    sandbox/eventing-autoscaler-keda
    • レポジトリの中⾝はKubernetes Operator
    • Knative Eventingのイベントソース(Source or
    Channel(Broker))を作成するとOperatorが
    Scaled Objectを作成
    • スケール対象となるのはイベントソース(≠ワーク
    ロード)
    • 現時点(2023/1時点)ではKafkaSourceのみが正式
    サポート
    • RabbitMQとRedisStreamSourceも実験的に
    サポート
    Knative Eventing Integration(Knative Event Source Autoscaling)
    (Knative)
    Service
    Kafka
    Source
    Cloud
    Events
    Scale
    Scale
    check
    metrics
    consume
    KEDAを利用して
    イベントソースを
    スケール

    View full-size slide

  50. Copyright © 2023, Oracle and/or its affiliates.
    50
    Streaming(Kafka互換)へのメッセージPushをトリガーにゼロスケール起動!!
    デモ
    Scaled
    Object
    (Kafka)
    OKE
    Check metrics Trigger
    Streamingの認
    証情報を保持
    Scale
    Streaming
    Subscribe
    ここがKnative
    Eventingとは異なる!!

    View full-size slide

  51. Copyright © 2023, Oracle and/or its affiliates.
    51
    KEDAの特徴
    • Kubernetesでのイベントドリブンアーキテクチャを容易に実現可能
    • Knativeと同様にトリガーに設定可能なサービスはクラウドサービス、サードパーティサービス含めて豊富
    • KnativeとのIntegrationでKnative Eventingを補強することも可能
    • イベントソースとワークロード間はKnativeと⽐較すると密結合だが、仕組みはシンプル
    とは⾔え・・・・
    • HPAを利⽤していることもあり、Kubernetes標準のオートスケールの知識は必要な場⾯が多そう
    • 実際に運⽤をしていくにはKubernetesの知識がないとやはり厳しい…
    KEDAまとめ

    View full-size slide

  52. Copyright © 2023, Oracle and/or its affiliates.
    52
    まとめ
    Oracle Cloud Hangout Cafe 6 #4 – サーバレス on k8s

    View full-size slide

  53. Copyright © 2023, Oracle and/or its affiliates.
    53
    サーバレス on Kubernetes
    • Kubernetesの下廻りのコンポーネントを意識することなく、ワークロードを実⾏可能
    • 厳密にはFaaSそのものではないものの、FaaSに近い環境をKubernetes上に構築可能
    • サーバレス on Kubernetesはカスタムリソース(CRD)とOperatorの組み合わせで実現できる
    Knative
    • HTTPリクエストベースでサーバレスワークロードを実⾏するKnative Servingとイベントドリブンアーキテクチャを実現する
    Knative Eventingという2つのコンポーネントが存在
    • Knative Servingでは、Knative Pod Autosaler(KPA)という独⾃のオートスケールの仕組みを実装
    • Knative Eventingでは、brokerやchannelを利⽤し、より⾼度なイベントドリブンアーキテクチャの構築が可能
    KEDA
    • 主にHPA(Horizontal Pod Autoscaler)とトリガーだけでイベントドリブンアーキテクチャを実現するシンプルな構成
    • Knative Eventingとの連携も可能(まだアルファ版)
    まとめ(1)

    View full-size slide

  54. Copyright © 2023, Oracle and/or its affiliates.
    54
    HPAで外部メトリクス(HTTPリクエスト数やキューサ
    イズなど)を扱う場合・・・
    • External Metricsという任意のメトリクスを取得する
    仕組みを構築する必要がある
    • メトリクスを取得するためのAPI Serviceという
    API Serverを拡張する仕組みが必要
    • 結構難しい・・・
    • HPAでゼロスケールするにはFeature Gateの有効
    化が必要・・・
    • マネージドサービスだと・・・
    Knative/KEDAなら・・・
    • それぞれのカスタムリソース(CRD)とOperatorが⾯
    倒を⾒てくれる!!
    • インストールするだけで、KafkaやMySQLや
    ObjectStorageなどなどをトリガーにしてスケー
    ルできる!!
    • ゼロスケールもお⼿のもの!!
    • ゼロスケールが不要であれば、それぞれの設定
    で容易にOn/Offができる!!
    まとめ(2) – HPAでのExternal Metricsの代替としての利⽤ –
    サーバレス on Kubernetesの本当のメリットは・・・
    オートスケールをする際に手軽に外部リソースのメトリクスを元にスケールできることかも…!!

    View full-size slide

  55. Copyright © 2023, Oracle and/or its affiliates.
    55
    Kubeless
    • https://github.com/vmware-archive/kubeless
    • 最新v1.0.8(2023/1現在)
    • 開発元のVmware社が2022/2時点でメンテナン
    スを⾏わない旨のアナウンス
    • 2022/11にレポジトリもRead-Onlyに
    • KafkaとHTTPをイベントトリガーとして利⽤可能
    • Serverless Frameworkもサポート
    • 専⽤のUIもあり
    おまけ・・・
    OpenFaaS
    • https://www.openfaas.com/
    • https://github.com/openfaas
    • 最新v0.25.3(2023/1現在)
    • Docker SwarmとKubernetesで利⽤可能
    • OpenFaaS Proという商⽤版もあり
    • イベントソースとしてはHTTP、Kafka、MQTT、
    Cloud Eventsなどをサポート
    • faas-cliという専⽤のCLIが存在

    View full-size slide

  56. Copyright © 2023, Oracle and/or its affiliates.
    56
    Knative
    • https://knative.dev/docs/
    • https://github.com/knative/docs
    KEDA
    • https://keda.sh/
    • https://github.com/kedacore/keda
    書籍
    • Knative in Action︓https://www.manning.com/books/knative-in-action
    • Knative Cookbook︓https://developers.redhat.com/e-books/knative-cookbook
    Event-driven autoscaling through KEDA and Knative Integration 参考資料&動画
    • https://www.youtube.com/watch?v=wrlIoV5DCpY&ab_channel=RedHatDeveloper
    • https://www.slideshare.net/RedHatDevelopers/eventdriven-autoscaling-through-keda-and-knative-
    integration-devnation-tech-talk
    参考資料&Special Thanks!!

    View full-size slide

  57. Thank you!!
    Copyright © 2023, Oracle and/or its affiliates.
    57

    View full-size slide