このドキュメントでは、Container Service for Kubernetes (ACK) クラスターでKnativeを使用する場合に一般的に発生する質問に対する回答を提供します。
インデックス
Alibaba Cloud KnativeとオープンソースのKnativeの違いは何ですか?
Alibaba Cloud Knativeは、O&M、使いやすさ、弾力性、Ingress、イベント駆動型サービス、モニタリングとアラートなど、オープンソースのKnativeに基づいた強化されたサービス機能を提供します。 詳細については、「Alibaba Cloud KnativeとオープンソースのKnativeの比較」をご参照ください。
Knativeをインストールするときに、どのIngressを使用する必要がありますか?
Alibaba Cloud Knativeは、Application Load Balancer (ALB) Ingress、Microservices Engine (MSE) Ingress、Service Mesh (ASM) Ingress、Kourier Ingressの4種類のIngressをサポートしています。 ALB Ingressは、アプリケーション層での負荷分散に適しています。 MSEクラウドネイティブのIngressは、マイクロサービスのシナリオに適しています。 ASM IngressはIstio機能を提供します。 基本的なIngress機能のみが必要な場合は、Kourier Ingressを使用できます。 詳細については、「KnativeのIngressの選択」をご参照ください。
RAMユーザーまたはロールでKnativeを使用するために必要な権限
クラスター内のすべての名前空間にアクセスする権限が必要です。 次の手順を実行して、RAM (Resource Access Management) ユーザーまたはロールを承認できます。
ACKコンソールにログインします。 左側のナビゲーションウィンドウで、[権限付与] をクリックします。
[RAMユーザー] タブをクリックし、RAMユーザーリストで、対象のRAMユーザーに対応する [権限の変更] をクリックします。
[権限の追加] エリアで、承認するクラスターを選択し、[すべての名前空間] を名前空間として選択し、プロンプトに従って承認を完了します。
ポッドの数をゼロにするのにどれくらい時間がかかりますか?
ポッドの数をゼロにするのに必要な時間は、次の3つのパラメーターによって異なります。
stable-window
: スケールイン操作が実行される前の時間ウィンドウ。 ポッドがスケールインされる前に、システムは時間ウィンドウ内のメトリックを観察して評価し、スケールイン操作をすぐには実行しません。scale-to-zero-grace-period
: ポッド数がゼロになるまでの猶予期間。 この期間中、新しい要求が受信されなくても、システムはすぐに最後のポッドを停止または削除しません。 これは、バーストトラフィックに応答するのに役立つ。scale-to-zero-pod-retention-period
: ポッド数がゼロになる前の最後のポッドの保持期間。
ポッドの数をゼロにするには、次の条件が満たされていることを確認してください。
stable-window
パラメーターで指定された時間ウィンドウの間、リクエストは受信されません。scale-to-zero-pod-retention-period
パラメーターで指定された最後のポッドの保持期間を超えています。サーバーレスKubernetesサービスのプロキシモードへの切り替えにかかる時間は、
scale-to-zero-grace-period
パラメーターで指定された猶予期間よりも長くなります。
ポッド数がゼロになる前の最後のポッドの保持期間は、次の式に基づいて計算された値を超えません。stable-window + Max["scale-to-zero-grace-period", "scale-to-zero-pod-retention-period"]
ポッド数がゼロになる前に、最後のポッドの保持期間を強制的に設定する場合は、scale-to-zero-pod-retention-period
パラメーターを使用することを推奨します。
KnativeでGPUリソースを使用する方法?
注釈k8s.aliyun.com/eci-use-specs
をKnative Serviceの設定のspec.template.metadata.annotation
セクションに追加して、GPU高速化されたECS (Elastic Compute Service) インスタンスタイプを指定できます。 nvidia.com/gpu
フィールドをspec.containers.resources.limits
セクションに追加して、Knativeサービスに必要なGPUリソースの量を指定できます。
詳細については、「KnativeサービスのGPUリソースの設定」をご参照ください。
KnativeでのGPU共有方法?
ノードのGPU共有機能を有効にするには、[GPU共有を使用してGPUを共有する例] を参照し、aliyun.com/gpu-mem
パラメーターを使用してKnativeで使用可能なGPUリソースの最大量を指定します。 詳細については、「KnativeサービスのGPUリソースの設定」をご参照ください。
デフォルトでは、Knativeはインスタンス数をゼロにスケーリングします。オフピーク時です。 どのようにコールドスタートの待ち時間を減らすのですか?
デフォルトでは、オープンソースバージョンのKnativeは、インスタンスのコストを削減するために、オフピーク時にインスタンス数をゼロにスケーリングします。 次のリクエストが到着すると、アプリケーションは新しいインスタンスに割り当てられます。 システムは、まずKubernetesスケジューラを使用してインフラストラクチャリソースを割り当て、アプリケーションイメージを取得してアプリケーションを起動する必要があります。 このアプローチはコストを削減しますが、アプリケーションの起動時に長い待ち時間を伴うコールドスタートをもたらします。
コールドスタートの待ち時間を回避するには、次のいずれかのソリューションを使用することを推奨します。
リザーブドインスタンスの設定: 低仕様で低コストのバースト可能インスタンスを予約して、Knativeのコストとコールドスタート遅延のバランスを取ります。 最初のリクエストが到着すると、リザーブドインスタンスはリクエストを処理し、デフォルトの仕様インスタンスの作成を開始します。 デフォルト仕様インスタンスが作成された後、後続のすべての新しいリクエストがこれらのインスタンスに転送されます。 リザーブドインスタンスは、送信されたすべてのリクエストを処理した後にリリースされます。 詳細は、「リザーブドインスタンスの設定」をご参照ください。
Elastic Container Instanceはイメージキャッシュを提供します。 イメージからキャッシュスナップショットを作成し、キャッシュスナップショットを使用してエラスティックコンテナインスタンスにポッドをデプロイできます。 これにより、ダウンロードする必要がある画像レイヤーが削減されるため、ポッドの作成が高速化されます。 詳細については、「イメージキャッシュを使用したKnative Servicesのポッド作成の高速化」をご参照ください。
私は請求されていますかACK Knativeのアクティベーターコンポーネント?
はい。 Activatorは、ポッドとして実行され、インスタンスリソースを占有するデータプレーンコンポーネントです。
Knativeでリスニングポートを設定する方法は?
アプリケーションのリスニングポートは、デフォルトで8080に設定されているKnativeのcontainerPort
のポートと一致している必要があります。 カスタムリスニングポートの設定方法の詳細については、「カスタムリスニングポートの設定」をご参照ください。