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

30分で分かるKnative実践ガイド

 30分で分かるKnative実践ガイド

2023.08.25 インフラエンジニアBooks

書籍「Knative実践ガイド」について30分で解説しました。

Amazon: https://amzn.asia/d/cZJUBhw

Qiita紹介記事: https://qiita.com/ydo/items/3b53ba6945a89a6474c2

小野佑大

August 25, 2023
Tweet

More Decks by 小野佑大

Other Decks in Technology

Transcript

  1. 自己紹介 レッドハット株式会社 Cloud Specialist Solution Architect 小野 佑大 @pinkink_yudai 1987年2月生まれ 埼玉県出身

    @国内通信キャリア 法人向けIaaSのインフラ運用 IoT/5G/Multi-access Edge Computing等の技術戦略・新規事業 @レッドハット株式会社 Red Hat OpenShiftのソリューションアーキテクト Edge Computingを担当 2
  2. Knative実践ガイド リリース 出版社:インプレス 発売日:2023年4月11日 Amazon: https://amzn.asia/d/f5ymOhw Knativeは「イベント駆動型アーキテクチャ」のフレームワークとして、サーバーレスなシステム構 築に活用できます。とくに、マイクロサービスを利用したステートレスなアプリケーションを実装す る上で、Knativeのイベント駆動型アーキテクチャのセットは非常に有用で、今後のクラウドネイ ティブな環境において、スケーラビリティの高いアプリケーションを簡単に実装するのに役立ち

    ます。  本書では、クラウドネイティブに取り組むインフラ技術者が、最新トレンドであるKnativeの知見 を体系的に学習できるように、技術解説に加えて、実務で参考になるユースケースを取り上げ ています。今後のKubernetes環境における必須の技術についての理解度を、本書でもう一歩 前に進めることができます。IT現場でKnativeの採用を検討するうえでも、また、Knativeを使い こなすうえでも、必携のガイドブックの登場です。 3
  3. 本書の目次 第1章 第2章 第3章 第4章 Knativeによる アプリケーション開発の変化 Knativeを用いた システム構築環境の準備 Knative

    Servingによる アプリケーション管理 Knative Eventingを用いた システム構築の実践 ひたすら “実践” “把握” と “準備” 4
  4. オートスケールなどのKnativeを扱う上 でおさえるべき仕様については、設定毎 の動作差異を確認しながらKnativeの理 解を深掘りできます。 サンプルアプリケーションを通じて Knativeを用いたシステム構築を実践し ながら、Knativeの使い方を学習できま す。 Knativeのコア機能であるServingと Eventingの提供する機能や実装仕様を

    体系的に学習できます。 本書の特徴 ネットに情報はたくさんある中で、「Knativeって実際どんな感じで使うの?」というときに、 結構想像力が求められます。これを一から自力で調べていくのはKnativeの実践まで遠い道のりです。 3 設定毎の動作差異 体験 1 基本ハンズオン 体験 2 システム構築 体験 Knativeを実践する上でおさえておきたい TIPSを 3つの体験 を通じて習得できる本 5
  5. アプリケーションアーキテクチャの変化 機能 UI DB データベース・アクセス システム View Controller 機能振り分け やセッション管

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

    μService 8 ▸ 別のサービスを即時呼び出し ▸ 即時性は高いが、結合度も高い queue 完了通知 完了通知 ▸ キューを介してメッセージ伝達 ▸ 即時性は低いが、結合度も低い request response response 同期型の連携 非同期型の連携
  7. 10 Knativeの提供する6つの体験 source code Build Event Source 簡単 アプリ実装 簡単

    アプリデプロイ 簡単 アクセス設定 簡単 オートスケール 簡単 データ連携 Knative Functions (CLIツール) https://xxx… 簡単 トラフィック管理 HTTP requests Rev: 1.5 95 % Rev: 2.0 5 % 同期も非同期も Knativeで 簡単に マイクロサービスをデプロイ!
  8. Knative Eventing Knative Serving Productpage Details Reviews Ratings Order(注文) Stock(在庫)

    Delivery(配送) Broker Source 注文 在庫 配送 HTTPS GET POST 12 書籍の情報表示(Bookinfo) 同期型 書籍の注文(Bookorder) 非同期型 イベント GET 本書で使用するサンプルアプリケーション ボタンを押すと 書籍を注文開始
  9. スケール モニタリング イベント発生 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
  10. 本書で使用する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
  11. 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を抽象化して、簡単なマニフェスト / コマンド操作で マイクロサービスのデプロイやネットワーク設定を自動化します。
  12. 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%
  13. 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負荷の隠蔽)
  14. 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 デフォルト適用されるオートスケールの仕組みや関連パラメータを解説し、オートスケールの動作を深掘りします。
  15. 新規μService Stock Delivery Order 状態 状態 マイクロサービス間のデータ連携の課題 21 既存ロジックの改修が伴う 正常系の処理の流れ

    異常系の処理の流れ 複数のマイクロサービスで処理状態の一貫性を確保する必要がある場合、同期型の連携ではエラー処理が複雑です。 リクエス ト受信 注文受 付を依頼 在庫数を 把握 配送受 付を依頼 Productpage Request受信 注文受付依頼 在庫数把握 新規ロジック 書籍の注文依頼 書籍の 注文完了 配送受付依頼 新規μService Stock Delivery Order リクエス ト受信 注文受 付を依頼 在庫数を 把握 配送受 付を依頼 Productpage Request受信 注文受付依頼 在庫数把握 新規ロジック 書籍の注文依頼 配送受付依頼 エラー応答 ロールバック処理の実装が複雑 状態 状態 状態 状態 状態更新 状態戻し 状態 状態
  16. 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は「イベントルーティング」により、マイクロサービス間の非同期連携を実現します。
  17. 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
  18. 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 イベントの 再送設定 エラーイベン トを特定 エラーイベントの通 知先
  19. 26 本書で伝えたかったこと source code Build Event Source 簡単 アプリ実装 簡単

    アプリデプロイ 簡単 アクセス設定 簡単 オートスケール 簡単 データ連携 Knative Functions (CLIツール) https://xxx… 簡単 トラフィック管理 HTTP requests Rev: 1.5 95 % Rev: 2.0 5 % KnativeはFaaSを実現するソフトウェア マイクロサービス開発を効率化するソフトウェア