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

Container Compute Service:コンテナーのインプレーススケーリング

最終更新日:Nov 09, 2025

本番環境では、サーバーレス Pod に割り当てられるリソースは通常固定されています。ただし、Pod が消費するリソースは、さまざまなシナリオで動的に変動する可能性があります。これらの変動に対応するために、Container Compute Service (ACS) は、Pod の仕様を変更できるインプレーススケーリング機能を提供します。このトピックでは、ACS Pod のインプレーススケーリングについて説明し、この機能を使用してリソースコストを削減し、アプリケーションの起動を高速化するためのベストプラクティスを提供します。

背景情報

複雑な本番環境では、サービスが消費する計算能力が変動する可能性があります。これにより、Pod の容量計画が困難になります。たとえば、一部のアプリケーションは起動時に大量の CPU リソースを消費しますが、起動後は長期間にわたってリソース消費が低いままです。ステートフルアプリケーションまたはゲームアプリケーションは、その状態または持続的接続を維持しながら、ピーク時とオフピーク時の変動するビジネス需要に対応する必要があります。

これらのシナリオに対応するために、サーバーレス Pod は、実際の使用状況に合わせて、より詳細で柔軟なリソース仕様を必要とします。Pod が仕様を動的に変更し、オンデマンドでスケーリングできれば、容量計画がはるかに簡単になり、コストが実際のリソース消費とより一致するようになります。

ACS Pod のインプレーススケーリング機能を使用すると、約 10 秒の低レイテンシーでコンテナーの CPU リソースをホットアップデートできます。ACS の ack-advanced-vertical-pod-autoscaler (AVPA) コンポーネントと組み合わせることで、この機能は、変化するリソース要件を持つシナリオに対応するためのさまざまな自動スケーリング機能を提供します。

説明
  • ACS は、ComputeQoS=default を持つ汎用および計算最適化 ACS Pod の CPU リソースのインプレーススケーリングをサポートしています。

    • 柔軟なスペックアップとスペックダウンをサポートする最大リソース仕様は 16vCpu16Gi です。

    • サポートされているスケーリング範囲では、元の CPU 仕様を最大 100% までスケールアウトし、最大 50% までスケールインできます。たとえば、2vCpu4Gi ACS Pod のスケーリング範囲は 1vCpu4Gi から 4vCpu4Gi です。

    • インプレーススケーリング機能は、ACS リソースの可用性によっても制限されます。スケーリング後の構成がサポート範囲外の場合、最も近いサポートされている リソース仕様 に自動的に調整されます。たとえば、0.75vCpu1.5Gi の ACS Pod は自動的に 1vCpu2Gi に調整されます。

シナリオ

图片 1

インプレーススケーリングは、コンテナーを再起動せずにサイズ変更することをサポートします。この機能は、アプリケーションの起動高速化、ステートフルアプリケーションのインプレーススケーリング、アプリケーションにおけるローカル計算能力のホットスポットへの対応など、計算能力の使用量が変動するシナリオで使用できます。

具体的なシナリオは次のとおりです。

  • コンパイルやプリロードに大量の計算リソースを必要とするアプリケーションの起動高速化。起動時に多くの CPU リソースを割り当て、起動完了後にスケールダウンできます。

  • 負荷が増加したときの Redis などのステートフルアプリケーションの垂直スケーリング。

  • 大規模なリクエストや持続的接続セッションによるローカルホットスポットが発生するオンラインアプリケーションの垂直スケーリング。

説明
  • インプレーススケーリング後、アプリケーション Pod は新しい仕様に基づいて課金されます。スケーリングプロセス中またはスケーリングが失敗した場合、課金は元の仕様に基づいて継続されます。

  • インプレーススケーリングは、コンテナーの利用可能な CPU リソースを動的に調整できます。アプリケーションのプログラミング言語の特性に基づいて、これらの動的リソースを使用することをお勧めします。

警告

インプレーススケーリングは瞬時に行われるわけではありません。使用前にアプリケーションの容量バッファーを見積もることをお勧めします。この機能を使用して、数秒以内に発生するトラフィックおよび負荷のバーストに対応しないでください。

前提条件

Pod の手動スケーリング

ステップ 1: インプレーススケーリング機能ゲートを有効にする

  1. ACS コンソールにログインします。左側のナビゲーションウィンドウで、[クラスター] をクリックします。

  2. [クラスター] ページで、ターゲットクラスターを見つけてその ID をクリックします。左側のナビゲーションウィンドウで、[操作] > [アドオン] を選択します。

  3. [コアコンポーネント] エリアで、[Kube API Server > 設定] を選択します。[featureGates]InPlacePodVerticalScaling=true に設定して、インプレーススケーリング機能を有効にします。

    image

    説明

    設定中、[Kube API Server] カードのステータスが [実行中] に変わります。ステータスが [インストール済み] に戻ると、インプレースリソーススケーリング機能ゲートが有効になります。

