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

Container Service for Kubernetes:データディスクのスナップショットを使用して大規模モデルアプリケーションの起動を高速化する

最終更新日:Nov 09, 2025

ACK ノードプールでは、新しいノードのデータディスクを設定し、既存のデータディスクのスナップショットからディスクを初期化できます。スナップショットには、事前にダウンロードされたコンテナイメージ、事前にトレーニングされた大規模な機械学習モデル、必要なシステムイメージ、その他の重要な静的リソースなど、必要なすべてのキャッシュデータを含めることができます。新しいノードがノードプールに参加すると、スナップショットからキャッシュデータを自動的に回復します。これにより、最初の実行時のデータ読み込み時間が大幅に短縮されます。このトピックでは、データディスクのスナップショットを使用してワークロードのデプロイメントとノードの初期化を高速化する方法を示す 2 つのシナリオについて説明します。

シナリオ 1: アプリケーション起動の高速化

このシナリオでは、Qwen-7B 大規模モデルアプリケーションのワークロードを例として使用します。ECS インスタンスを使用して ac2/qwen コンテナイメージをデータディスクにプリロードし、イメージをキャッシュしてスナップショットを作成する方法を示します。その後、このスナップショットをノードプール内の新しいノードのデータディスクとして使用できます。これらの新しいノードにワークロードをスケジュールすると、アプリケーションの起動が高速化されます。

データディスクのスナップショットを使用したアプリケーション起動の高速化

ステップ 1: データディスクを持つ ECS インスタンスの作成

  1. データディスクのスナップショットを作成するために、データディスクを含む ECS インスタンスを作成します。詳細については、「ウィザードを使用したインスタンスの作成」をご参照ください。

    必要なデータディスクサイズを決定して、十分なスペースが確保されるようにします。
  2. インスタンスが作成されたら、ECS インスタンスにログインし、次のコマンドを実行してディスク情報を表示します。

    fdisk -l

    予想される出力:

    Disk /dev/vda: 40 GiB, 42949672960 bytes, 83886080 sectors
    Units: sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    Disklabel type: gpt
    Disk identifier: F51132A7-67B1-4650-806D-FD0DExxxxxxx
    
    Device      Start      End  Sectors  Size Type
    /dev/vda1    2048     6143     4096    2M BIOS boot
    /dev/vda2    6144   415743   409600  200M EFI System
    /dev/vda3  415744 83886046 83470303 39.8G Linux filesystem
    
    
    Disk /dev/vdb: 40 GiB, 42949672960 bytes, 83886080 sectors
    Units: sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes

    出力は、ブロックデバイス /dev/vdb が ECS インスタンスにアタッチされているが、どのホストディレクトリにもマウントされていないことを示しています。

  3. 次のコマンドを実行して、データディスクのファイルシステムを初期化し、データディスクをホストディレクトリにマウントします。このトピックでは、/mnt/example ディレクトリを例として使用します。

    mkdir -p /mnt/example
    mkfs.ext4 /dev/vdb
    mount /dev/vdb /mnt/example

ステップ 2: ランタイムのインストール

  1. 必要なランタイムバージョンを確認します。バージョンは、スナップショットを使用するクラスターノードのランタイムバージョンと同じである必要があります。

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

    2. クラスター ページで、管理するクラスターを見つけてその名前をクリックします。左側のナビゲーションウィンドウで、[ノード] > [ノードプール] を選択します。

    3. ターゲットノードプールをクリックします。[基本情報] タブで、[コンテナーランタイム] を表示します。このトピックでは、containerd 1.6.36 を例として使用します。

  2. ECS インスタンスで、次のコマンドを実行してサブディレクトリをバインドしてマウントします。

    mkdir -p /var/lib/containerd
    mkdir -p /mnt/example/containerd/
    mount --bind /mnt/example/containerd/ /var/lib/containerd
  3. containerd 1.6.36 ランタイムをインストールします。詳細については、「containerd の開始」をご参照ください。

