すべてのプロダクト
Search
ドキュメントセンター

Container Service for Kubernetes:Knative Service のリザーブドインスタンス構成によるコールドスタートレイテンシの削減

最終更新日:Mar 26, 2026

Java サービスなど、起動に時間がかかるアプリケーションの場合、community Knative のデフォルトのスケールトゥゼロポリシーでは、コールドスタートレイテンシが高くなります。ACK Knative は、リザーブドインスタンス (標準インスタンスが起動する間、リクエストを即座に処理する低コストで常時稼働する Pod) を使用してこれを解決します。

仕組み

Knative Service がスケールトゥゼロになると、最初に着信するリクエストがコールドスタートをトリガーします。リクエストが処理される前に、リソーススケジューリング、イメージプル、アプリケーションの起動がすべて完了する必要があります。

リザーブドインスタンスは、アイドル期間中に 1 つ以上の低仕様 Pod を実行し続けることで、この動作を変更します。

  1. セーフティネット付きのスケールイン。 トラフィックが停止すると、Service はスケールインしますが、潜在的な新しいリクエストを処理するために、少なくとも 1 つのリザーブドインスタンスがオンライン状態を維持します。

  2. 並行応答とスケールアウト。 リクエストが到着すると、2 つのことが同時に発生します。

    • リクエストは、即時処理のためにアクティブなリザーブドインスタンスにルーティングされます (コールドスタートなし)。

    • Knative は、継続的なトラフィックを処理するために標準仕様のインスタンスを作成します。

  3. トラフィックの引き渡し。 最初の標準インスタンスの準備が整うと、以降のすべてのトラフィックはそれにルーティングされます。

  4. クリーンアップ。 リザーブドインスタンスが初期リクエストの処理を完了すると、自動的に終了されます。

Reserved instance workflow

前提条件

開始する前に、以下を確認してください。

  • Knative のデプロイ がお使いの ACK クラスターにデプロイされています。

  • ACK Virtual Node がインストールされていること (ECI および ACS リザーブドインスタンスには必須、ECS には不要)。詳細については、「コンポーネント」をご参照ください。

アノテーションリファレンス

Knative Service マニフェストにアノテーションを追加して、リザーブドインスタンスを有効にします。次の表に、サポートされているすべてのアノテーションを示します。

アノテーション説明デフォルト
knative.aliyun.com/reserve-instanceリザーブドインスタンスを有効または無効にします。"enable" に設定します。無効
knative.aliyun.com/reserve-instance-typeリザーブドインスタンスのリソースタイプ。サポートされている値: eciecsacseci
knative.aliyun.com/reserve-instance-replicas維持するリザーブドインスタンスの数。1
knative.aliyun.com/reserve-instance-eci-use-specsECI のインスタンスタイプまたは CPU-メモリ仕様。インスタンスタイプ名 (例: ecs.t6-c1m1.large) または CPU-メモリ形式 (例: 1-2Gi) を受け入れます。複数のインスタンスタイプはコンマで区切ります。-
knative.aliyun.com/reserve-instance-ecs-use-specsリザーブドインスタンスの ECS インスタンスタイプ (例: ecs.gn6i-c4g1.xlarge)。-
knative.aliyun.com/reserve-instance-acs-compute-classACS Pod のコンピューティングクラス (例: general-purpose)。-
knative.aliyun.com/reserve-instance-acs-compute-qosACS Pod のコンピューティング品質 (例: デフォルト)。-
knative.aliyun.com/reserve-instance-cpu-resource-requestリザーブドインスタンスの CPU リクエスト (例: "1")。-
knative.aliyun.com/reserve-instance-cpu-resource-limitリザーブドインスタンスの CPU 制限 (例: "1")。-
knative.aliyun.com/reserve-instance-memory-resource-requestリザーブドインスタンスのメモリリクエスト (例: "2Gi")。-
knative.aliyun.com/reserve-instance-memory-resource-limitリザーブドインスタンスのメモリ制限 (例: "2Gi")。-

ECI リザーブドインスタンスの構成

Elastic Container Instance (ECI) は、リザーブドインスタンスのデフォルトのリソースタイプです。ECI Pod はサーバーレスインフラストラクチャで実行されるため、ノードの容量計画は不要です。

インスタンスタイプによる指定

基盤となる ECI に特定の ECS インスタンスタイプ を使用するには、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 とメモリによる指定

特定のインスタンスタイプが不明な場合は、必要な CPU とメモリリソースを定義します。

次の例では、1 コア、2 GiB インスタンスを指定しています。

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

ACS リザーブドインスタンスの構成

Alibaba Cloud Container Compute Service (ACS) をリザーブドインスタンスに使用するには、まず ACK Virtual Node をインストールします。詳細については、「コンポーネント」をご参照ください。その後、knative.aliyun.com/reserve-instance-type: acs アノテーションを追加します。

コンピューティングクラスと品質による指定

以下は、ACS リザーブドインスタンスの基本的な構成です。 コンピューティングクラスコンピューティング品質 を指定できます。

apiVersion: serving.knative.dev/v1
kind: Service
metadata:
  name: helloworld-go
spec:
  template:
    metadata:
      annotations:
        knative.aliyun.com/reserve-instance: enable
        knative.aliyun.com/reserve-instance-type: acs
        # (Optional) Compute class for the ACS pod
        knative.aliyun.com/reserve-instance-acs-compute-class: "general-purpose"
        # (Optional) Compute quality for the ACS pod
        knative.aliyun.com/reserve-instance-acs-compute-qos: "default"
    spec:
      containers:
      - image: registry-vpc.cn-hangzhou.aliyuncs.com/knative-sample/helloworld-go:73fbdd56
        env:
        - name: TARGET
          value: "Knative"

