Knative は、Kubernetes ベースのオープンソースのサーバーレスフレームワークです。Knative は、リソースリクエストに基づく Pod の自動スケーリング、バージョン管理、およびアプリケーションのカナリアリリースをサポートしています。トラフィックが処理されていない場合、Pod の数はゼロにスケーリングされます。コンテナサービス Knative は、オープンソースの Knative および Kubernetes API と完全に互換性があります。コンテナサービス Knative の機能は、複数の次元で強化されています。たとえば、Knative はコールドスタート時間を短縮するためにインスタンスを保持し、高度な水平 Pod オートスケーラー (AHPA) コンポーネントに基づく予測スケーリング機能をサポートしています。
KubernetesクラスターでKnativeを使用する理由
Knative入門
Knative は、サーバーレスアプリケーション向けのクラウドネイティブでクロスプラットフォームなオーケストレーション標準を提供する、Kubernetes ベースのオープンソースのサーバーレスフレームワークです。この標準を実装するために、Knative はコンテナの作成、ワークロード管理、およびイベントモデルを統合しています。次のセクションでは、Knative の利点について説明します。
ビジネスロジックへの注力強化:Knativeは、シンプルなアプリケーション構成と自動スケーリングを提供します。これにより、開発者はビジネスロジックに集中できます。これにより、運用管理の負担が軽減され、基盤となるリソースへの注力が軽減されます。
標準化: サーバーレスプラットフォームにビジネスコードをデプロイする場合、ソースコードのコンパイルとデプロイ、およびイベントの管理を考慮する必要があります。現在、コミュニティやクラウドベンダーが提供するサーバーレスソリューションとFPGA as a Service (FaaS) ソリューションは、それぞれ異なる標準を採用しています。Knativeは、標準的で汎用的なサーバーレスフレームワークを提供します。
たとえば、Knative でイベント駆動型モードを使用する場合、対応する YAML ファイルを変更し、クラウドサービスにバインドすることなくクラスターにデプロイできます。これにより、クロスプラットフォームの移行が容易になります。
使いやすさ: Knative は、コードをコンテナ イメージに自動的にパッケージ化し、イメージをサービスとして公開できます。また、Knative は関数を Kubernetes クラスターに迅速にデプロイし、コンテナーとして実行することもできます。
アプリケーションの自動管理:Knative は、トラフィックが処理されていないときに Pod の数をゼロに自動的に縮小できます。これにより、リソースを節約できます。Knative は、バージョン管理やカナリアリリースなど、さまざまな機能も提供します。
Knative Eventing: Knativeは、外部イベントシステムと連携し、イベントを処理のためにサービスまたは関数にルーティングするためのイベントモデルを提供します。
主要コンポーネント
Knative は、それぞれ異なる機能を提供する以下のコアコンポーネントで構成されています。
Knative Serving: サーバーレス ワークロード管理機能を提供します。Knative Serving を使用すると、アプリケーションのサーバーレスデプロイ、バージョン管理、カナリアリリースが可能になります。Knative Serving は、リソース要求に基づく Pod の自動スケーリングもサポートしています。トラフィックが処理されない場合、Pod の数はゼロにスケーリングされます。
Knative Eventing: イベント管理機能を提供します。これにより、外部イベントソースとのインターフェース、イベントの登録とサブスクライブ、イベントのフィルタリングが可能になります。イベントシステムは、イベントプロデューサーとイベントコンシューマーを分離します。
Knative Functions: Knative サービスを効率的に作成、ビルド、デプロイできます。Kubernetes、コンテナー、Knative などの基礎となるテクノロジスタックを深く理解する必要なく、ステートレスなイベント駆動型関数を Knative サービスとして Kubernetes クラスターにデプロイできます。
メリット
Kubernetes クラスタで Knative を使用すると、次の機能を簡単に実装できます。
リクエストベースの自動スケーリング
CPU およびメモリの要求に基づく自動スケーリングは、ビジネスの実際のリソース使用量を反映していない可能性があります。Web サービスの場合、1 秒あたりのクエリ数 (QPS) または 1 秒あたりのリクエスト数 (RPS) に基づく自動スケーリングは、サービスのパフォーマンスを直接反映できます。Knative Serving は、コンテナの同時実行数または RPS メトリックを収集するために、各ポッドに queue-proxy コンテナを挿入します。オートスケーラーは、スケジュールに従ってメトリックを収集した後、対応するアルゴリズムに基づいてデプロイメントのポッド数を自動的に調整します。これにより、リクエストに基づく自動スケーリングが可能になります。
Knative を使用しない ACS クラスタで同じ目標を達成するには、デプロイメントとサービスを作成し、イングレスを構成してから、Horizontal Pod Autoscaler (HPA) パラメータを構成する必要があります。Knative サービスを使用する場合は、Knative をデプロイし、Knative サービスの YAML ファイルを構成するだけで済みます。
トラフィックが処理されていないときにポッドの数をゼロにスケーリングする
Knative は、アプリケーションからリクエストが受信されない場合にポッド数をゼロに自動的に縮小し、リクエストが受信された場合にポッドを自動的にスケールアウトできます。Knative は、Proxy(プロキシモード)と Serve(ダイレクトモード)の 2 つのアクセスモードを定義します。オートスケーラーは、モードの切り替えを担当します。リクエスト数がゼロの場合、オートスケーラーは Serve モードから Proxy モードに切り替えます。リクエストが受信されると、オートスケーラーはポッド数をスケールアウトするための通知を受け取ります。新しいポッドのステータスが Ready に変更されると、オートスケーラーはリクエストを転送します。その後、オートスケーラーは Proxy モードから Serve モードに切り替えます。
バージョン管理とカナリアリリース
Knative サービスを作成すると、基盤となるレイヤーで構成オブジェクトとルートオブジェクトが自動的に作成されます。
構成: 現在の望ましい状態の構成。構成オブジェクトは、サービスが更新されるたびに更新されます。構成オブジェクトが更新されると、一意のリビジョンが作成されます。リビジョンは、構成オブジェクトのバージョン管理メカニズムです。
ルート: リビジョンへのリクエストをルーティングし、トラフィックを異なる割合で異なるリビジョンに転送します。
上記の機能を使用すると、リビジョンを使用してバージョンを管理できます。たとえば、アプリケーションを以前のバージョンにロールバックできます。また、トラフィック管理のためにカナリアリリースを実行することもできます。たとえば、リビジョンV1を作成した後、バージョンの更新が必要な場合は、サービスの構成オブジェクトを更新できます。次に、リビジョンV2を作成し、ルートを使用してリビジョンV1とリビジョンV2に異なるトラフィック比率を指定できます。トラフィックは、事前に定義された比率に基づいて分散されます。たとえば、70%のトラフィックをリビジョンV1にルーティングし、30%のトラフィックをリビジョンV2にルーティングできます。
Knative イベント処理
Knative Eventing は、GitHub やメッセージキュー (MQ) などの外部イベントシステムと連携し、イベントを Knative Services または関数にルーティングして処理するためのイベントモデルを提供します。
なぜACS Knativeなのですか?
ACS Knative はオープンソースの Knative および Kubernetes API と完全に互換性があります。ACS Knative はまた、Capability as a Service を強化し、より包括的なソリューションを提供します。
サービスとしての機能: 数回クリックするだけでアプリケーションをデプロイできます。システムを構築するためのリソースを購入する必要はありません。コンソールが提供され、視覚化された操作がサポートされているため、KubernetesクラスターとKnativeの使用が簡素化されます。
簡素化された運用と保守:
主要コンポーネントのホスティング: ACS クラスターでは、主要コンポーネントである Knative Serving と Knative Eventing は ACS によって作成およびホストされます。これにより、高可用性が確保され、リソース使用量に対する料金は発生しません。
Ingress ホスティング: ACS Knative は、アプリケーションロードバランサー (ALB)、マイクロサービスエンジン (MSE)、サービスメッシュ (ASM)、および Kourier の 4 種類の Ingress を提供します。クラウドサービス Ingress のコントローラーは、Kourier を除き、ACS によって作成され、完全にホストされ、運用管理不要のゲートウェイサービスを提供します。Kourier はオープンソースバージョンと互換性があります。
エコシステム統合: Alibaba Cloud コンピューティングサービス、可観測性(Simple Log Service (SLS) および Managed Service for Prometheus)、およびアプリケーション統合(EventBridge)とシームレスに統合します。Knative Services を使用すると、サーバーを購入したりサービスを構築したりすることなく、ログ記録、監視、アラート、継続的デリバリー、イベント処理などの機能を実装できます。
その他の機能: オープンソースのKnativeに基づいて、ACS Knativeは、実際のビジネスシナリオに基づいたすぐに使える、より広範なソリューションを提供します。次のセクションでは、これらのソリューションについて説明します。
予約インスタンス: デフォルトでは、オープンソースのKnativeは、オフピーク時にポッドの数をゼロにスケールダウンしてコストを削減します。ただし、次にアプリケーションを起動すると、アプリケーションは時間のかかるコールドスタートを経験します。コールドスタート時間を短縮するために、予約インスタンス機能を使用して、低スペックのバースト対応インスタンスを予約することをお勧めします。これは、コストと起動時間のバランスを取るのに役立ちます。
Knative 自動スケーリング: HPA および Knative Pod Autoscaler (KPA) によって提供されるすぐに使える機能に加えて、Knative サービスに対して AHPA を有効にすることができます。アプリケーションのリソース需要が定期的に変動する場合は、AHPA を使用してリソース需要を予測することをお勧めします。これにより、Knative が必要とするリソースを事前に読み込んで、コールドスタート時間を短縮できます。
ACS Knative とオープンソース Knative の比較の詳細については、Alibaba Cloud Knative とオープンソース Knative の比較 を参照してください。
シナリオ
次の表は、ACS Knative のユースケースについて説明しています。
シナリオ | 説明 |
Web サービスのホスティング |
|
サーバーレス アプリケーション |
|
AI シナリオ |
|
Knative Eventing のシナリオ | Knative Eventing は、外部イベントシステムからのイベントの取り込みプロセスを簡素化するイベントモデルを提供します。たとえば、モノのインターネット (IoT) デバイスがセンサーデータを Knative Service に送信する場合、ACS Knative は対応するイベントソースを構成してデータを受信し、データストレージ、リアルタイム分析、監視、アラートなどの対応する処理ロジックをトリガーできます。 |
ACS Knativeの使い方
手順 | 説明 |
前提条件 | KnativeはACSクラスタにデプロイされます。詳細については、Knativeのデプロイを参照してください。 |
コンソールでACS Knativeをデプロイし、Knative Servingコンポーネントをインストールします。詳細については、Knativeコンポーネントの管理を参照してください。 | |
インストールしてデプロイするKnative Ingressを選択します。ACS Knativeは、ALB、MSE、ASM、およびKourier Ingressをサポートしています。詳細については、Knative Ingressの選択に関する推奨事項を参照してください。
| |
サービスのデプロイと管理 | 自動スケーリング:
|
バージョン管理とカナリアリリース:
| |
Knative サービスへのアクセス:
| |
高度な機能 | Knative Eventing: Knative Eventingは、クラウドネイティブ開発における一般的な要件を満たします。Knative Eventingは、サーバーレスのイベント駆動型モードのためのアーキテクチャも提供します。このアーキテクチャは、イベントソース、イベントの取り込みとサブスクリプション、イベントフィルタリングで構成されています。ACS Knativeは、Kafka、GitHub、MNS、RocketMQなど、さまざまなイベントソースをサポートしています。詳細については、Knative Eventingの概要を参照してください。 |
Knative Functions: Knative Functions は、Knative サービスを作成、ビルド、デプロイするための簡単な方法を提供します。詳細については、Knative 関数のデプロイを参照してください。 | |
AI推論サービス: KServeは、Kubernetesベースの機械学習モデル提供フレームワークです。KServeは、トレーニング済みのモデル(TFServing、TorchServe、Triton推論サーバーなど)をモデル提供ランタイムにデプロイするために使用できるシンプルなKubernetes CustomResourceDefinitions(CRD)を提供します。KServeをデプロイし、KServeに基づく推論サービスを迅速にデプロイできます。 | |
ASM: サービスメッシュをKnative Servicesに統合して複雑なトラフィック管理を実装し、サービスセキュリティを向上させたい場合は、ASMを使用することをお勧めします。詳細については、ASM上のKnativeを使用して、Knativeサービスのトラフィック分割に基づいてカナリアリリースを実行するを参照してください。 | |
オブザーバビリティとコスト管理 | |
Knative ダッシュボード: Knative を Managed Service for Prometheus に接続して、応答レイテンシやリクエストの同時実行数などの統計情報を表示できます。詳細については、Knative ダッシュボードの表示を参照してください。 | |
請求
ACSクラスターでACS Knativeを使用する場合、ACS Knative自体は無料です。ただし、Knativeの使用時に作成されるクラウド リソースに対しては課金されます。たとえば、SLBインスタンスとNATゲートウェイを作成して使用する場合、リソースの課金ルールに基づいて課金されます。詳細については、課金ルールをご参照ください。
よくあるご質問
ACS Knative の使用中に問題が発生した場合は、まず Knative FAQ を参照し、問題のトラブルシューティングを独自に行ってください。
お問い合わせください
Knativeのご利用に関してご提案やご質問がございましたら、DingTalkグループ23302777にご参加ください。
参考資料
最新の機能とバグ修正を入手するために、できるだけ早くKnative Servingを更新してください。オフピーク時に更新を実行することをお勧めします。詳細については、KnativeリリースノートとKnative Servingコンポーネントの更新を参照してください。
Knative の公式ドキュメントには、Knative を使用してオンラインストアアプリケーションを構築、デプロイ、および監視する方法を説明するチュートリアルが用意されています。詳細については、Knative Bookstore チュートリアル を参照してください。