Slide 1

Slide 1 text

IBM Cloud Code Engine が GA される前に Knative を予習しよう 2020/12/04 Cloud Platform Technical Sales 岸田 吉弘 © 2020 IBM Corporation

Slide 2

Slide 2 text

Knative 2 © 2020 IBM Corporation

Slide 3

Slide 3 text

Knative 3 © 2020 IBM Corporation 「モダンなサーバーレスワークロードをデプロイ、管理するためのKubernetes ベースのプラットフォーム」 ( Kubernetes-based platform to deploy and manage modern serverless workloads. ) - Kubernetesの上に構築し、Kubernetesを抽象化 - 開発者がコーディングに集中できるようにする - イベント駆動型のアプリを簡単にデプロイ・管理できる仕組みを提供 https://knative.dev/

Slide 4

Slide 4 text

Knative 構成図 4 © 2020 IBM Corporation Ambassador, Contour, Gloo, Istio, Kong, Kourier Knative Kubernetes Serving Eventing Platform Gateway Primitive

Slide 5

Slide 5 text

Knative の2つのコンポーネント 5 © 2020 IBM Corporation • ゼロスケール可能なHTTPリクエスト・ベースの コンピューティング機能を提供 • コンテナアプリの実行とスケーリング、 トラフィックの管理を実施 • イベント駆動型アプリケーションを構築 するためのデリバリーとサブスクリプションの メカニズムを提供 • 外部のイベントとの連携 Knative Serving Knative Eventing

Slide 6

Slide 6 text

• アプリのデプロイ • コンテナイメージと設定を 1つのバージョンとして管理 • 外部へのアプリ公開 • オートスケール • 負荷やCPUに応じてスケール • 最小でゼロまで • アプリのバージョン管理 • 新バージョンがデプロイされる とトラフィックも自動で変更 • エンドポイントはそのまま • トラフィックの制御 • 専用のURLの付与 Knative Service Revision 1 Revision 1 App v1 Config Endpoint 90% 10% ユーザー Tag Tester Revision 1 Revision 1 Revision 1 Revision 1 App v2 Config App v3 Config Endpoint © 2020 IBM Corporation 6 Knative Serving でできること

Slide 7

Slide 7 text

アプリのデプロイをシンプルに 7 © 2020 IBM Corporation deployment.yaml service.yaml knative-service.yaml Deployment と Service を作成 Service を作成

Slide 8

Slide 8 text

アプリがデプロイされ、外部公開用URLも生成される 8 © 2020 IBM Corporation

Slide 9

Slide 9 text

裏側では様々な リソースが 作成されている • Deployment • ReplicaSet • Pod • Service • Podmetrics • Virtualservice • Pod Autoscaler • Revision • Route • Service (一部抜粋)

Slide 10

Slide 10 text

アプリを修正してデプロイ 10 © 2020 IBM Corporation value の値を v1 → v2 に変更 エンドポイントは変わらず、 新バージョンのアプリにルーティングされる

Slide 11

Slide 11 text

Revision 11 © 2020 IBM Corporation Knative ではアプリは Revision という単位でスナップショットがとられ、管理される アプリを修正してデプロイすると、Revision が新しく生成される v1をデプロイ v2に変更して 再デプロイ

Slide 12

Slide 12 text

トラフィックの制御 12 © 2020 IBM Corporation 複数の Revision に対してパーセントベースでリクエストを分割できる どの Revision にトラフィックを流すかは Route で管理している v1 v2 90% 10% Route

Slide 13

Slide 13 text

Knative Serving のしくみのまとめ 13 © 2020 IBM Corporation • Knative Service • ワークロードのライフサイクルを管理 • Route と Configuration を管理 • Configuration • Revision を管理 • 最新の Revision 情報をもつ • Revision • アプリコード(コンテナイメージ) と設定(環境変数など)のスナップショット • Route • Revisionに対するHTTPリクエストルーティング の状態を管理 https://knative.dev/docs/serving/

Slide 14

Slide 14 text

Pod のゼロスケール 14 © 2020 IBM Corporation Knative Serviceをデプロイしたあと、しばらく経つと Pod の数が0になる アプリにアクセスすると、再び Pod が生成される

Slide 15

Slide 15 text

