コンテナイメージは、レイヤーに保存された圧縮データです。コンテナが起動すると、コンテナーランタイムは通常、イメージデータをレイヤーごとにダウンロードして解凍します。ほとんどのビジネスシナリオでは、コンテナーランタイムはコンテナイメージからデータの一部を読み取るだけで済みます。不要なデータのダウンロードと解凍は、システムリソースを消費し、コンテナの起動時間を増加させます。Alibaba Cloud Container Service for Kubernetes (ACK) は、Data Accelerator for Disaggregated Infrastructure (DADI) テクノロジーに基づいてコンテナイメージのオンデマンド読み込みをサポートしています。この機能により、イメージ全体のダウンロードを回避し、イメージデータをオンザフライで解凍できるため、アプリケーションの起動時間が大幅に短縮されます。
高速化の効果は、イメージサイズやイメージリポジトリのネットワーク条件などの要因によって異なります。テストによると、Docker Hub からの 1.34 GB の NodeBB イメージの場合、イメージのプルフェーズには 36 秒かかり、アプリケーションの合計起動時間は 38 秒です。高速化イメージを使用すると、イメージのプルフェーズはわずか 4 秒で、アプリケーションの合計起動時間はわずか 9 秒です。
このトピックで提供されるイメージのプル時間は、参考用です。実際のデータは、お使いの動作環境によって異なります。
制限事項
次の要件を満たす ACK マネージドクラスター のみがサポートされます。
クラスターのバージョンが 1.26 以降であること。クラスターをアップグレードするには、「クラスターを手動でアップグレードする」をご参照ください。
ノードランタイムが containerd であり、containerd のバージョンが 1.6.34 以降であること。ランタイムをアップグレードするには、「ノードプールをアップグレードする」をご参照ください。
DADI のフルモードのみがサポートされます。インデックスのみのモードはサポートされていません。
ステップ 1: 高速化イメージの取得
オープンソースツールを使用するか、ACR Enterprise Edition が提供するコンテナイメージのオンデマンド読み込み機能を使用して、既存のコンテナイメージを DADI 高速化イメージフォーマットに変換できます。
オープンソースツールの使用
DADI を使用して、既存のコンテナイメージを DADI イメージフォーマットに変換できます。
次のコマンドを実行して、snapshotter 依存関係をインストールします。
# インスタンスアーキテクチャのインストールパッケージをダウンロードします。 wget https://github.com/containerd/accelerated-container-image/releases/download/v1.2.3/overlaybd-snapshotter-1.2.3-20241016090917.0c2f057.x86_64.rpm rpm -ivh overlaybd-snapshotter-1.2.3-20241016090917.0c2f057.x86_64.rpm次のコマンドを実行して、overlaybd 依存関係をインストールします。
# インスタンスアーキテクチャのインストールパッケージをダウンロードします。 wget https://github.com/containerd/overlaybd/releases/download/v1.0.13/overlaybd-1.0.13-20240821.a117098.el8.x86_64.rpm rpm -ivh overlaybd-1.0.13-20240821.a117098.el8.x86_64.rpm次のコマンドを実行して、イメージを変換します。
この例では、ACR イメージリポジトリを使用します。セルフマネージドイメージリポジトリを使用する場合は、コマンド内のイメージアドレスとアカウント認証情報を変更する必要があります。
/opt/overlaybd/snapshotter/convertor -u user:password -r xxxxx-registry.cn-hangzhou.cr.aliyuncs.com/default/redis -i latest -o latest_obd_new
ACR Enterprise Edition の使用
ACR Enterprise Edition (Standard または Premium) では、リポジトリレベルでコンテナイメージのオンデマンド読み込みを設定できます。この機能は、プッシュした元のイメージを自動的に高速化イメージに変換します。変換時間はイメージサイズによって異なり、元のイメージには影響しません。詳細と制限事項については、「コンテナイメージのオンデマンド読み込み」をご参照ください。
高速化イメージの名前空間とリポジトリ名は、元のイメージと同じです。高速化イメージのタグは、元のイメージの tag に _accelerated サフィックスが付いたものです。
Container Registry コンソールにログインします。トップメニューバーで、リージョンを選択します。
左側のナビゲーションウィンドウで、[インスタンス] をクリックします。[インスタンス] ページで、管理する Enterprise Edition インスタンスの名前をクリックします。
左側のナビゲーションウィンドウで、 を選択します。
管理するリポジトリの名前をクリックします。[詳細] ページで、左上隅にある [編集] をクリックします。
[基本情報の変更] ダイアログボックスで、[イメージの高速化] を有効にし、[フルモード] を選択して、[OK] をクリックします。
説明イメージの高速化を設定すると、その後プッシュされたイメージは自動的に変換タスクをトリガーします。イメージ変換の完了時に通知を受け取るには、イベント通知を設定できます。たとえば、式を
_accelerated$に設定します。詳細については、「イベント通知」をご参照ください。
ステップ 2: ノードプールでコンテナイメージの高速化機能を有効にする
DADI 高速化イメージをサポートするには、ACK コンソールで新規または既存のノードプールに対して [コンテナイメージの高速化] を有効にできます。
新しいノードプールで有効にする
ACK コンソールにログインします。左側のナビゲーションウィンドウで、[クラスター] をクリックします。
クラスター ページで、管理するクラスターを見つけてその名前をクリックします。左側のナビゲーションウィンドウで、 を選択します。
[ノードプール] ページで、[詳細オプション] セクションの [Container Registry の高速化] を有効にします。詳細については、「ノードプールの作成と管理」をご参照ください。
既存のノードプールで有効にする
[コンテナイメージの高速化] を有効または無効にすると、変更は新しいノードにのみ適用されます。変更を既存のノードに適用するには、ノードプールからノードを削除してから、ノードプールに再度追加する必要があります。詳細については、「ノードの削除」および「既存ノードの追加」をご参照ください。
ACK コンソールにログインします。左側のナビゲーションウィンドウで、[クラスター] をクリックします。
クラスター ページで、管理するクラスターを見つけてその名前をクリックします。左側のナビゲーションウィンドウで、 を選択します。
[ノードプール] ページで、ターゲットノードプールを見つけ、[アクション] 列の [編集] をクリックします。[詳細オプション] セクションで、[Container Registry の高速化] を選択し、画面の指示に従ってノードプールの ConfigMap を更新します。
[ノードプール] ページで、ノードプールの [ステータス] 列に [更新中] が表示されている場合、ノードプールは更新中です。[アクティブ] が表示されている場合、更新は完了です。
ステップ 3: 高速化イメージを使用してアプリケーションを作成する
1. コンテナイメージのプル資格情報の設定
aliyun-acr-acceleration-suite コンポーネントのインストール
ACK コンソールにログインします。左側のナビゲーションウィンドウで、[クラスター] をクリックします。
クラスター ページで、管理するクラスターを見つけてその名前をクリックします。左側のナビゲーションウィンドウで、[アドオン] をクリックします。
[アドオン] ページで、[その他] セクションの aliyun-acr-acceleration-suite コンポーネントを見つけ、[インストール] をクリックします。
プル資格情報の設定
アプリケーションがプライベートイメージをプルするためにシークレットを使用する必要がない場合は、このステップをスキップして「高速化イメージを使用するアプリケーションの作成」に進むことができます。
次のいずれかの方法でイメージのプル資格情報を設定できます。
ACR Enterprise Edition インスタンスのパスワードフリープラグインを設定する
パスワードフリープラグインをインストールして設定します。ACK クラスターにパスワードフリープラグインを正しくインストールすると、システムは ACR リポジトリのアクセス資格情報を対象のワークロードに自動的に挿入します。アクセス資格情報のライフサイクルやワークロードとの関連付けを手動で管理する必要はありません。詳細については、「シークレットなしで ACR イメージをプルする」をご参照ください。
セルフマネージドイメージリポジトリの Secret を手動で作成する
次のコマンドを実行して、
kubernetes.io/dockerconfigjsonタイプの Secret を作成し、コンテナイメージリポジトリのアクセス資格情報を設定します。kubectl create secret docker-registry <SecretName> --docker-server=<RegistryVpcDomain> --docker-username=<UserName> --docker-password=<Password>次のコマンドを実行して、ラベル
images.alibabacloud.com/accelerated: trueを Secret に追加します。kubectl label secrets <SecretName> images.alibabacloud.com/accelerated="true"
2. 高速化イメージを使用するアプリケーションの作成
次のサンプル YAML コンテンツを使用して Pod を作成します。Pod は、イメージの高速化が有効になっているノードにスケジュールされます。
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 1
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
nodeSelector:
alibabacloud.com/image-accelerate-enabled: "true" # ここにノードセレクターラベルを追加します。
containers:
- name: test
image: xxxxx-registry.cn-hangzhou.cr.aliyuncs.com/default/redis:latest_obd_new # ここに高速化イメージのアドレスを入力します。
command: ["sleep", "3600"]関連ドキュメント
データディスクのスナップショットを使用してワークロードとノードの初期化を高速化するには、「データディスクのスナップショットを使用して大規模モデルアプリケーションの起動を高速化する」をご参照ください。