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

Video

More Decks by oracle4engineer

Other Decks in Technology

Transcript

  1. Copyright © 2023, Oracle and/or its affiliates. 2 1. サーバレスの復習

    2. Kubernetes on サーバレスの実現⼿法 3. Knative(デモ含) 4. KEDA(Kubernetes-based Event-Driven Autoscaling) (デモ含) 5. まとめ Agenda
  2. 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
  3. Serverless(サーバレス) とは︖ 広義には・・・ • クラウドの柔軟なコンピューティング・リソースをサービスとして必要な時に必要な分だけ利⽤ • 開発者は、サーバー(=インフラストラクチャ)について意識しなくて良い • サーバーが存在しないことではなく、サーバーの管理が不要 •

    ユーザーに価値を提供することに⼒を注ぐことができる 「サーバレス=Functions as a Service(FaaS)」として⾒ていきます!! • イベントドリブン(あるイベントをトリガーにして)にユーザが指定したアプリケーションコードを実⾏可能にするプラットフォーム Ex)OCI Functions、AWS Lambda、Azure Functions、Cloud Functions… Copyright © 2023, Oracle and/or its affiliates. 5 今⽇は・・・
  4. 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
  5. Copyright © 2023, Oracle and/or its affiliates. 7 1. イベントドリブン

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

    サーバレスの実現⼿法 Oracle Cloud Hangout Cafe 6 #4 – サーバレス on k8s
  7. Copyright © 2023, Oracle and/or its affiliates. 9 1. イベントドリブン

    • 未起動の状態から何らかのイベントをトリガーに して処理を起動 • トリガーとなる要素はAPI呼び出し、外部プログ ラムからの実⾏などがある 2. オートスケール • 発⽣したイベントのトラフィック量に合わせてス ケールイン、スケールアウトが可能 • スケールに関する運⽤⾯はFaaSプラットフォーム 側が⾯倒を⾒る サーバレスに必要な2つの要素 … Code Code Code API Gateway … … リクエストの数に応じて 自動的に”ゼロ”からスケール
  8. 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の重要な機能の⼀つ・・・
  9. Copyright © 2023, Oracle and/or its affiliates. 11 1. イベントドリブン

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

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

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

    もう⼀度Reconciliation Loopについて思いを馳せる・・・ Observe Analyze Act 何かイベントが 起こった…!! どんなイベントだろう・・・?? イベントに合わせて アプリを起動…!! カスタムリソース + Controller(Operator)があれば、 イベントドリブンが実現できる??
  14. 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の世界
  15. Copyright © 2023, Oracle and/or its affiliates. 18 サーバレス on

    Kubernetesでは・・・ サーバレス on Kubernetesで最低限applyすればよいもの これをapplyするだけでPodもDeploymentもServiceもIngressもできてしまう!! Knativeの例
  16. 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」の真髄!!
  17. 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) この辺を 満たさない…??
  18. 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
  19. 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秒
  20. Copyright © 2023, Oracle and/or its affiliates. 23 Knative Oracle

    Cloud Hangout Cafe 6 #4 – サーバレス on k8s
  21. 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
  22. 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を構成するコンポーネント
  23. 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を構成するコンポーネント
  24. 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配下に標準 リソースが紐づく
  25. 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
  26. 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個以上
  27. 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
  28. 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を利用して インストールした場合
  29. Copyright © 2023, Oracle and/or its affiliates. 32 Knative Servingのワークロードの実装例(w/

    Helidon JAX-RS) JAX-RSを利用した シンプルなREST APIの実装 従来通りのREST APIを実装すればOK!!
  30. 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.トラフィック マネジメント
  31. 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を構成するコンポーネント
  32. Copyright © 2023, Oracle and/or its affiliates. 35 利⽤可能なイベントソース(stableの⼀部を記載) •

    PingSource • cronでスケジュールしたタイミングで定期的にメッセー ジを送信 • ContainerSource • 定期的にカスタムのイベントを送信するコンテナをイベ ントソースとする • KafkaSource/RabbitMQ • メッセージをイベントソースとする • ApiServerSource • APIサーバから得られるKubernetesイベントをイベント ソースとする ※他にもSlack、Webhookや各ベンダーサービスをイベント ソースとしてサポートするためのサードパーティソースが存在 Knative Eventingで利⽤可能なイベントソース PingSourceのManifest例 直接ワークロードを 指定する場合
  33. 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
  34. 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で実装可能 =>疎結合にやりとりできる!!
  35. 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
  36. 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
  37. 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
  38. 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まとめ
  39. Copyright © 2023, Oracle and/or its affiliates. 42 KEDA(Kubernetes-based Event-Driven

    Autoscaling) Oracle Cloud Hangout Cafe 6 #4 – サーバレス on k8s
  40. 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)
  41. 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/
  42. 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
  43. Copyright © 2023, Oracle and/or its affiliates. 46 KEDAのワークロードの実装例(w/ Helidon

    Reactive Messaging and Kafka) 受信側は自分でトリガー に対してイベントを取得 ワークロード側はイベントソースに合わせて 実装する必要がある…(密結合) =>でも、仕組みはシンプル!!
  44. 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.”
  45. Copyright © 2023, Oracle and/or its affiliates. 48 ゼロスケール設定 •

    Scaled Objectにスケールの範囲やスケール時の閾値を定 義 ※HPAそのものでゼロスケールを実施するには、Feature Gate の”HPAScaleToZero”を有効化する必要がある ※現時点ではAlphaのため、意図的にFeature Gateを有効 化しないと使えない KEDAにおけるスケール設定 KEDAでは”minReplicaCount”を ”0”に設定すればゼロスケール可能
  46. 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を利用して イベントソースを スケール
  47. Copyright © 2023, Oracle and/or its affiliates. 50 Streaming(Kafka互換)へのメッセージPushをトリガーにゼロスケール起動!! デモ

    Scaled Object (Kafka) OKE Check metrics Trigger Streamingの認 証情報を保持 Scale Streaming Subscribe ここがKnative Eventingとは異なる!!
  48. Copyright © 2023, Oracle and/or its affiliates. 51 KEDAの特徴 •

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

    Cloud Hangout Cafe 6 #4 – サーバレス on k8s
  50. 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)
  51. 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の本当のメリットは・・・ オートスケールをする際に手軽に外部リソースのメトリクスを元にスケールできることかも…!!
  52. 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が存在
  53. 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!!