オートスケール 15 © 2020 IBM Corporation • Queue Proxy • サイドカーコンテナ • リクエストをユーザーコンテナ (アプリ)に 転送 • リクエスト数と Concurrency の設定値を比較し アプリの処理量を調整 • Autoscaler • Queue Proxy や Activator からメトリクスを収集 • 収集したメトリクスから必要な Pod 数を計算し、 スケールを決定 • Activator • ゼロスケール時、リクエストはActivatorに転送され、 • リクエストが来たらPodを作成するようAutoscalerに 依頼 • Pod が準備できたらリクエストを転送 • Autoscaler と常時 websocket 接続 オートスケールを実現しているコンポーネント https://github.com/knative/serving/blob/master/docs/scaling/SYSTEM.md 定常時のデータの流れ

Slide 16

Slide 16 text

Scaling to and from zero 16 © 2020 IBM Corporation Scale to zero Scale from zero

Slide 17

Slide 17 text

Servingの機能:Podの最小数・最大数の設定 17 © 2020 IBM Corporation • アプリに対して実行する Pod の 最小数と最大数を指定可能 • デフォルトの最小数はゼロ • 最小数を1にすることで、 アプリがスケールインした際に Pod 数がゼロになることを防げる

Slide 18

Slide 18 text

Servingの機能:Podごとの同時処理可能数の設定 18 © 2020 IBM Corporation Pod が同時に処理可能なリクエスト数を指定できる(デフォルト:100) concurrency = 1 concurrency = 10 3 同時リクエストがあった場合 Concurrency を変更することで実行するPod数を変更できる

Slide 19

Slide 19 text

Servingの機能:リクエスト数やCPU使用率によるスケール 19 © 2020 IBM Corporation • デフォルトでは、アプリに対する 同時リクエストが1 Pod あたり 100 を超えると、自動でスケール • CPUの使用率(cpu)や、 1秒あたりのリクエスト数(rps)も メトリクスとして設定が可能

Slide 20

Slide 20 text

Knative Eventing 20 © 2020 IBM Corporation • Broker : • イベントを受け取って、フィルタリングされたものをService(Subscriber)に渡す • Trigger : • Service(Subscriber)に渡したいイベントのフィルター https://knative.dev/docs/eventing/

Slide 21

Slide 21 text

Knative Eventing Sample 21 © 2020 IBM Corporation Event Source Broker Trigger Trigger Trigger Service Service https://knative.dev/blog/2020/05/01/getting-started-with-knative-eventing-using-bitcoin-transaction-data/

Slide 22

Slide 22 text

Event sources 22 © 2020 IBM Corporation Knative自身が提供するイベントソースは13種類(2020/12/04時点) https://knative.dev/docs/eventing/sources/

Slide 23

Slide 23 text

IBM Cloud Code Engine 24 © 2020 IBM Corporation https://www.ibm.com/blogs/solutions/jp-ja/ibm-cloud-code-engine/

Slide 24

Slide 24 text

IBM Cloud Code Engine アーキテクチャ 25 © 2020 IBM Corporation Multi-Tenant Kubernetes (IBM Cloud) knative Istio Developer End Users Function App Container IBM Cloud Code Engine Batch Jobs ... Speed & Ease of Use Control Physical Machines Virtual Machines

Slide 25

Slide 25 text

IBM Cloud Code Engine アーキテクチャ 26 © 2020 IBM Corporation Multi-Tenant Kubernetes (IBM Cloud) knative Istio Developer End Users Function App Container IBM Cloud Code Engine Batch Jobs ... Speed & Ease of Use Control Physical Machines Virtual Machines ???

Slide 26

Slide 26 text

Tekton 27 © 2020 IBM Corporation Knative Build は Tekton に移行 Gitからソースコード取得、ソースコードのコンテナイメージへの変換、コンテナレジストリーへの格納 Build Strategy (build mechanism) Dockerfile FROM ... COPY ... RUN ... ENTRYPOINT ... $ docker build ... Buildpacks • コードを解析して 言語を検出 • 言語に合った ビルダーを選択 • ビルドして コンテナイメージ化

Slide 27

Slide 27 text

