Knativeは、オープンソースのKubernetesベースのサーバーレスフレームワークです。 Knativeは、アプリケーションのリソース要求、バージョン管理、およびカナリアリリースに基づくポッドの自動スケーリングをサポートしています。 トラフィックが処理されない場合、ポッドの数はゼロにスケーリングされます。 Container Service for Kubernetes (ACK) Knativeは、オープンソースのKnativeおよびKubernetes APIと完全に互換性があります。 ACK Knativeの能力は、多次元で強化される。 たとえば、Knativeはコールドスタート時間を短縮するためにインスタンスを保持し、Advanced Horizontal Pod Autoscaler (AHPA) コンポーネントに基づく予測スケーリング機能をサポートします。
KubernetesクラスターでKnativeを使用する理由?
Introduction to Knative
Knativeは、オープンソースのKubernetesベースのサーバーレスフレームワークで、サーバーレスアプリケーション用のクラウドネイティブおよびクロスプラットフォームのオーケストレーション標準を提供します。 Knativeは、標準を実装するために、コンテナ作成、ワークロード管理、およびイベントモデルを統合します。 次のセクションでは、Knativeの利点について説明します。
ビジネスロジックへの重点: Knativeは、シンプルなアプリケーション構成と自動スケーリングを提供します。 これにより、開発者はビジネスロジックに集中できます。 これにより、O&Mの負担が軽減され、基礎となるリソースへの集中が減少します。
標準化: ビジネスコードをサーバーレスプラットフォームに展開する場合、ソースコードのコンパイルと展開、およびイベントの管理を考慮する必要があります。 現在、コミュニティとクラウドベンダーが提供するサーバーレスソリューションとFPGA as a Service (FaaS) ソリューションの標準は異なります。 Knativeは、標準および汎用のサーバーレスフレームワークを提供します。
たとえば、Knativeでイベント駆動モードを使用する場合は、対応するYAMLファイルを変更し、クラウドサービスにファイルをバインドする必要なく、クラスターにファイルをデプロイできます。 これにより、クロスプラットフォーム移行が容易になります。
使いやすさ: Knativeは、コードをコンテナイメージに自動的にパッケージ化し、イメージをサービスとして公開できます。 Knativeは、関数をKubernetesクラスターにすばやくデプロイし、コンテナーとして実行することもできます。
自動アプリケーション管理: Knativeは、トラフィックが処理されない場合、ポッドの数を自動的にゼロに減らすことができます。 これによりリソースが節約されます。 Knativeは、バージョン管理やカナリアリリースなどのさまざまな機能も提供しています。
Knative Eventing: Knativeは、外部イベントシステムとのインターフェースにイベントモデルを提供し、処理のためにイベントをサービスまたは関数にルーティングします。
主要コンポーネント
Knativeは、さまざまな機能を提供する次のコアコンポーネントで構成されています。
Knative Serving: サーバーレスのワークロード管理機能を提供します。 Knative Servingは、アプリケーションのサーバーレス展開、バージョン管理、カナリアリリースを可能にします。 Knative Servingは、リソース要求に基づくポッドの自動スケーリングもサポートしています。 トラフィックが処理されない場合、ポッドの数はゼロにスケーリングされます。
Knative Eventing: イベント管理機能を提供します。これにより、外部イベントソースとのインターフェイス、イベントの登録とサブスクライブ、イベントのフィルタリングが可能になります。 イベントシステムは、イベントプロデューサーとイベントコンシューマーを分離します。
Knative Functions: Knativeサービスを効率的に作成、ビルド、デプロイできます。 Kubernetes、コンテナー、Knativeなどの基盤となるテクノロジースタックを深く理解する必要なく、Knative functionsを使用して、ステートレスのイベント駆動型関数をKnativeサービスとしてKubernetesクラスターにデプロイできます。
機能
KubernetesクラスターでKnativeを使用すると、次の機能を簡単に実装できます。
リクエストベースの自動スケーリング
CPUおよびメモリ要求に基づく自動スケーリングは、ビジネスの実際のリソース使用量を反映しない場合があります。 webサービスの場合、1秒あたりのクエリ (QPS) または1秒あたりのリクエスト (RPS) に基づく自動スケーリングは、サービスのパフォーマンスを直接反映できます。 Knative Servingは、キュープロキシコンテナーを各ポッドに挿入して、コンテナーの同時実行性またはRPSメトリックを収集します。 オートスケーラーがスケジュールどおりにメトリックを収集した後、オートスケーラーは対応するアルゴリズムに基づいてデプロイのポッド数を自動的に調整します。 これにより、リクエストに基づく自動スケーリングが可能になります。
Knativeを使用せずにACKクラスターで同じ目標を達成するには、デプロイメントとサービスを作成し、Ingressゲートウェイを設定してから、水平ポッドオートスケーラー (HPA) パラメーターを設定する必要があります。 Knativeサービスを使用する場合は、Knativeをデプロイし、KnativeサービスのYAMLファイルを設定するだけで済みます。
トラフィックが処理されない場合のポッド数をゼロにスケーリング
Knativeは、アプリケーションからリクエストが受信されないときにポッドの数を自動的にゼロに減らし、リクエストが受信されたときにポッドを自動的にスケールアウトできます。 Knativeは、Proxy (プロキシモード) とServe (ダイレクトモード) の2つのアクセスモードを定義しています。 オートスケーラは、モードの切り替えを担当します。 要求の数がゼロである場合、オートスケーラは、サービスモードからプロキシモードに切り替わる。 要求が受信されると、オートスケーラは、ポッドの数をスケールアウトする通知を受信する。 新しいポッドのステータスが準備完了に変更されると、自動スケーラーはリクエストを転送します。 次に、オートスケーラはプロキシモードからサーブモードに切り替わります。
バージョン管理とカナリアリリース
Knativeサービスを作成すると、ConfigurationオブジェクトとRouteオブジェクトが基になるレイヤーに自動的に作成されます。
設定: 現在の望ましい状態の設定。 Configurationオブジェクトは、サービスが更新されるたびに更新されます。 Configurationオブジェクトが更新されると、一意のリビジョンが作成されます。 リビジョンは、Configurationオブジェクトのバージョン管理メカニズムです。
ルート: リクエストをリビジョンにルーティングし、異なる比率のトラフィックを異なるリビジョンに転送します。
上記の機能を使用して、リビジョンを使用して、以前のバージョンにアプリケーションをロールバックするなど、バージョンを管理できます。 トラフィック管理のためにカナリアリリースを実行することもできます。 たとえば、リビジョンV1を作成した後、バージョンを更新する必要があるときに、サービスのConfigurationオブジェクトを更新できます。 次に、Revision V2を作成し、ルートを使用してRevision V1とRevision V2に異なるトラフィック比率を指定できます。 トラフィックは、所定の比率に基づいて分配される。 たとえば、70% トラフィックをリビジョンV1にルーティングし、30% トラフィックをリビジョンV2にルーティングできます。
Knative Eventing
Knative Eventingは、GitHubやMessage Queue (MQ) などの外部イベントシステムとのインターフェイスに使用できるイベントモデルを提供し、処理のためにイベントをKnative Servicesまたは関数にルーティングします。
なぜ使用ACK Knative?
ACK Knativeは、オープンソースのKnativeおよびKubernetes APIと完全に互換性があります。 ACK Knativeは、サービスとしての機能も強化し、より包括的なソリューションを提供します。
サービスとしての機能: 数回クリックするだけでアプリケーションをデプロイできます。 システムを構築するためにリソースを購入する必要はありません。 KubernetesクラスターとKnativeの使用を簡素化するために、コンソールが提供され、視覚化された操作がサポートされます。
簡単なO&M:
主要コンポーネントホスティング: ACKクラスターでは、主要コンポーネントであるKnative ServingとKnative Eventingが作成され、ACKによってホストされます。 これにより、高可用性が保証され、リソース使用に対して料金はかかりません。
ゲートウェイホスティング: ACK Knativeは、Application Load Balancer (ALB) 、Microservices Engine (MSE) 、Service Mesh (ASM) 、Kourierの4種類のゲートウェイを提供します。 クラウドサービスゲートウェイのコントローラーは、Kourierを除く、完全にホストされたO&Mフリーのゲートウェイサービスを提供するためにACKによって作成されます。 Kourierはオープンソースバージョンと互換性があります。
エコシステム統合: Alibaba Cloudコンピューティングサービス (Elastic Container InstanceとECS) 、可観測性 (Simple Log Service (SLS) 、Managed Service for Prometheus) をシームレスに統合
、およびアプリケーションの統合 (EventBridge) 。 Knative Servicesを使用すると、サーバーを購入したり、サービスを構築したりすることなく、ロギング、モニタリング、アラート、継続的配信、イベントなどの機能を実装できます。
その他の機能: オープンソースのKnativeに基づいて、ACK Knativeは、実際のビジネスシナリオに基づいて、すぐに使えるより広範なソリューションを提供します。 以下のセクションでは、解決策について説明する。
リザーブドインスタンス: デフォルトでは、オープンソースのKnativeは、コストを削減するために、オフピーク時にポッド数をゼロにスケーリングします。 ただし、次回アプリケーションを起動すると、アプリケーションは時間のかかるコールドスタートを経験します。 コールドスタート時間を短縮するために、リザーブドインスタンス機能を使用して、低仕様のバースト可能インスタンスを予約することを推奨します。 これにより、コストと起動期間のバランスを取ることができます。
Knative自動スケーリング: HPAおよびKnative Pod Autoscaler (KPA) が提供する既成の機能に加えて、KnativeサービスのAHPAを有効にできます。 アプリケーションのリソース需要が定期的に変動する場合は、AHPAを使用してリソース需要を予測することを推奨します。 これにより、コールドスタート時間を短縮するためにKnativeが必要とするリソースをプリロードできます。
ACK KnativeとオープンソースKnativeの比較の詳細については、「Alibaba Cloud KnativeとオープンソースKnativeの比較」をご参照ください。
適用シナリオ
次の表に、ACK Knativeの使用シナリオを示します。
シナリオ | 説明 |
webサービスのホスティング |
|
サーバーレスアプリケーション |
|
AIシナリオ |
|
Knative Eventingシナリオ | Knative Eventingは、外部イベントシステムからイベントを取り込むプロセスを簡素化するイベントモデルを提供します。 たとえば、モノのインターネット (IoT) デバイスがセンサーデータをKnativeサービスに送信すると、ACK Knativeは対応するイベントソースを設定してデータを受信し、データストレージ、リアルタイム分析、モニタリング、アラートなどの対応する処理ロジックをトリガーできます。 |
ACK Knative How to use
次の図は、ACK Knativeの使用方法を示しています。
ステップ | 説明 |
前提条件 | ACK管理クラスターが作成されました。 詳細については、「ACK管理クラスターの作成」をご参照ください。 クラスターのKubernetesバージョンは1.22以降である必要があります。 クラスターを更新する方法の詳細については、「手動でACKクラスターをアップグレードする」をご参照ください。 |
コンソールにACK Knativeをデプロイし、Knative Servingコンポーネントをインストールします。 詳細については、「Knativeのデプロイ」をご参照ください。 | |
インストールするKnativeゲートウェイを選択し、ゲートウェイをデプロイします。 ACK Knativeは、ALB、MSE、ASM、およびKourierゲートウェイをサポートします。 詳細については、「KnativeのIngressを選択するための推奨事項」をご参照ください。
| |
サービスの展開と管理 | 使用するリソースタイプを指定します。
|
自動スケーリング:
| |
バージョン管理とカナリアリリース:
| |
Knativeサービスへのアクセス:
| |
高度な機能 | Knative Eventing: Knative Eventingは、クラウドネイティブ開発の一般的な要件を満たしています。 Knative Eventingは、サーバーレスイベント駆動モードのアーキテクチャも提供します。 このアーキテクチャは、イベントソース、イベントの取り込みとサブスクリプション、およびイベントのフィルタリングで構成されます。 ACK Knativeは、GitHubやEventBridgeなどのさまざまなイベントソースをサポートしています。 詳細については、「Knative Eventingの概要」をご参照ください。 |
Knative Functions: Knative Functionsは、Knative Servicesを作成、ビルド、およびデプロイするための簡単な方法を提供します。 詳細については、「Knative関数のデプロイ」をご参照ください。 | |
AI推論サービス: KServeは、Kubernetesベースの機械学習モデルサービングフレームワークです。 KServeは、TFServing、TorchServe、Triton推論サーバーなどの1つ以上のトレーニング済みモデルを、モデルサービスランタイムにデプロイするために使用できるシンプルなKubernetes CustomResourceDefinitions (CRD) を提供します。 KServeをデプロイし、KServeに基づいて推論サービスを迅速にデプロイできます。 ACKは、モデルのデプロイを高速化する方法やGPU共有を構成する方法など、AI推論サービスをKnativeにデプロイするためのベストプラクティスも提供します。 詳細については、「KnativeでAI推論サービスをデプロイするためのベストプラクティス」をご参照ください。 | |
ASM: サービスメッシュをKnative Servicesに統合して複雑なトラフィック管理を実装し、サービスセキュリティを向上させる場合は、ASMを使用することを推奨します。詳細については、「」をご参照ください。ASMとは何ですか? | |
可视性とコスト管理 | ログ収集: KnativeのSLSを使用して、これらの機能を開発せずにログデータを収集、消費、送信、クエリ、分析できます。 詳細については、「KnativeでのSimple Log Serviceの有効化」をご参照ください。 |
Knativeダッシュボード: KnativeをPrometheusのManaged Serviceに接続して、応答遅延やリクエストの同時実行などの統計を表示できます。 詳細については、「Knativeモニタリングダッシュボードの表示」をご参照ください。 | |
モニタリングとアラート: SLSを使用して、収集したログデータに基づいてアラートルールを設定できます。 詳細については、「Knativeサービスのアラートの設定」をご参照ください。 | |
コストインサイト: IT企業の財務管理者として、Knativeのコストインサイト機能を有効にして、ACKクラスターのリソース使用量とコスト傾向を分析できます。 詳細については、「Knative Serviceのコストインサイト機能の有効化」をご参照ください。 |
課金
ACKクラスターでACK Knativeを使用する場合、ACK Knativeは無料です。 ただし、Knativeを使用するときに作成されたクラウドリソースに対して課金されます。 たとえば、ECSインスタンス、SLBインスタンス、およびNAT Gatewayを作成して使用する場合、リソースの課金ルールに基づいてリソースに対して課金されます。 ACKクラスターの課金ルールの詳細については、「課金ルール」と「クラウドサービスの課金」をご参照ください。
よくある質問
ACK Knativeを使用しているときに問題が発生した場合は、まずKnative FAQを参照して、これらの問題を自分でトラブルシューティングできます。
お問い合わせ
Knativeについて質問や提案がある場合は、DingTalkグループ23302777に参加してください。
関連ドキュメント
最新の機能とバグ修正を取得するために、できるだけ早い機会にKnative Servingを更新してください。 オフピーク時に更新を実行することを推奨します。 詳細については、「Knativeリリースノート」および「Knative Servingのアップグレード」をご参照ください。
Knativeの公式ドキュメントには、Knativeを使用してオンラインストアアプリケーションをビルド、デプロイ、および監視する方法を説明するチュートリアルがあります。 詳細については、「Knative Bookstoreチュートリアル」をご参照ください。