Knative は、Kubernetes 上で動作するオープンソースのサーバーレスフレームワークです。Container Compute Service (ACS) Knative は、オープンソースの Knative および Kubernetes API と完全互換であり、マネージドホスティング、予測スケーリング、Alibaba Cloud サービスとのより深い統合機能を追加しています。
Knative は、Kubernetes を基盤とする開発における以下の 3 つの共通課題に対応します:
デプロイメントの複雑さ:Knative では、Pod、Service、Deployment、Ingress の設定が抽象化されます。単一の Knative Service 定義で、これらすべてを処理できます。
アイドル時のリソースコスト:Knative では、トラフィックがない場合に Pod 数をゼロにスケールし、リクエストが到着すると自動的にスケールアウトします。
ベンダーロックイン:Knative は任意の Kubernetes クラスター上で実行可能であるため、ワークロードはクラウドプロバイダー間およびオンプレミス環境間で移植可能です。
基本概念
Knative は 3 つのコンポーネントで構成されています。各コンポーネントは独立して使用することも、組み合わせて使用することもでき、ニーズに応じて段階的に導入できます。
Knative Serving:サーバーレスワークロード管理(デプロイメント、バージョン管理、カナリアリリース、リクエストベースの自動スケーリング)を担当します。トラフィックがない場合、Knative Serving は Pod をゼロにスケールします。
Knative Eventing:イベント管理(外部イベントソースへの接続、イベントの登録およびサブスクライブ、サービスまたは関数へのルーティング前のイベントフィルタリング)を提供します。これにより、イベントプロデューサーとイベントコンシューマーが疎結合化されます。
Knative Functions:Kubernetes、コンテナ、Knative の内部構造に関する専門知識がなくても、Knative Service の作成、ビルド、デプロイが可能です。ステートレスでイベント駆動型の関数を、Knative Service として直接クラスターにデプロイできます。
リクエストベースの自動スケーリングの仕組み
Knative Serving は、各 Pod に queue-proxy サイドカーコンテナを挿入し、同時実行数および 1 秒あたりのリクエスト数(RPS)メトリックを収集します。オートスケーラーは、CPU やメモリではなくこれらのメトリックを用いて Pod 数を調整するため、実際のサービス負荷をより直接的に反映できます。
トラフィックがゼロになると、オートスケーラーは「Serve モード」(直接ルーティング)から「Proxy モード」に切り替わります。着信リクエストは Proxy で一時保持され、新しい Pod の起動が行われます。Pod が Ready 状態になると、Proxy はキューに溜まったリクエストを転送し、再び Serve モードに戻ります。
Knative を使用せずに同様のリクエストベースの自動スケーリングを実現するには、Deployment および Service の作成、Ingress の設定、Horizontal Pod Autoscaler(HPA)の個別設定が必要です。一方、Knative Service では、これらすべてを単一の YAML ファイルで定義できます。
バージョン管理およびカナリアリリースの仕組み
すべての Knative Service には、以下の 2 つの基盤となるオブジェクトがあります:
Configuration:Service の現在の望ましい状態を表します。Service の更新ごとに、一意に識別される新しい revision が作成されます。
Route:トラフィックを 1 つ以上の revision に、設定可能な割合でルーティングします。
このモデルにより、以前の revision へのロールバックや、カナリアリリース・A/B テスト向けの revision 間でのトラフィック分割が可能になります。たとえば、70 % のトラフィックを Revision V1 に、30 % を Revision V2 にルーティングできます。
ACS Knative を採用する理由
ACS Knative は、オープンソースの Knative および Kubernetes API と完全互換であり、さらにいくつかの領域で拡張されています。
サービスとしての機能(Capability as a Service)
ACS Knative を使用すると、システム構築のためのリソース購入を必要とせず、数回のクリック操作だけでアプリケーションをデプロイできます。視覚的な操作が可能なコンソールにより、Kubernetes クラスターおよび Knative の利用が簡素化されます。
マネージドコンポーネントおよび Ingress
ACS クラスターでは、Knative Serving および Knative Eventing が高可用性で ACS によってホストおよび管理されており、追加料金はかかりません。また、ACS では以下の 4 種類の Ingress オプションを提供しています:
| Ingress | 説明 |
|---|---|
| Application Load Balancer (ALB) | 完全マネージド、運用保守不要。Alibaba Cloud ALB サービスを基盤とし、内蔵の自動スケーリング機能を備えています |
| Microservices Engine (MSE) | 次世代 Ingress。Kubernetes Ingress 標準に準拠し、従来のトラフィックゲートウェイのすべての機能をサポートします |
| Service Mesh (ASM) | Istio 互換。マイクロサービス向けの集中型トラフィック管理を提供し、メッシュ可観測性および安全なサービス間通信を実現します |
| Kourier | オープンソースの軽量 Ingress。Envoy アーキテクチャに基づき、オープンソース版 Knative と互換です |
ALB、MSE、ASM の Ingress コントローラーは ACS によって作成およびホストされます。Kourier はオープンソース版と互換です。
コールドスタート時間の短縮
オープンソースの Knative では、コスト削減のため非ピーク時に Pod をゼロにスケールしますが、次のリクエストではコールドスタートが発生します。ACS Knative では、このレイテンシーを短縮する以下の 2 つの方法を提供しています:
予約インスタンス:低スペックのバースト可能インスタンスを予約し、Pod を常駐状態(ウォーム)に保ちます。これにより、コスト削減と起動時間の短縮のバランスを最適化できます。
Advanced Horizontal Pod Autoscaler(AHPA)による予測スケーリング:AHPA は過去のメトリックを分析して需要を予測し、トラフィックのピーク前にリソースを事前にプロビジョニングします。アプリケーションのワークロードが定期的なスケジュールで変動する場合に有効です。
詳細な比較については、「Alibaba Cloud Knative とオープンソース Knative の比較」をご参照ください。
エコシステム連携
ACS Knative は、追加のサーバーのプロビジョニングや管理を必要とせず、Alibaba Cloud の可観測性およびアプリケーションサービスと統合されます:
ログおよびモニタリング: Simple Log Service (SLS) および Managed Service for Prometheus
イベント連携:EventBridge
ユースケース
| ユースケース | 説明 |
|---|---|
| Web サービスのホスティング | 簡易な設定で Web サービスをデプロイできます。revision 機構により、各バージョンに一意の識別子が付与され、ロールバックおよびトラフィック分割が容易になります。Route を用いたトラフィック割合設定により、カナリアリリースおよび A/B テストを実行できます。 |
| サーバーレスアプリケーション | 開発者が IaaS リソースではなくビジネスロジックに集中できるようになります。ACS Knative はリクエストの同時実行数に基づいてスケールアウトし、トラフィック停止時に Pod をゼロにスケールすることで、アイドル時のコストを削減します。 |
| AI 推論サービス | GPU 加速シナリオにおいて、チームはインフラストラクチャーのメンテナンスではなく、AI モデルの開発およびデプロイに集中できます。ACS Knative は実際のワークロードに基づいて推論サービスをスケールし、クラウドノード、データセンター、エッジデバイスのいずれでも実行可能です。 |
| イベント駆動型ワークロード | Knative Eventing を使用して外部イベントソースに接続できます。たとえば、IoT センサーデータを受信するイベントソースを設定し、データストレージ、リアルタイム分析、アラート通知などのダウンストリーム処理ロジックをトリガーできます。対応するソースには、Apache Kafka、GitHub、MNS、Apache RocketMQ が含まれます。 |
クイックスタート
前提条件:続行する前に、ACS クラスターへの Knative のデプロイ を実行してください。
コンポーネントおよび Ingress のセットアップ
Knative Serving のインストール — コンソールから ACS Knative をデプロイし、Knative Serving コンポーネントをインストールします。
Ingress の選択およびデプロイ — ACS Knative では ALB、MSE、ASM、Kourier をサポートしています。選択に関する推奨事項は、リンク先のガイドをご参照ください。
自動スケーリングの設定
リクエスト数に基づく KPA の設定 — QPS に基づく Knative Pod Autoscaler(KPA)のスケーリングを実装します。
AHPA を用いた予測およびスケジュールされたスケーリングの設定 — AHPA を使用して、過去のメトリックおよび cron ベースのスケジュールに基づき、リソースを事前にプロビジョニングします。
Knative における HPA の使用 — HPA を使用して、CPU ベースのスケーリングしきい値を設定します。
バージョンおよびトラフィックの管理
revision の作成 — アプリケーションのバージョンを管理し、以前の revision へロールバックできます。
カナリアリリースの実行 — Route の割合設定により、revision 間でトラフィックを分割します。
Knative Service へのアクセス
Knative Service のデフォルトドメインは、{route}.{namespace}.{default-example.com} の形式に従います。
カスタムドメインの設定 — Service のカスタムドメイン名のサフィックスを指定します。
証明書による HTTPS の有効化 — カスタムドメインのトラフィックを保護するために証明書を設定します。
liveness および readiness プローブの設定 — Service の健全性を監視および管理します。
高度な機能
Knative Eventing の概要 — Apache Kafka、GitHub、MNS、Apache RocketMQ を含むイベントソースを用いたイベント駆動型アーキテクチャを構築します。
Knative Functions のデプロイ — Kubernetes 構成を直接管理することなく、ステートレス関数を作成およびデプロイできます。
KServe のデプロイ および 推論サービスの実行 — Kubernetes ベースの KServe 機械学習モデルサービングフレームワークを使用して、トレーニング済みモデル(TFServing、TorchServe、Triton)を Kubernetes 上にデプロイします。
高度なトラフィック管理のための ASM 連携 — Service Mesh(ASM)を活用して、Knative Service における複雑なトラフィックルーティング、メッシュ可観測性、および安全なサービス間通信を実現します。
可観測性およびモニタリング
Knative ダッシュボードの表示 — Managed Service for Prometheus に接続して、レスポンスレイテンシーおよびリクエスト同時実行数のメトリックを確認します。
課金
ACS Knative 自体は無料です。使用時に作成されるクラウドリソース(SLB インスタンス、NAT ゲートウェイなど)のみが課金対象となります。詳細については、「課金ルール」をご参照ください。
よくある質問
一般的な問題については、「Knative よくある質問」をご参照ください。主な質問例は以下のとおりです:
お問い合わせ
Knative に関するご質問やフィードバックは、DingTalk グループ 23302777 へご参加ください。
次のステップ
最新の機能および修正を確実に適用するため、Knative Serving を常に最新の状態に保ってください。更新は非ピーク時間帯に実施してください。「Knative リリースノート」および「Knative Serving コンポーネントの更新」をご参照ください。
公式の Knative Bookstore Tutorial を実施し、Knative を用いたアプリケーションのビルド、デプロイ、モニタリングまでの一連の手順を確認してください。