ステップ 3: コンテナイメージのダウンロードとスナップショットの作成

  1. ECS インスタンスで、次のコマンドを実行して必要なイメージをプルします。

    ctr -n k8s.io images pull ac2-registry.cn-hangzhou.cr.aliyuncs.com/ac2/qwen:7b-pytorch2.2.0.1-alinux3.2304

    予想される出力:

    ac2-registry.cn-hangzhou.cr.aliyuncs.com/ac2/qwen:7b-pytorch2.2.0.1-alinux3.2304: resolved       |++++++++++++++++++++++++++++++++++++++| 
    index-sha256:26f7ec425ca145b75edea364a51aa295587ddd5d65ac204e4e6da0e51bddb357:    done           |++++++++++++++++++++++++++++++++++++++| 
    manifest-sha256:f6d5fb3791e6b6a3213b44ede5bec8e4a3b7fbd4ff4ba22ace00a10b83a4982a: done           |++++++++++++++++++++++++++++++++++++++| 
    layer-sha256:bf2e4c7c66fc8341e90fb1a2f5f19c3b76b692054d54c42095d5fb9b18c1fac8:    done           |++++++++++++++++++++++++++++++++++++++| 
    layer-sha256:fec856349732affc95608fc6e36d9c9cb50247901696df2046a781a3969e5360:    done           |++++++++++++++++++++++++++++++++++++++| 
    layer-sha256:ed96823de6cfad0ef1b9de97e427f41160817c98e9bebf90ba8cc37992eabc96:    done           |++++++++++++++++++++++++++++++++++++++| 
    layer-sha256:9df511db38b7e057b13fa70a4f9e4a7e65e7efec867b2668908634181cac38a9:    done           |++++++++++++++++++++++++++++++++++++++| 
    layer-sha256:1a4373bb9d93a3b5ada44eabc5fc42a548124703fcba53e8085e3392c85649b1:    done           |++++++++++++++++++++++++++++++++++++++| 
    layer-sha256:5725de981ff2b5977566f75731fb218716625462d0bc5ee519b9923965b5a352:    done           |++++++++++++++++++++++++++++++++++++++| 
    config-sha256:5d25192c5dd2dfe79ead390db8668baaf10667e5ae789420cda953291f91559f:   done           |++++++++++++++++++++++++++++++++++++++| 
    layer-sha256:af616670f1a58fbbccff2e7053aa93994bdcc539ab388b668afd8ddf8437ee3d:    done           |++++++++++++++++++++++++++++++++++++++| 
    layer-sha256:da5d933bec7b35e1ca604c002d06a18e3b3b5e52420edaa8e85e56e8853641b7:    done           |++++++++++++++++++++++++++++++++++++++| 
    layer-sha256:cbfd4016879986762938d503ee88832c0f32989c07a0e41966f0fdbdb4d82d9f:    done           |++++++++++++++++++++++++++++++++++++++| 
    layer-sha256:0c2891fbd11945ec68c8a936413f844957ece8196c595f64f683531649293f5b:    done           |++++++++++++++++++++++++++++++++++++++| 
    layer-sha256:ef52560218e4372dd5bc40de38a2032d66fad82129b39e622b020038220327fc:    done           |++++++++++++++++++++++++++++++++++++++| 
    layer-sha256:a5d4fb6719df2b4228e2ac875522cae82159c42fd5f60d4de4bf53ece0862368:    done           |++++++++++++++++++++++++++++++++++++++| 
    layer-sha256:30b9d466ccc9dfbe42ddfb86f57e526f095827cbff25aaa0ff98d861ad791f45:    done           |++++++++++++++++++++++++++++++++++++++| 
    layer-sha256:6df931e10a58a685f5cfb9bfc29e9127e1145cc3aa05209316edc820a6ebc00b:    done           |++++++++++++++++++++++++++++++++++++++| 
    elapsed: 66.3s                                                                    total:  780.8  (11.8 MiB/s)                                      
    unpacking linux/amd64 sha256:26f7ec425ca145b75edea364a51aa295587ddd5d65ac204e4e6da0e51bddb357...
    done: 17.972544176s
  2. ECS インスタンスのデータディスクのスナップショットを作成します。詳細については、「スナップショットの作成」をご参照ください。

ステップ 4: ACK ノードプールでデータディスクのスナップショットを選択し、ノードを追加する

  1. ノードプールを作成します。作成プロセス中に、データディスクを追加します。前のステップで作成したスナップショットを使用してディスクを作成します。ノードの期待数を 1 に設定します。

    重要

    スナップショットを使用するデータディスクは、最後のデータディスクである必要があります。高速化の仕組みの詳細については、「データディスクキャッシュの高速化の仕組み」をご参照ください。

  2. ノードプール内のノードにログインし、次のコマンドを実行してコンテナイメージを表示します。

    sudo crictl images

    予想される出力:

    IMAGE                                                                     TAG                              IMAGE ID            SIZE
    ac2-registry.cn-hangzhou.cr.aliyuncs.com/ac2/qwen                         7b-pytorch2.2.0.1-alinux3.2304   5d25192c5dd2d       820MB
    .......

    出力は、ac2-registry.cn-hangzhou.cr.aliyuncs.com/ac2/qwen コンテナイメージがすでに存在することを示しています。

  3. イメージはノードにキャッシュされているため、Qwen-7B アプリケーションのワークロードはノードにスケジュールされた後、すぐに実行状態になります。

データディスクのスナップショットを高速化に使用せずにアプリケーションをデプロイする

ステートレスワークロード Deployment の作成」の手順に従って Deployment を作成できます。作成プロセス中に、[成果物] から ac2/qwen コンテナイメージを選択します。

シナリオ 2: ノード初期化の高速化

このシナリオでは、ノードの初期化を高速化する方法について説明します。ノードの初期化は、ノードが作成済み状態から準備完了状態に変わるプロセスです。手順は次のとおりです。

  1. ECS インスタンスを使用して、ACK に必要な kubelet とコンテナイメージをデータディスクにプリロードします。

  2. kubelet とコンテナイメージをキャッシュし、スナップショットを作成します。

  3. このスナップショットをノードプール内の新しいノードのデータディスクとして使用して、ノードの初期化プロセスを高速化します。

説明

このシナリオで提供されるノードの初期化時間は理論値です。実際の時間は動作環境によって異なります。