ステップ 2: ACS Pod をスケーリングする

  1. [クラスター] ページで、管理するクラスターを見つけてその ID をクリックします。クラスター詳細ページの左側のナビゲーションウィンドウで、[ワークロード] > [デプロイメント] を選択します。

  2. [YAML から作成] をクリックし、次のサンプル YAML を使用して Pod を作成します。scaling.alibabacloud.com/enable-inplace-resource-resize: 'true' アノテーションは、Pod のインプレーススケーリングを有効にします。

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      labels:
        app: demo
      name: demo
      namespace: default
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: demo
      template:
        metadata:
          annotations:
            scaling.alibabacloud.com/enable-inplace-resource-resize: 'true'  # インプレーススケーリングを有効にします。
          labels:
            alibabacloud.com/compute-class: general-purpose
            alibabacloud.com/compute-qos: default
            app: demo
        spec:
          containers:
            - image: 'registry.cn-hangzhou.aliyuncs.com/acs-demo-ns/demo-java:java-with-metrics-v1'
              imagePullPolicy: IfNotPresent
              name: spring
              ports:
                - containerPort: 8080
                  protocol: TCP
              resources:
                limits:
                  cpu: 1
                  memory: 4Gi
                requests:
                  cpu: 1
                  memory: 4Gi

    Pod アノテーション設定項目

    設定項目の説明

    scaling.alibabacloud.com/enable-inplace-resource-resize

    Pod の作成時にこのアノテーションを指定して、現在の ACS Pod のインプレーススケーリングを有効にします。

    true

  3. Pod が作成されたら、[Pod] ページに移動し、[編集] をクリックして CPU リソースを 1 から 2 に手動で変更します。次に、[更新] をクリックします。

    image.png

  4. インプレーススケーリング機能が有効になった後、Pod の仕様が再起動なしで変更されることを確認できます。

    image

自動インプレーススケーリングを使用してアプリケーションの起動を高速化する

典型的な Java アプリケーションが良い例です。起動フェーズでは、クラスの読み込みやバイトコードのコンパイルなどの操作に大量のリソースを消費します。アプリケーションが定常状態に入ると、これらのリソースは解放されます。アプリケーションの起動を高速化し、通常運用中のコストを削減するために、サーバーレス Pod は起動時により多くのリソースを使用し、サービスの起動後にスケールダウンできます。

ACS は Java アプリケーションの起動高速化機能を提供します。ACS Pod を、宣言された仕様よりも多くのリソースで起動し、起動完了後に自動的に元の仕様にスケールダウンするように設定できます。JVM パラメーターの設定の詳細については、「JVM パラメーターを設定して Java アプリケーションの起動を高速化する」をご参照ください。

制限

  • 起動高速化機能: 起動高速化機能は、Pod の Ready 状態に依存してスケールイン操作を制御します。readiness プローブが設定されていない場合、コンテナーは起動するとすぐに準備完了と見なされ、自動スケールインのカウントダウンがすぐにトリガーされます。起動高速化機能が有効になっている Pod には、readiness プローブを設定することをお勧めします。

  • コンテナーの再起動シナリオ: コンテナーの再起動時に自動起動高速化を期待する場合、readiness プローブを設定しないと自動スケールアップが妨げられる可能性があります。

  • リソース設定要件: 起動高速化機能は、Pod の元のリソースに依存してスケールアップリソースを計算します。したがって、元の requests と limits の値を設定する必要があります。そうしないと、起動高速化機能が機能しない場合があります。

ステップ 1: インプレーススケーリング機能ゲートを有効にする

  1. 詳細については、「ステップ 1: インプレーススケーリング機能ゲートを有効にする」をご参照ください。

ステップ 2: ack-advanced-vertical-pod-autoscaler コンポーネントをインストールする

  1. 左側のナビゲーションウィンドウで、[アプリケーション] > [Helm] を選択します。[ack-advanced-vertical-pod-autoscaler] コンポーネントを検索してインストールします。詳細については、「Helm を使用して ACS でアプリケーションを管理する」をご参照ください。

    image

