Slide 1

Slide 1 text

2023. 8. 25 Yudai Ono(@pinkink_yudai) Knative 実践ガイド 30分で分かる #インフラエンジニアBooks

Slide 2

Slide 2 text

自己紹介 レッドハット株式会社 Cloud Specialist Solution Architect 小野 佑大 @pinkink_yudai 1987年2月生まれ 埼玉県出身 @国内通信キャリア 法人向けIaaSのインフラ運用 IoT/5G/Multi-access Edge Computing等の技術戦略・新規事業 @レッドハット株式会社 Red Hat OpenShiftのソリューションアーキテクト Edge Computingを担当 2

Slide 3

Slide 3 text

Knative実践ガイド リリース 出版社:インプレス 発売日:2023年4月11日 Amazon: https://amzn.asia/d/f5ymOhw Knativeは「イベント駆動型アーキテクチャ」のフレームワークとして、サーバーレスなシステム構 築に活用できます。とくに、マイクロサービスを利用したステートレスなアプリケーションを実装す る上で、Knativeのイベント駆動型アーキテクチャのセットは非常に有用で、今後のクラウドネイ ティブな環境において、スケーラビリティの高いアプリケーションを簡単に実装するのに役立ち ます。  本書では、クラウドネイティブに取り組むインフラ技術者が、最新トレンドであるKnativeの知見 を体系的に学習できるように、技術解説に加えて、実務で参考になるユースケースを取り上げ ています。今後のKubernetes環境における必須の技術についての理解度を、本書でもう一歩 前に進めることができます。IT現場でKnativeの採用を検討するうえでも、また、Knativeを使い こなすうえでも、必携のガイドブックの登場です。 3

Slide 4

Slide 4 text

本書の目次 第1章 第2章 第3章 第4章 Knativeによる アプリケーション開発の変化 Knativeを用いた システム構築環境の準備 Knative Servingによる アプリケーション管理 Knative Eventingを用いた システム構築の実践 ひたすら “実践” “把握” と “準備” 4

Slide 5

Slide 5 text

オートスケールなどのKnativeを扱う上 でおさえるべき仕様については、設定毎 の動作差異を確認しながらKnativeの理 解を深掘りできます。 サンプルアプリケーションを通じて Knativeを用いたシステム構築を実践し ながら、Knativeの使い方を学習できま す。 Knativeのコア機能であるServingと Eventingの提供する機能や実装仕様を 体系的に学習できます。 本書の特徴 ネットに情報はたくさんある中で、「Knativeって実際どんな感じで使うの?」というときに、 結構想像力が求められます。これを一から自力で調べていくのはKnativeの実践まで遠い道のりです。 3 設定毎の動作差異 体験 1 基本ハンズオン 体験 2 システム構築 体験 Knativeを実践する上でおさえておきたい TIPSを 3つの体験 を通じて習得できる本 5

Slide 6

Slide 6 text

 Knativeによる  アプリケーション開発の変化 第1章

Slide 7

Slide 7 text

アプリケーションアーキテクチャの変化 機能 UI DB データベース・アクセス システム View Controller 機能振り分け やセッション管 理が複雑化 機能間の依存 関係が複雑化 機能とデータの 依存関係が 複雑化 機能が増えると 保守性が劣化 ユーザ 商品 注文 決済 ユーザ 商品 注文 決済 一部機能の 部分更新 一部機能の み増設 UI 無停止 更新 REST/gRPCなど 切り戻し が容易 Update時の 影響範囲が 明確 障害影響 範囲の極小 機能 DB ユーザ 機能 DB 商品 機能 DB 注文 機能 DB 決済 View 適切な機能分割で 保守性を向上 モノリシック マイクロサービス Delivery Performanceを高めるためには、保守性の高いアプリケーションアーキテクチャが必要になる。 機能毎の改修 が難しい 機能追加に伴う 依存関係の担保 が難しい 変更に伴う 影響が大きい

Slide 8

Slide 8 text

マイクロサービス間の連携 μService μService μService request μService queue μService Message Brokerなど μService 8 ▸ 別のサービスを即時呼び出し ▸ 即時性は高いが、結合度も高い queue 完了通知 完了通知 ▸ キューを介してメッセージ伝達 ▸ 即時性は低いが、結合度も低い request response response 同期型の連携 非同期型の連携

Slide 9

Slide 9 text

SERVING K8sへのアプリのデプロイの抽象化 (APIの簡単デプロイ) EVENTING アプリの非同期連携を抽象化 (簡単データ連携) Knativeは、アプリケーション開発チームが Kubernetesへのマイクロサービスの展開を簡単にする ために Kubernetesを「抽象化する」APIを提供するソフトウェアです。 9 What is Knative ?

Slide 10

Slide 10 text

10 Knativeの提供する6つの体験 source code Build Event Source 簡単 アプリ実装 簡単 アプリデプロイ 簡単 アクセス設定 簡単 オートスケール 簡単 データ連携 Knative Functions (CLIツール) https://xxx… 簡単 トラフィック管理 HTTP requests Rev: 1.5 95 % Rev: 2.0 5 % 同期も非同期も Knativeで 簡単に マイクロサービスをデプロイ!