データディスクのスナップショットを使用して ACK に必要な kubelet をキャッシュする

mkdir -p /mnt/example/ack
export KUBE_VERSION="1.32.1-aliyun.1"
export REGION="cn-hangzhou"
wget http://aliacs-k8s-$REGION.oss-$REGION-internal.aliyuncs.com/public/pkg/kubernetes/kubernetes-$KUBE_VERSION-linux-amd64.tar.gz
tar -xvf kubernetes-$KUBE_VERSION-linux-amd64.tar.gz
mv pkg/kubernetes /mnt/example/ack/

データディスクのスナップショットを使用して ACK に必要なイメージをキャッシュする

重要

システムコンポーネントのバージョンは、アップグレード中に変更される場合があります。これにより、データディスクキャッシュ内のコンテナイメージのバージョンとデプロイされたイメージのバージョンが一致しなくなる可能性があります。この場合、新しいデータディスクのスナップショットを作成する必要があります。コンポーネントの変更の詳細については、「ACK コンポーネントのリリースノート」をご参照ください。スナップショットは速やかに更新してください。

ステップ 1: 必要なシステムコンテナイメージのエクスポート

  1. データディスクのスナップショットを使用するクラスターで、新しいノードを作成し、ECS インスタンスに接続します

  2. クラスターノードで、次のスクリプトを使用して必要なシステムイメージをエクスポートします。スクリプトが実行されると、現在のディレクトリに image_list.txt ファイルが生成されます。

    #!/bin/bash
    
    # 出力ファイルパスを設定します。
    OUTPUT_FILE="./image_list.txt"
    
    # 出力ファイルを削除または作成します。
    > "$OUTPUT_FILE"
    
    # すべてのコンテナイメージの名前とタグを取得します。
    images=$(crictl images --no-trunc|awk 'NR>1 {print $1 ":" $2}')
    
    # 各イメージを走査してエクスポートします。
    for image in $images; do
      echo "$image" >> "$OUTPUT_FILE"
    done
    
    echo "すべてのイメージが $OUTPUT_FILE にエクスポートされました"

ステップ 2: スナップショットの作成とクラスターノードのスケールアウト

  1. ECS インスタンスを作成し、コンテナーランタイムをインストールします。詳細については、「シナリオ 1」、「ステップ 1」、および「ステップ 2」をご参照ください。

  2. ステップ 1 で生成した image_list.txt ファイルを ECS インスタンスにアップロードします。

  3. ECS インスタンスで、次のスクリプトを実行して、必要なすべてのシステムコンポーネントのコンテナイメージを自動的にプルします。crictl コマンドがない場合は、「crictl のインストール」を参照してインストールしてください。

    #!/bin/bash
    
    # 入力ファイルパスを設定します。
    INPUT_FILE="./image_list.txt" 
    
    # ファイルが存在するかどうかを確認します。
    if [ ! -f "$INPUT_FILE" ]; then
      echo "エラー: ファイル $INPUT_FILE が存在しません!"
      exit 1
    fi
    
    # 入力ファイルの各行 (各イメージ) を走査します。
    while IFS= read -r image; do
      if [ -n "$image" ]; then  # 行が空でないことを確認します。
        echo "イメージ $image をプルしています..."
    
        # crictl pull を使用してイメージをプルします。
        crictl pull "$image"
    
        if [ $? -eq 0 ]; then
          echo "イメージ $image は正常にプルされました!"
        else
          echo "イメージ $image のプルに失敗しました!"
        fi
      fi
    done < "$INPUT_FILE"
  4. ECS インスタンスを停止し、データディスクのスナップショットを作成します。詳細については、「スナップショットの作成」をご参照ください。

  5. 次の要件を満たすノードプールを作成して、データディスクのスナップショットを設定します。詳細については、「ノードプールの作成」をご参照ください。

    1. データディスク: データディスクを追加し、作成したスナップショットを使用してディスクを作成します。

      重要
    2. カスタムデータ: ノードがノードプールに参加するときに yum ソースの更新をスキップするには、コマンド touch /var/.skip-yum を追加します。

      image

    3. ノードの期待数: これを 1 に設定します。

  6. データディスクのスナップショットによって高速化されたノードが、作成済み状態から準備完了状態に変わるまでにかかる時間を確認します。詳細については、「ノードイベントの表示」をご参照ください。

データディスクのスナップショットを使用せずに ACK システムコンポーネントイメージをキャッシュする

ContainerOS イメージを使用してクラスターノードを作成できます。その後、データディスクのスナップショットによって高速化されていないノードが、作成済み状態から準備完了状態に変わるまでにかかる時間を確認できます。詳細については、「ノードのイベントを確認する」をご参照ください。

データディスクキャッシュの高速化の仕組み

ノードプールを作成するときに、データディスクを追加できます。データディスクが containerd ディレクトリに適用され、データディスクのスナップショットを使用する場合、スナップショットからのイメージキャッシュが containerd ディレクトリにロードされます。ワークロードを作成するときに、キャッシュされたイメージを直接使用できます。これにより、アプリケーションの起動時間が短縮されます。