ACK ノードプールでは、新しいノードのデータディスクを設定し、既存のデータディスクのスナップショットからディスクを初期化できます。スナップショットには、事前にダウンロードされたコンテナイメージ、事前にトレーニングされた大規模な機械学習モデル、必要なシステムイメージ、その他の重要な静的リソースなど、必要なすべてのキャッシュデータを含めることができます。新しいノードがノードプールに参加すると、スナップショットからキャッシュデータを自動的に回復します。これにより、最初の実行時のデータ読み込み時間が大幅に短縮されます。このトピックでは、データディスクのスナップショットを使用してワークロードのデプロイメントとノードの初期化を高速化する方法を示す 2 つのシナリオについて説明します。
シナリオ 1: アプリケーション起動の高速化
このシナリオでは、Qwen-7B 大規模モデルアプリケーションのワークロードを例として使用します。ECS インスタンスを使用して ac2/qwen コンテナイメージをデータディスクにプリロードし、イメージをキャッシュしてスナップショットを作成する方法を示します。その後、このスナップショットをノードプール内の新しいノードのデータディスクとして使用できます。これらの新しいノードにワークロードをスケジュールすると、アプリケーションの起動が高速化されます。
データディスクのスナップショットを使用したアプリケーション起動の高速化
ステップ 1: データディスクを持つ ECS インスタンスの作成
データディスクのスナップショットを作成するために、データディスクを含む ECS インスタンスを作成します。詳細については、「ウィザードを使用したインスタンスの作成」をご参照ください。
必要なデータディスクサイズを決定して、十分なスペースが確保されるようにします。
インスタンスが作成されたら、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 インスタンスにアタッチされているが、どのホストディレクトリにもマウントされていないことを示しています。
次のコマンドを実行して、データディスクのファイルシステムを初期化し、データディスクをホストディレクトリにマウントします。このトピックでは、
/mnt/exampleディレクトリを例として使用します。mkdir -p /mnt/example mkfs.ext4 /dev/vdb mount /dev/vdb /mnt/example
ステップ 2: ランタイムのインストール
必要なランタイムバージョンを確認します。バージョンは、スナップショットを使用するクラスターノードのランタイムバージョンと同じである必要があります。
ACK コンソールにログインします。左側のナビゲーションウィンドウで、[クラスター] をクリックします。
クラスター ページで、管理するクラスターを見つけてその名前をクリックします。左側のナビゲーションウィンドウで、 を選択します。
ターゲットノードプールをクリックします。[基本情報] タブで、[コンテナーランタイム] を表示します。このトピックでは、containerd 1.6.36 を例として使用します。
ECS インスタンスで、次のコマンドを実行してサブディレクトリをバインドしてマウントします。
mkdir -p /var/lib/containerd mkdir -p /mnt/example/containerd/ mount --bind /mnt/example/containerd/ /var/lib/containerdcontainerd 1.6.36 ランタイムをインストールします。詳細については、「containerd の開始」をご参照ください。
ステップ 3: コンテナイメージのダウンロードとスナップショットの作成
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.972544176sECS インスタンスのデータディスクのスナップショットを作成します。詳細については、「スナップショットの作成」をご参照ください。
ステップ 4: ACK ノードプールでデータディスクのスナップショットを選択し、ノードを追加する
ノードプールを作成します。作成プロセス中に、データディスクを追加します。前のステップで作成したスナップショットを使用してディスクを作成します。ノードの期待数を 1 に設定します。
重要スナップショットを使用するデータディスクは、最後のデータディスクである必要があります。高速化の仕組みの詳細については、「データディスクキャッシュの高速化の仕組み」をご参照ください。
ノードプール内のノードにログインし、次のコマンドを実行してコンテナイメージを表示します。
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 コンテナイメージがすでに存在することを示しています。
イメージはノードにキャッシュされているため、Qwen-7B アプリケーションのワークロードはノードにスケジュールされた後、すぐに実行状態になります。
データディスクのスナップショットを高速化に使用せずにアプリケーションをデプロイする
「ステートレスワークロード Deployment の作成」の手順に従って Deployment を作成できます。作成プロセス中に、[成果物] から ac2/qwen コンテナイメージを選択します。
シナリオ 2: ノード初期化の高速化
このシナリオでは、ノードの初期化を高速化する方法について説明します。ノードの初期化は、ノードが作成済み状態から準備完了状態に変わるプロセスです。手順は次のとおりです。
ECS インスタンスを使用して、ACK に必要な kubelet とコンテナイメージをデータディスクにプリロードします。
kubelet とコンテナイメージをキャッシュし、スナップショットを作成します。
このスナップショットをノードプール内の新しいノードのデータディスクとして使用して、ノードの初期化プロセスを高速化します。
このシナリオで提供されるノードの初期化時間は理論値です。実際の時間は動作環境によって異なります。
データディスクのスナップショットを使用して 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: 必要なシステムコンテナイメージのエクスポート
データディスクのスナップショットを使用するクラスターで、新しいノードを作成し、ECS インスタンスに接続します。
クラスターノードで、次のスクリプトを使用して必要なシステムイメージをエクスポートします。スクリプトが実行されると、現在のディレクトリに
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: スナップショットの作成とクラスターノードのスケールアウト
ECS インスタンスを作成し、コンテナーランタイムをインストールします。詳細については、「シナリオ 1」、「ステップ 1」、および「ステップ 2」をご参照ください。
ステップ 1 で生成した
image_list.txtファイルを ECS インスタンスにアップロードします。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"ECS インスタンスを停止し、データディスクのスナップショットを作成します。詳細については、「スナップショットの作成」をご参照ください。
次の要件を満たすノードプールを作成して、データディスクのスナップショットを設定します。詳細については、「ノードプールの作成」をご参照ください。
データディスク: データディスクを追加し、作成したスナップショットを使用してディスクを作成します。
重要スナップショットを使用するデータディスクは、最後のデータディスクである必要があります。高速化の仕組みの詳細については、「データディスクキャッシュの高速化の仕組み」をご参照ください。
ノードプールを作成するときに イメージアクセラレータを有効にする を選択すると、データディスクのスナップショット作成の効率に影響する可能性があります。
カスタムデータ: ノードがノードプールに参加するときに yum ソースの更新をスキップするには、コマンド
touch /var/.skip-yumを追加します。
ノードの期待数: これを 1 に設定します。
データディスクのスナップショットによって高速化されたノードが、作成済み状態から準備完了状態に変わるまでにかかる時間を確認します。詳細については、「ノードイベントの表示」をご参照ください。
データディスクのスナップショットを使用せずに ACK システムコンポーネントイメージをキャッシュする
ContainerOS イメージを使用してクラスターノードを作成できます。その後、データディスクのスナップショットによって高速化されていないノードが、作成済み状態から準備完了状態に変わるまでにかかる時間を確認できます。詳細については、「ノードのイベントを確認する」をご参照ください。
データディスクキャッシュの高速化の仕組み
ノードプールを作成するときに、データディスクを追加できます。データディスクが containerd ディレクトリに適用され、データディスクのスナップショットを使用する場合、スナップショットからのイメージキャッシュが containerd ディレクトリにロードされます。ワークロードを作成するときに、キャッシュされたイメージを直接使用できます。これにより、アプリケーションの起動時間が短縮されます。