Slide 11

Slide 11 text

 Knativeを用いた  システム構築環境の準備 第2章

Slide 12

Slide 12 text

Knative Eventing Knative Serving Productpage Details Reviews Ratings Order(注文) Stock(在庫) Delivery(配送) Broker Source 注文 在庫 配送 HTTPS GET POST 12 書籍の情報表示(Bookinfo) 同期型 書籍の注文(Bookorder) 非同期型 イベント GET 本書で使用するサンプルアプリケーション ボタンを押すと 書籍を注文開始

Slide 13

Slide 13 text

スケール モニタリング イベント発生 RUN イベントソースと アプリケーションを 関連付け Serving 13 Eventing Knative Operator Kubernetes (AWS EKS) Tekton Operator Git clone Git clone イメージビ ルド アプリ ビルド イメージビ ルド コンテナ レジストリ (GitLab) Reviews用 Pipeline 汎用 Pipeline BUILD 本書で準備する環境 AWS EKSとTektonを用いて、サンプルアプリケーションのビルドと実行を行える環境を準備します。 元Knative Build

Slide 14

Slide 14 text

本書で使用するGitリポジトリ https://gitlab.com/knative-impress/knative-bookinfo $ tree ./knative-bookinfo . ├── manifest 演習で使用するKubernetesマニフェスト │ ├── common ... SecretやService Accountなどのマニフェスト │ ├── serving ...Knative Serving演習用のマニフェスト │ ├── eventing ...Knative Eventing演習用のマニフェスト │ ├── k8s-deployment ...Kubernetes Deploymentのマニフェスト │ └── tekton ...Tekton関連のマニフェスト │ └── scripts 2章の環境構築自動化スクリプト │ └── src サンプルアプリケーションのソースコード ├── productpage ...BookinfoのProductpage ├── details ...BookinfoのDetails ├── ratings ...BookinfoのRatings ├── reviews ...BookinfoのReviews ├── productpage-v2 ...第4章で使用するProductpageの更新版 ├── order ...BookorderのOrder ├── stock ...BookorderのStock ├── delivery ...BookorderのDelivery ├── cloudeventer ...第4章で追加する試験用アプリケーション └── stock-watcher ...第4章で追加する試験用アプリケーション 14

Slide 15

Slide 15 text

 Knative Servingによる  アプリケーション管理 第3章

Slide 16

Slide 16 text

Knative Serving Service Route Revision Configuration Ingress Ingress Controller Ingress Gateway 各Revisionへのトラフィック振り 分けルール Revisionの管理 Ingress設定 Serviceの更新毎に新規作成 https://productpage.foo.bar へHTTPSアクセス K8s Service K8s Pod Deployment Kubernetes リソースを 抽象化 $ kn service create productpage\ --image productpage:v1 … https://productpage.foo.bar 16 Knative Serviceリソースを宣言 アプリケーションがデプロイされ宛先URLが返却 Knative Servingは、KubernetesのAPIを抽象化して、簡単なマニフェスト / コマンド操作で マイクロサービスのデプロイやネットワーク設定を自動化します。

Slide 17

Slide 17 text

Revision単位のトラフィック制御 Revision Service Configuration reviews-v1 Route Revision reviews-v2 Revision Service Configuration Route Revision 50% 50% 17 reviews-v1 reviews-v2 $ kn service update reviews --traffic v2=100 $ kn service update reviews --traffic v1=50 --traffic v2=50 Revision毎のトラフィックの比率を宣言するだけで、簡単に流量制御が可能です。 Blue Green Deployment Canary Release 100%

Slide 18

Slide 18 text

Route Activator Pod Revision K8s Deployment Pod Queue Proxy Productpage AutoScaler Reconciler Serverless Service Reconciler Replicasを調整 メトリクス報告 Serveモード切り替え Endpointを動的に変更しトラフィック パスへのActivatorの挿入・削除を制御 メトリクス報告 通常時の経路 (Serve Mode = Serve) Podが0台の時の経路 (Serve Mode = Proxy) HTTPリクエストをキューイング HTTPリクエスト 18 Knative Servingのネットワーキング Knative ServingはHTTPリクエストを自身のコンポーネントでキューイングし、 HTTPリクエストに基づくオートスケールをデフォルト適用します。(PodのHTTP負荷の隠蔽)

Slide 19

Slide 19 text

Knative Servingのオートスケールの判断ロジック Pod数 > 0 No Data データがある Panicモードの継続時間が 0 Panicモードの継続時間が 0でない 常にStableウインドウと Panicウインドウの両方で算出する [理想のPod数] ÷ [ReadyのPod数] ≧ panic-threshold-percentage Pod数 = 0 Metrics取得 正常なPod 台数を取得 平均同時 実行数算出 必要なPod 台数を算出 Pod数=1 スケール しない スケール 実行 Stable モードへ Panic モードへ Panic モード継続 19 デフォルト適用されるオートスケールの仕組みや関連パラメータを解説し、オートスケールの動作を深掘りします。