ステップ 3: インプレーススケーリングを使用してアプリケーションの起動を高速化する

  1. Java ワークロードを作成し、起動高速化機能を有効にします。YAML ファイルでは、scaling.alibabacloud.com/enable-inplace-resource-resize: 'true' に加えて、alibabacloud.com/startup-cpu-burst-factor および alibabacloud.com/startup-cpu-burst-duration-seconds アノテーションを使用して、起動 CPU バースト係数と起動 CPU バースト期間を設定する必要もあります。

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      labels:
        app: spring-with-burst
      name: spring-with-burst
      namespace: default
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: spring-with-burst
      template:
        metadata:
          annotations:
            alibabacloud.com/startup-cpu-burst-factor: '2' # 起動スケールアウト係数を 2 に設定します。初期 2C は 4C で起動し、コンテナーが Ready になった後、初期状態にスケールバックします。
            alibabacloud.com/startup-cpu-burst-duration-seconds: "30" # 指定しない場合、Pod が Ready になってから 30 秒後に自動的にスケールインされます。
            scaling.alibabacloud.com/enable-inplace-resource-resize: 'true' # インプレーススケーリングを有効にします。
          labels:
            alibabacloud.com/compute-class: general-purpose
            alibabacloud.com/compute-qos: default
            app: spring-with-burst
        spec:
          containers:
            - image: 'registry.cn-hangzhou.aliyuncs.com/acs-demo-ns/demo-java:java-with-metrics-v1'
              imagePullPolicy: IfNotPresent
              name: spring
              ports:
                - containerPort: 8080
                  protocol: TCP
              resources:
                limits:
                  cpu: 1
                  memory: 4Gi
                requests:
                  cpu: 1
                  memory: 4Gi
              readinessProbe:
                tcpSocket:
                  port: 8080
                initialDelaySeconds: 20
                periodSeconds: 10

    Pod アノテーション

    説明

    scaling.alibabacloud.com/enable-inplace-resource-resize

    ACS Pod のインプレーススケーリングを有効にします。

    true

    alibabacloud.com/startup-cpu-burst-factor

    ACS Pod が元の CPU 仕様の倍数で起動することを指定します。

    2

    説明

    インプレーススケーリング機能は、Pod を元の仕様の 2 倍までしかスケールアップできません。たとえば、元の仕様が 2 vCPU の場合、Pod は 4 vCPU で起動します。

    alibabacloud.com/startup-cpu-burst-duration-seconds

    起動完了後、ACS Pod がスケールインされるまで待機する秒数を指定します。

    30 以上

    説明

    デフォルト値は 30 秒です。Pod は Ready 状態になってから 30 秒後にスケールインされます。Pod が Ready にならない場合、スケールアップされた状態のままになります。

    alibabacloud.com/startup-cpu-burst-disable-restart

    オプション。コンテナーの再起動時に自動スケールアップを無効にします。

    true

    説明

    このアノテーションを追加しない場合、コンテナーの再起動時に自動スケールアップが有効になります。

ステップ 4: Pod の作成とサービスの起動プロセスを観察する

アプリケーションが作成された後、その詳細ページに移動します。Pod が 2 vCPU と 4 GiB のメモリで作成されていることがわかります。Pod が起動し、CPU バースト期間が終了すると、Pod は自動的に 1 vCPU と 4 GiB のメモリにスケールダウンされます。

  1. Pod イベントの表示

    [イベント] タブで [Pod] を選択して、スケールダウンの詳細を表示します。この例では、イベントメッセージ Starting to resize resource down for container: spring cpu: 2 -> 1, memory: 4Gi -> 4Gi が表示されます。

    image

説明

イベントをチェックしてスケーリングの進行状況を監視するだけでなく、Pod の status.resize フィールドを確認することもできます。空でない値は、Pod がスケーリング中であることを示します。

  1. Pod モニタリングデータの表示

    [モニタリング] タブの [CPU 情報] セクションで、CPU 使用率の変化を観察できます。

    image

ステップ 5: Pod コンテナーの再起動後のサービス起動プロセスを観察する

ack-advanced-vertical-pod-autoscaler 0.0.2 以降のバージョンでは、Pod の再起動後、デフォルトで Pod のインプレーススケーリングが有効になります。Pod に alibabacloud.com/startup-cpu-burst-disable-restart アノテーションを追加して、この機能を明示的に無効にすることができます。

コンテナー内のプロセス 1 に kill シグナルを送信してコンテナーのクラッシュをシミュレートし、対応するサービスが高速化されるかどうかを確認します。コマンドを実行する前に、{POD_NAME} を実際の Pod 名に置き換えてください。

kubectl exec -it {POD_NAME} -- kill 1

コンテナーが再起動すると、Pod の仕様は 2vCpu4G に変更されます。新しいコンテナーが実行され、事前設定された遅延が経過すると、Pod の仕様は自動的に 1vCpu4Gi にスペックダウンされます。

  1. Pod イベントの表示

    [イベント] タブで [Pod] を選択して、スペックアップとスペックダウンの詳細を表示します。この例では、イベントメッセージは Starting to resize resource for container: spring cpu: 1 -> 2, memory: 4Gi -> 4GiStarting to resize resource for container: spring cpu: 2 -> 1, memory: 4Gi -> 4Gi です。

    image

  2. Pod モニタリングデータの表示

    [モニタリング] タブの [CPU 情報] セクションで、CPU 使用率が時間とともに変化することがわかります。

    image