CPU とメモリによる指定

apiVersion: serving.knative.dev/v1
kind: Service
metadata:
  name: helloworld-go-resource
spec:
  template:
    metadata:
      annotations:
        knative.aliyun.com/reserve-instance: enable
        knative.aliyun.com/reserve-instance-type: acs
        knative.aliyun.com/reserve-instance-cpu-resource-request: "1"
        knative.aliyun.com/reserve-instance-memory-resource-request: "2Gi"
    spec:
      containers:
      - image: registry-vpc.cn-hangzhou.aliyuncs.com/knative-sample/helloworld-go:73fbdd56
        env:
        - name: TARGET
          value: "Knative"

ECS リザーブドインスタンスの構成

アイドル期間中のコストを削減するために、リザーブドインスタンスに低コストの Elastic Compute Service (ECS) インスタンスタイプ を指定します。

GPU ワークロード

次の例では、GPU 推論サービスのリザーブドインスタンスとして、低仕様の GPU インスタンスを構成します。

apiVersion: serving.knative.dev/v1
kind: Service
metadata:
  labels:
    release: qwen
  name: qwen
  namespace: default
spec:
  template:
    metadata:
      annotations:
        autoscaling.knative.dev/metric: "concurrency"
        # Enable and configure an ECS reserved instance. You can configure one or more instance types.
        knative.aliyun.com/reserve-instance: enable
        knative.aliyun.com/reserve-instance-type: ecs
        knative.aliyun.com/reserve-instance-ecs-use-specs: ecs.gn6i-c4g1.xlarge
      labels:
        release: qwen
    spec:
      containers:
      - command:
        - sh
        - -c
        - python3 -m vllm.entrypoints.openai.api_server --port 8080 --trust-remote-code
          --served-model-name qwen --model /mnt/models/Qwen-7B-Chat-Int8 --gpu-memory-utilization
          0.95 --quantization gptq --max-model-len=6144
        image: kube-ai-registry.cn-shanghai.cr.aliyuncs.com/kube-ai/vllm:0.4.1
        imagePullPolicy: IfNotPresent
        name: vllm-container
        resources:
          # Resource configuration for the standard instance
          limits:
            cpu: "16"
            memory: 60Gi
            nvidia.com/gpu: "1"
          requests:
            cpu: "8"
            memory: 36Gi
            nvidia.com/gpu: "1"
        volumeMounts:
        - mountPath: /mnt/models/Qwen-7B-Chat-Int8
          name: qwen-7b-chat-int8
      volumes:
      - name: qwen-7b-chat-int8
        persistentVolumeClaim:
          claimName: qwen-7b-chat-int8-dataset

CPU ワークロード

次の例では、1 コア、2 GiB インスタンスを指定しています。

apiVersion: serving.knative.dev/v1
kind: Service
metadata:
  name: helloworld-resource
spec:
  template:
    metadata:
      annotations:
        knative.aliyun.com/reserve-instance: enable
        knative.aliyun.com/reserve-instance-type: ecs
        knative.aliyun.com/reserve-instance-cpu-resource-request: "1"
        knative.aliyun.com/reserve-instance-cpu-resource-limit: "1"
        knative.aliyun.com/reserve-instance-memory-resource-request: "2Gi"
        knative.aliyun.com/reserve-instance-memory-resource-limit: "2Gi"
    spec:
      containers:
      - image: registry-vpc.cn-hangzhou.aliyuncs.com/knative-sample/helloworld-go:73fbdd56
        env:
        - name: TARGET
          value: "Knative"

リザーブドインスタンスプールの設定

高いバーストトラフィックを処理するために、knative.aliyun.com/reserve-instance-replicas アノテーションでレプリカ数を指定することにより、単一のリザーブドインスタンスをリソースプールに拡張します。

次の例では、3つの低仕様インスタンスのリザーブドインスタンスプールを作成します。

apiVersion: serving.knative.dev/v1
kind: Service
metadata:
  name: hello-reserve-pool
spec:
  template:
    metadata:
      annotations:
        knative.aliyun.com/reserve-instance: enable
        knative.aliyun.com/reserve-instance-replicas: "3"
        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

構成の検証

Service マニフェストを適用した後、リザーブドインスタンスが実行中であることを確認します。

# リザーブドインスタンスの Pod が実行中であるかを確認します
kubectl get pods -l serving.knative.dev/service=<your-service-name>

# Knative サービスのアノテーションを表示します
kubectl get ksvc <your-service-name> -o yaml | grep reserve-instance

正しく構成されたリザーブドインスタンスは、トラフィックが処理されていない場合でも Running 状態を維持します。

本番環境での適用

  • 適切な仕様を選択します。 ご利用のリザーブドインスタンスで、アプリケーションを確実に実行し、少なくとも1つのリクエストを処理できる、最も低コストのインスタンスタイプを選択します。

  • 高いバーストに備えてリザーブドインスタンスプールを使用します。 ご利用のサービスで突然の高トラフィックイベントが発生する可能性が高い場合は、初期負荷をより適切に吸収するためにリザーブドインスタンスプールを設定します。

課金

リザーブドインスタンスは継続的に実行され、課金が発生します。詳細については、以下をご参照ください。

関連ドキュメント