Slide 20

Slide 20 text

 Knative Eventingを用いた  システム構築の実践 第4章

Slide 21

Slide 21 text

新規μService Stock Delivery Order 状態 状態 マイクロサービス間のデータ連携の課題 21 既存ロジックの改修が伴う 正常系の処理の流れ 異常系の処理の流れ 複数のマイクロサービスで処理状態の一貫性を確保する必要がある場合、同期型の連携ではエラー処理が複雑です。 リクエス ト受信 注文受 付を依頼 在庫数を 把握 配送受 付を依頼 Productpage Request受信 注文受付依頼 在庫数把握 新規ロジック 書籍の注文依頼 書籍の 注文完了 配送受付依頼 新規μService Stock Delivery Order リクエス ト受信 注文受 付を依頼 在庫数を 把握 配送受 付を依頼 Productpage Request受信 注文受付依頼 在庫数把握 新規ロジック 書籍の注文依頼 配送受付依頼 エラー応答 ロールバック処理の実装が複雑 状態 状態 状態 状態 状態更新 状態戻し 状態 状態

Slide 22

Slide 22 text

Knative Eventing apiVersion: eventing.knative.dev/v1 kind: Trigger metadata: name: stock-trigger spec: broker: bookinfo-broker filter: attributes: Source: stock subscriber: ref: apiVersion: serving.knative.dev/v1 kind: Service name: delivery 対象イベントを特定 Knative EventingがイベントをHTTP POST Broker Trigger filter A Source Stock Trigger filter B Source Event Source Delivery HTTPリクエストを受信して起動 22 Knative Eventing Event Source連携を抽象化 Knative Eventingは「イベントルーティング」により、マイクロサービス間の非同期連携を実現します。

Slide 23

Slide 23 text

Kafka イベントルーティング方式のメリット イベントを受信し、在庫情報を更新する @app.route("/", methods=["POST"]) def receive_cloudevents(): ①イベントを受信する event = json.loads( request.data ) ②処理ロジック foo = bar(...) ③HTTPレスポンスのヘッダをCloudEvents形式とすると、 Knative Eventingがイベントの発生と判断してくれる … response = make_response( json.dumps(value).encode('utf-8') ) response.headers["Ce-Id"] = str(uuid.uuid4()) response.headers["Ce-Source"] = "dev.knative.serving#stock" … return response, status_code ①受信 ②Logic Stock ③返信 Delivery Event Source固有の実装を隠蔽 イベント送信先をYAMLで定義する宣 言型プログラミング 23 ソースコードからイベントソース固有の実装を省け、シンプルかつ再利用可能なアプリケーションを実装しやすくなります。 Knative Eventing

Slide 24

Slide 24 text

Knative Eventing Kafka イベント送信失敗への対応 Broker Source Broker Source Kafka Sink Dead Letter Sink Brokerの「Dead Letter Sink」の設定を行い、イベントの送信失敗 をエラーイベントとして検知して、所定の処理を実行できます。 Error Event Error Eventの発生を検知 /rollback apiVersion: eventing.knative.dev/v1 kind: Trigger … spec: broker: bookinfo-for-error-broker filter: attributes: knativeerrorcode: "500" knativeerrordest: "http://delivery" subscriber: ref: apiVersion: serving.knative.dev/v1 kind: Service name: stock uri: /rollback apiVersion: eventing.knative.dev/v1 kind: Broker … spec: delivery: deadLetterSink: ref: apiVersion: eventing.knative.dev/v1alpha1 kind: KafkaSink name: rollback backoffDelay: PT1S backoffPolicy: exponential retry: 3 … Stock Delivery 送信失敗 24 イベントの 再送設定 エラーイベン トを特定 エラーイベントの通 知先

Slide 25

Slide 25 text

まとめ

Slide 26

Slide 26 text

26 本書で伝えたかったこと source code Build Event Source 簡単 アプリ実装 簡単 アプリデプロイ 簡単 アクセス設定 簡単 オートスケール 簡単 データ連携 Knative Functions (CLIツール) https://xxx… 簡単 トラフィック管理 HTTP requests Rev: 1.5 95 % Rev: 2.0 5 % KnativeはFaaSを実現するソフトウェア マイクロサービス開発を効率化するソフトウェア

Slide 27

Slide 27 text

最後にちょこっと宣伝. OpenShift Lounge+ 27 簡単なメタバース風の空間でイベントを開催しており、 ひそひそ話も可能です。レッドハットのエンジニアもその場に いますので、気軽にご質問等コミュニケーションいただけます。 OpenShift User Groupでは、定期的にトークセッションや「もくもく勉強会(自己学習イベント)」を開催しています。 無償でKnativeやCI/CD、GitOpsなどを体験できるコンテンツを準備してますので、ぜひご活用ください! https://openshift.connpass.com/

Slide 28

Slide 28 text

Thank you https://www.linkedin.com/in/yudai-ono-5935191a0/ twitter.com/pinkink_yudai https://qiita.com/ydo https://github.com/yd-ono