このトピックでは、Container Service for Kubernetes (ACK) クラスターで Knative を使用する際に発生する可能性のある一般的な問題と、それに対応するソリューションについて説明します。
インデックス
Alibaba Cloud Knative とオープンソース Knative の違い
Alibaba Cloud Knative は、運用と保守、使いやすさ、弾力性、ゲートウェイ、イベント駆動型機能、監視とアラートなど、複数の側面でオープンソース Knative を強化しています。詳細については、「Alibaba Cloud Knative とオープンソース Knative の比較」をご参照ください。
Knative のインストール時に選択すべきゲートウェイ
Alibaba Cloud Knative は、ALB、ASM、Kourier の3つのゲートウェイをサポートしています。ALB はアプリケーション層のロードバランシングに最適化されています。ASM は Istio に基づくサービスメッシュ機能を提供します。基本的なゲートウェイ機能のみが必要な場合は、Kourier を選択してください。詳細については、「Knative のゲートウェイの選択」をご参照ください。
Resource Access Management (RAM) ユーザーまたはロールで Knative を使用するために必要な権限
クラスター内のすべての名前空間にアクセスする権限が必要です。これらの権限は次のように付与します。
Container Service 管理コンソールにログインします。Container Service 管理コンソール 。左側のナビゲーションウィンドウで、承認 をクリックします。
-
[RAM ユーザー]タブをクリックします。RAM ユーザーリストで、対象の RAM ユーザーの横にある[権限の管理]をクリックします。
-
「ロール権限の追加」エリアで、権限を付与するクラスターを選択し、名前空間をすべての名前空間に設定して、プロンプトに従って権限付与を完了します。
Knative Pod がゼロにスケールダウンするまでの時間
Pod がゼロにスケールダウンするのに必要な時間は、次の3つのパラメーターによって異なります。
-
stable-window:安定ウィンドウ。スケールダウンする前に、システムはこの期間中にメトリックを監視し、即座にアクションを実行しません。 -
scale-to-zero-grace-period:ゼロへのスケールダウンのタイムアウト。この期間中、システムは急激なトラフィックスパイクに対応するために、新しいリクエストがない場合でも最後の Pod を保持します。 -
scale-to-zero-pod-retention-period:ゼロにスケールダウンする前の最後の Pod の保持期間。これにより、新しい Pod を最初から起動することなく、トラフィックスパイクに迅速に対応できます。
Pod は、次の3つの条件すべてが満たされたときにゼロにスケールダウンします。
-
stable-window内でリクエストが受信されない。 -
scale-to-zero-pod-retention-periodが期限切れになった。 -
SKS (Serverless Kubernetes Service) がプロキシモードに切り替わるまでの時間が
scale-to-zero-grace-periodを超え、Pod がスケールダウンを開始する。
Pod がゼロにスケールダウンする際の最大保持期間は stable-window + Max["scale-to-zero-grace-period", "scale-to-zero-pod-retention-period"] です。特定の保持期間を強制するには、scale-to-zero-pod-retention-period パラメーターを設定します。
Knative で GPU リソースを使用する方法
Knative Service では、spec.template.metadata.annotation セクションに k8s.aliyun.com/eci-use-specs フィールドを追加することで、GPU インスタンスタイプを指定できます。その後、spec.containers.resources.limits セクションで nvidia.com/gpu フィールドを使用して GPU リソースを宣言できます。
詳細については、「GPU の使用」をご参照ください。
Knative で共有 GPU を使用する方法
共有 GPU スケジューリングの例を実行 の手順に従って、ノードの共有 GPU スケジューリングを有効にします。その後、aliyun.com/gpu-mem フィールドを使用して Knative Service でリソース制限を設定します。詳細については、「共有 GPU スケジューリングの有効化」をご参照ください。
トラフィックがない場合に Knative がインスタンスをゼロにスケールダウンする際のコールドスタートレイテンシー問題の解決策
アプリケーションがリクエストを受信しない場合、オープンソース Knative は、永続インスタンスの実行コストを削減するために、デフォルトでアプリケーションインスタンスの数をゼロにスケールダウンします。リクエストが到着すると、アプリケーションには新しいインスタンスが割り当てられます。これには、IaaS リソースの割り当てとスケジューリング、イメージのプル、およびアプリケーションの起動が含まれます。これによりコストは削減されますが、コールドスタートのレイテンシーが発生します。
ビジネスがコールドスタートのレイテンシーに敏感な場合は、次のいずれかのソリューションを検討してください。
-
リザーブドインスタンスの設定:Knative の使用コストとコールドスタートのレイテンシーのバランスを取るために、低スペック、低コストの バースト可能インスタンスの概要 を予約します。最初のリクエストが到着すると、予約されたインスタンスがリクエストを処理し、デフォルトスペックのインスタンスのスケールアウトをトリガーします。デフォルトスペックのインスタンスがスケールアウトを完了した後、後続のリクエストはそれらに転送されます。予約されたインスタンスは、リクエストの処理後に自動的にオフラインになります。詳細については、「リザーブドインスタンスの設定」をご参照ください。
-
Elastic Container Instance (ECI) イメージキャッシュ機能を使用して、アプリケーションイメージのキャッシュスナップショットを事前に作成し、それらのスナップショットから ECI インスタンス (Pod) を作成します。これにより、イメージレイヤーのダウンロードが回避または削減され、インスタンス作成速度が向上します。詳細については、「イメージアクセラレーションの使用」をご参照ください。
ACK Knative の Activator コンポーネントは課金対象か
はい、課金対象です。Activator コンポーネントはデータプレーンで Pod として実行され、インスタンスリソースを消費します。
Knative Service のリスニングポートの設定方法
アプリケーションのリスニングポートは、Knative Service の containerPort と一致する必要があります。これはデフォルトで 8080 です。リスニングポートをカスタマイズするには、「カスタムリスニングポートの設定」をご参照ください。