デフォルトでは、オープンソースバージョンのKnativeは、コストを削減するために、オフピーク時にインスタンス数をゼロにスケーリングします。 ただし、次回のアプリケーションの起動時には、レイテンシを伴うコールドスタートが発生します。 コールドスタート遅延を回避するために、ACK Knative が提供するリザーブドインスタンス機能を使用して、低仕様のバースト可能インスタンスを予約することを推奨します。 これは、コストと効率のバランスを取るのに役立ちます。
リザーブドインスタンスを使用する理由
オープンソースのKnativeのしくみ
デフォルトでは、インスタンスのコストを削減するためにリクエストを処理する必要がない場合、オープンソースバージョンのKnativeはインスタンスの数をゼロにスケーリングします。 次のリクエストが到着すると、アプリケーションは新しいインスタンスに割り当てられます。 システムは、まずKubernetesスケジューラを使用してインフラストラクチャリソースを割り当て、アプリケーションイメージを取得してアプリケーションを起動する必要があります。 アプリケーションのイメージサイズとアプリケーションの起動に必要な時間は、サービスの要件に基づいて異なります。 Container Service for Kubernetes (ACK) では、イメージのサイズと起動時間を制御できません。 このアプローチはコストを削減しますが、アプリケーションの起動時に待ち時間を伴うコールドスタートが発生します。
ACK Knativeの仕組み
Knativeを使用してコストを削減し、同時にコールドスタートを回避する場合は、ACK Knative が提供するリザーブドインスタンス機能を使用して、コストとコールドスタート遅延のバランスを取ることを推奨します。 オープンソースのKnativeとは異なり、ACK Knative はオフピーク時にインスタンス数をゼロにスケーリングしません。 代わりに、低仕様で低コストのインスタンスを予約します。
リザーブドインスタンスを使用して、オフピーク時にコンピューティング最適化インスタンスを置き換えることができます。 リザーブドインスタンスがリクエストを受信すると、リクエストを処理し、コンピューティング最適化インスタンスの作成を開始します。 コンピューティング最適化インスタンスが作成された後、すべての新しいリクエストがこれらのインスタンスに転送されます。 リザーブドインスタンスは、送信されたすべてのリクエストを処理した後にリリースされます。 このシームレスな切り替えメカニズムは、コスト、効率、およびコールドスタート待ち時間のバランスを改善します。
バースト可能インスタンスをリザーブドインスタンスとして使用する理由
Alibaba Cloud Elastic Container Instanceは、バースト可能なインスタンスを提供します。 バースト可能インスタンスは、コンピューティングパフォーマンスを確保するためにCPUクレジットを使用します。 インスタンスは、CPU使用率が低いが、CPU使用率のバーストが時々発生するシナリオに適用されます。 バースト可能なインスタンスは、作成時にCPUクレジットを蓄積し続け、重いワークロードを処理できない場合にコンピューティングパフォーマンスを向上させるためにこれらのクレジットを消費します。 このメカニズムは、インスタンスで実行されている環境やアプリケーションには影響しません。 他のタイプのインスタンスと比較して、バースト可能なインスタンスは、CPUリソースを使用するためのより柔軟で費用効果の高い方法を提供します。
費用対効果とCPUクレジット機能により、バースト可能インスタンスはACK Knative に適したリザーブドインスタンスになります。 リザーブドインスタンスのデフォルトのタイプには、ecs.t6-c1m1.large、ecs.t5-lc1m2.small、ecs.s6-c1m2.small、ecs.t6-c1m2.large、およびecs.n1.smallがあります。 これらは、少なくとも1 CPUコアと2 GBのメモリを持つすべてのインスタンスタイプの中で最も低価格のインスタンスタイプです。 エラスティックコンテナインスタンスタイプと料金の詳細については、「elastic container instance price calculator」をご参照ください。
elasticコンテナインスタンスには、最大5つのインスタンスタイプを設定できます。
リザーブドインスタンスの設定
アノテーションを使用して、リザーブドインスタンスのタイプを手動で設定できます。これには、エラスティックコンテナインスタンスのタイプの指定、CPUコアとメモリの指定などが含まれます。
knative.aliyun.com/reserve-instance
:enable
に設定して、リザーブドインスタンス機能が有効になっていることを示します。knative.aliyun.com/reserve-instance-eci-use-specs
: リザーブドインスタンスの仕様を設定します。
弾性コンテナインスタンスのタイプの指定
次の例では、ecs.t6-c1m1.largeとecs.t5-lc1m2.smallを指定します。
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
name: hello-spec-1
spec:
template:
metadata:
annotations:
knative.aliyun.com/reserve-instance: enable
knative.aliyun.com/reserve-instance-eci-use-specs: "ecs.t6-c1m1.large,ecs.t5-lc1m2.small"
spec:
containers:
- image: registry.cn-hangzhou.aliyuncs.com/knative-sample/helloworld-go:160e4dc8
CPUコアとメモリの指定
ACK Serverless Knativeは、要件を満たすインスタンスタイプを自動的に検索し、最低価格の5つのインスタンスタイプを使用してインスタンスを作成します。 次の例では、1 CPUコアと2 GBのメモリが指定されています。
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
name: hello-spec-2
spec:
template:
metadata:
annotations:
knative.aliyun.com/reserve-instance: enable
knative.aliyun.com/reserve-instance-eci-use-specs: "1-2Gi"
spec:
containers:
- image: registry.cn-hangzhou.aliyuncs.com/knative-sample/helloworld-go:160e4dc8
関連ドキュメント
バースト可能インスタンスの基本概念と使用方法の詳細については、「概要」をご参照ください。
コスト効率のために、Knativeでプリエンプティブルインスタンスを使用できます。 詳細については、「プリエンプティブルインスタンスでのKnativeの使用」をご参照ください。
Knativeでワークロードの自動スケーリングを実装できます。 詳細については、「KnativeでHPAを使用」、「トラフィック変動に耐える自動スケーリングの有効化」、および「KnativeとAHPAを使用してRPSベースのスケジュールスケーリングを実装する」をご参照ください。