Code Engine で使える2つのビルドツール 28 © 2020 IBM Corporation A collection of buildpacks - Cloud Native Buildpacks フレームワークを 活用して、イメージのビルドを簡単、 高性能、安全に実施 - 言語、ランタイム、フレームワークは継続 的にパッチが当てられ、脆弱性やアップ デートに対応 A tool to build container images - Dockerfile からコンテナイメージをビルド - Dockerfile 内の各コマンドをユーザ空間内 のみで実行 - Docker デーモンを簡単に、あるいは安全 に実行できない環境でのコンテナイメージ のビルドを可能にする (標準的なKubernetesクラスタなど) https://github.com/paketo-buildpacks https://github.com/GoogleContainerTools/kaniko

Slide 28

Slide 28 text

まとめ 30 © 2020 IBM Corporation • Knative • モダンなサーバーレスワークロードをデプロイ、 管理するためのKubernetes ベースのプラットフォーム • Serving • コンテナアプリの実行とスケーリング • ネットワーク制御 • Eventing • 外部イベントとの連携 • Knative のマネージド・サービスとして IBM Cloud Code Engine をリリース • Source-to-Image 機能を提供 • Buildpack (Paketo) • Dockerfile (Kaniko) • 現在ベータ版が提供中。無料で使えます!

Slide 29

Slide 29 text

31 © 2020 IBM Corporation ワークショップ、セッション、および資料は、IBMまたはセッション発表者によって準備され、それぞれ独⾃の⾒解を反映したものです。それらは情報 提供の⽬的のみで提供されており、いかなる参加者に対しても法律的またはその他の指導や助⾔を意図したものではなく、またそのような結果を⽣むも のでもありません。本講演資料に含まれている情報については、完全性と正確性を期するよう努⼒しましたが、「現状のまま」提供され、明⽰または暗 ⽰にかかわらずいかなる保証も伴わないものとします。本講演資料またはその他の資料の使⽤によって、あるいはその他の関連によって、いかなる損害 が⽣じた場合も、IBMは責任を負わないものとします。 本講演資料に含まれている内容は、IBMまたはそのサプライヤーやライセンス交付者からいかな る保証または表明を引きだすことを意図したものでも、IBMソフトウェアの使⽤を規定する適⽤ライセンス契約の条項を変更することを意図したもので もなく、またそのような結果を⽣むものでもありません。 本講演資料でIBM製品、プログラム、またはサービスに⾔及していても、IBMが営業活動を⾏っているすべての国でそれらが使⽤可能であることを暗⽰ するものではありません。本講演資料で⾔及している製品リリース⽇付や製品機能は、市場機会またはその他の要因に基づいてIBM独⾃の決定権をもっ ていつでも変更できるものとし、いかなる⽅法においても将来の製品または機能が使⽤可能になると確約することを意図したものではありません。本講 演資料に含まれている内容は、参加者が開始する活動によって特定の販売、売上⾼の向上、またはその他の結果が⽣じると述べる、または暗⽰すること を意図したものでも、またそのような結果を⽣むものでもありません。 パフォーマンスは、管理された環境において標準的なIBMベンチマークを使⽤し た測定と予測に基づいています。ユーザーが経験する実際のスループットやパフォーマンスは、ユーザーのジョブ・ストリームにおけるマルチプログラ ミングの量、⼊出⼒構成、ストレージ構成、および処理されるワークロードなどの考慮事項を含む、数多くの要因に応じて変化します。したがって、 個々のユーザーがここで述べられているものと同様の結果を得られると確約するものではありません。 記述されているすべてのお客様事例は、それらのお客様がどのようにIBM製品を使⽤したか、またそれらのお客様が達成した結果の実例として⽰された ものです。実際の環境コストおよびパフォーマンス特性は、お客様ごとに異なる場合があります。 IBM、IBM ロゴ、ibm.com、IBM Cloud、IBM Cloud Paksは、 世界の多くの国で登録されたInternational Business Machines Corporationの商標です。他 の製品名およびサービス名等は、それぞれIBMまたは各社の商標である場合があります。現時点での IBM の商標リストについては、 www.ibm.com/legal/copytrade.shtmlをご覧ください。 Red Hat, OpenShift, OpenShift Virtualization, Red Hat Marketplace は、Red Hat, Inc の商標または登録商標です。