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

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

最終更新日:Nov 10, 2025

Java で記述されたアプリケーションなど、起動が遅いアプリケーションの場合、コミュニティ版 Knative のデフォルトのゼロスケールポリシーは、高いコールドスタートレイテンシーを引き起こすことがあります。ACK Knative は、リザーブドインスタンス機能によってこの問題を解決します。この機能は、低コストで常時稼働するインスタンスを維持することで、即時の応答性を確保しつつ、リソースコストを最適化します。

仕組み

コストを節約するため、コミュニティ版 Knative はトラフィックがない場合に Service をゼロ Pod にスケールダウンします。新しいリクエストが到着すると、システムはリソーススケジューリング、イメージのプル、アプリケーションの起動などを含むコールドスタートプロセスを経る必要があり、これにより最初のリクエストで大幅なレイテンシーが発生することがあります。

ACK Knative のリザーブドインスタンス機能は、アイドル期間中も 1 つ以上の低スペックのインスタンスを実行し続けることで、この動作を変更します。

ワークフロー:

  1. トラフィックの停止時: Service (Pod) はスケールインしますが、新しいリクエストに備えるため、少なくとも 1 つのリザーブドインスタンスが稼働状態を維持します。

  2. 最初のリクエスト到着時: 最初のリクエストが到着すると、2 つの操作が同時にトリガーされます (並列操作):

    • 即時応答: クエストは稼働中のリザーブドインスタンスに即座にルーティングされて処理されるため、コールドスタートのレイテンシーが回避されます。

    • スケールアウトのトリガー: Knative はトラフィックを処理するために、直ちに標準スペックのインスタンスを作成します。

  3. トラフィックの引き継ぎ: 最初の標準スペックのインスタンスの準備が整うと、後続のすべてのトラフィックはそのインスタンスにルーティングされます。

  4. リソースのクリーンアップ: 最初のリクエストの処理が完了した後、元のリザーブドインスタンスは自動的に終了します。

image

リザーブドインスタンスの使用方法

クラスターに Knative をデプロイ した後、Knative Service マニフェストに次のアノテーションを追加することで、リザーブドインスタンス機能を設定できます。

アノテーション

説明

knative.aliyun.com/reserve-instance: "enable"

リザーブドインスタンス機能を有効にします。

knative.aliyun.com/reserve-instance-type: <type>

リザーブドインスタンスのリソースタイプを指定します。サポートされている値は eci (デフォルト)、ecs、および acs です。

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

リザーブドインスタンスに Elastic Container Instance (ECI) を使用するには、まず ACK Virtual Node をインストールします。詳細については、「コンポーネント」をご参照ください。

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

特定の インスタンスタイプ を使用するには、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 リザーブドインスタンスの基本的な設定です。コンピューティングクラス (compute-class) と コンピュートクオリティ (compute-qos) を指定できます。

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
        # (オプション) ACS Pod のコンピュートクラスを設定します
        knative.aliyun.com/reserve-instance-acs-compute-class: "general-purpose"
        # (オプション) 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" 
        # ECS リザーブドインスタンスを有効にして設定します。1 つ以上のインスタンスタイプを設定できます。
        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:
          # 標準インスタンスのリソース設定
          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

本番運用時の注意点

  • 適切なスペックの選定: リザーブドインスタンスには、アプリケーションを確実に実行し、かつ最低 1 つのリクエストを処理できるインスタンスタイプの中から、最も低コストのものを選択してください。

  • 高バースト用のリザーブドプールの使用: 突発的な高トラフィックが想定されるサービスでは、初期負荷をより効果的に吸収できるようリザーブドインスタンスプールを設定してください。

課金

リザーブドインスタンスは常時稼働するため、料金が発生します。詳細については、以下をご参照ください。

関連ドキュメント