従来のコンテナイメージは、コンテナーを起動する前に、完全にダウンロードして展開する必要があります。しかし、コンテナーの起動に必要なイメージコンテンツは、ごく一部である場合があります。不要なイメージコンテンツを読み込むと、コンテナーの起動プロセスに余分な時間がかかります。Alibaba Cloud Container Registry (ACR) の Enterprise Edition は、Data Accelerator for Disaggregated Infrastructure (DADI) サービスを提供し、高速化イメージを作成してホストします。Container Compute Service (ACS) は、DADI の overlaybd 形式の高速化イメージをサポートしています。これにより、コンテナーはオンデマンドでイメージファイルを読み込むことができ、起動時間が大幅に短縮されます。このトピックでは、ACR Enterprise Edition を使用して高速化イメージを作成し、ACK でそれを使用してコンテナーの起動を高速化する方法について説明します。
前提条件
ACK クラスターが作成されていること。詳細については、「ACK クラスターの作成」をご参照ください。
ACR Enterprise Edition の Standard Edition または Premium Edition のインスタンスが作成されていること。詳細については、「Enterprise Edition インスタンスの作成」をご参照ください。
ACK クラスターからのアクセスを許可するように ACR Enterprise Edition インスタンスが設定されていること。VPC 経由のアクセスを許可するには、ACK クラスターが存在する VPC を追加します。詳細については、「VPC 経由のアクセスの設定」をご参照ください。インターネット経由のアクセスを許可するには、ホワイトリストで ACK クラスターからのアクセスが許可されていることを確認してください。詳細については、「インターネット経由のアクセスの設定」をご参照ください。
インデックスのみの高速化モードを使用する場合は、トライアルを有効にするためにチケットを送信する必要があります。
背景情報
DADI の高速化イメージを使用すると、ワークロードの起動を高速化し、オンデマンドでイメージデータを読み込み、オンラインでイメージを解凍できます。これにより、アプリケーションの配信効率と伸縮性が大幅に向上します。詳細については、「コンテナイメージリソースのオンデマンド読み込み」をご参照ください。
高速化の効果は、イメージサイズやイメージリポジトリのネットワーク条件などの要因によって異なります。テストによると、Docker Hub の NodeBB イメージ (1.34 GB) に基づくアプリケーションの場合、イメージのプルフェーズに 36 秒、アプリケーション全体の起動時間に 38 秒かかります。高速化イメージに基づくアプリケーションの場合、イメージのプルフェーズはわずか 4 秒、アプリケーション全体の起動時間はわずか 9 秒です。
制限事項
マルチアーキテクチャイメージは、高速化イメージに変換できません。
高速化イメージは、Pod のライフサイクル全体を通じてアクセス可能である必要があります。インデックスのみモードを使用する場合、高速化イメージとオリジナルイメージの両方がアクセス可能である必要があります。
イメージの高速化の有効化
リポジトリレベルでイメージの高速化を設定できます。これにより、プッシュしたオリジナルイメージが自動的に高速化イメージに変換されます。変換時間はイメージのサイズによって異なります。オリジナルイメージは影響を受けません。
Container Registry コンソールにログインします。
上部のナビゲーションバーで、リージョンを選択します。
左側のナビゲーションウィンドウで、[インスタンスリスト] をクリックします。
[インスタンス] ページで、管理する Enterprise Edition インスタンスをクリックします。
インスタンス管理ページの左側のナビゲーションウィンドウで、 を選択します。
[イメージリポジトリ] ページで、対象のイメージリポジトリの名前をクリックするか、[操作] 列の [管理] をクリックします。
[基本情報] ページで、左上隅の [編集] をクリックします。
[基本情報の変更] ダイアログボックスで、[イメージアクセラレーション]を有効にし、[OK] をクリックします。
説明イメージの高速化を有効にしても、既存のイメージに対しては高速化バージョンが自動的に生成されません。手動で変換をトリガーする必要があります。これを行うには、ACR コンソールの [インスタンスリスト] ページに移動し、対象の Enterprise Edition インスタンスをクリックします。[リポジトリ管理] ページでイメージリポジトリを見つけ、左側のナビゲーションウィンドウで [イメージバージョン] をクリックします。高速化したいイメージバージョンを見つけ、右側の [高速化イメージに変換] をクリックします。
イメージの高速化では、次の 2 つのモードで高速化イメージを生成できます。
[フルモード] では、生成されたイメージに元のイメージのすべてのコンテンツが含まれ、サイズは元のイメージの約 130% になります。このモードにより、コンテナーの起動速度が大幅に向上します。生成されたイメージのタグは、元のイメージタグに
_containerd_acceleratedというサフィックスが付加されたものになります。[インデックスのみモード] では、生成されたイメージは各レイヤーのインデックスのみを含み、サイズは元のイメージの約 3% になります。変換は高速で、フルモードと比較してコンテナーの起動が約 70% 高速化されます。生成されたイメージは、元のイメージタグに
_acceleratedサフィックスが付いたものを使用します。
イメージの高速化の使用
高速化イメージからコンテナーを起動するには、イメージをプルするために必要な権限を設定する必要があります。デフォルトでは、システムは高速化イメージを Pod の YAML ファイルで指定された imagePullSecrets と照合します。一致した secret は、高速化イメージをプルするためのアクセス認証情報として使用されます。さらに、ACK は権限を設定するための他の 2 つのメソッドを提供します。
パスワード不要プラグインの使用
ACK にパスワード不要プラグインをインストールすると、ACR リポジトリのアクセス認証情報が対象のワークロードに自動的に挿入されます。アクセス認証情報のライフサイクルやワークロードとの関連付けを手動で管理する必要はありません。パスワード不要プラグインを使用して高速化イメージを使用するコンテナーを起動するには、次の手順を実行します。
パスワード不要プラグインをインストールして設定します。詳細については、「Secret なしで ACR イメージをプルする」をご参照ください。
ワークロードを作成し、オリジナルイメージ名を指定します。ワークロードがパスワード不要プラグインの設定で関連付けられた ServiceAccount を使用し、同じ名前空間にあることを確認してください。次の YAML ファイルは、ワークロードの例です。
フルモード
説明ACR Enterprise Edition インスタンスでイメージの高速化のためにフルモードを有効にすると、高速化イメージのアーティファクトは Referrers API 仕様に準拠してオリジナルイメージにリンクされます。その結果、ACK で高速化イメージを使用するには、オリジナルイメージのタグを指定するだけで済みます。
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: containers: # ここにオリジナルイメージの名前を入力します。 - image: test-registry-vpc.cn-hangzhou.cr.aliyuncs.com/test/nginx:latest name: test command: ["sleep", "3600"]インデックスのみモード
説明ACR Enterprise Edition インスタンスでイメージの高速化のために インデックスのみモード を有効にすると、高速化イメージのアーティファクトは Referrers API 仕様に準拠してオリジナルイメージにリンクされます。その結果、ACK で高速化イメージを使用するには、オリジナルイメージのタグを指定するだけで済みます。
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: containers: # ここにオリジナルイメージの名前を入力します。 - image: test-registry-vpc.cn-hangzhou.cr.aliyuncs.com/test/nginx:latest name: test command: ["sleep", "3600"]
Secret の使用
イメージをプルするためのアクセス認証情報を手動で維持できます。kubernetes.io/dockerconfigjson タイプの Secret を作成し、ACR イメージリポジトリのアクセス認証情報を設定することで、イメージの高速化機能を有効にできます。Secret を作成し、高速化イメージを使用するコンテナーを起動するには、次の手順を実行します。
高速化イメージ専用の Secret を作成します。Secret 名には
acr-credential-プレフィックスを付けるか、Secret にimages.alibabacloud.com/accelerated: trueというラベルを付ける必要があります。以下に例を示します。プレフィックス付きの専用 Secret の作成
kubectl create secret docker-registry acr-credential-test --docker-server=RegistryVpcDomain --docker-username=UserName --docker-password=Passwordタグ値を持つ専用 Secret の作成
kubectl create secret docker-registry <SecretName> --docker-server=<RegistryVpcDomain> --docker-username=<UserName> --docker-password=<Password>kubectl label secrets <SecretName> images.alibabacloud.com/accelerated="true"警告最小権限の原則に基づいて、アクセス認証情報の権限を設定してください。認証情報には、クラスターのアプリケーションイメージをプルするために必要な権限のみを付与する必要があります。詳細については、「RAM ユーザーへのカスタムポリシーの付与」をご参照ください。
オリジナルイメージ名を使用し、Secret を参照するワークロードを作成します。次の YAML ファイルは例です。
フルモード
説明ACR Enterprise Edition インスタンスでイメージの高速化のために フルモード を有効にすると、高速化イメージのアーティファクトは Referrers API 仕様に準拠してオリジナルイメージにリンクされます。その結果、ACK で高速化イメージを使用するには、オリジナルイメージのタグを指定するだけで済みます。
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: imagePullSecrets: # ここに正しい Secret の名前を入力します。 - name: acr-credential-test containers: # ここにオリジナルイメージの名前を入力します。 - image: test-registry-vpc.cn-hangzhou.cr.aliyuncs.com/test/nginx:latest name: test command: ["sleep", "3600"]インデックスのみモード
説明ACR Enterprise Edition インスタンスでイメージの高速化のために インデックスのみモード を有効にすると、高速化イメージのアーティファクトは Referrers API 仕様に準拠してオリジナルイメージにリンクされます。その結果、ACK で高速化イメージを使用するには、オリジナルイメージのタグを指定するだけで済みます。
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: imagePullSecrets: # ここに正しい Secret の名前を入力します。 - name: acr-credential-test containers: # ここにオリジナルイメージの名前を入力します。 - image: test-registry-vpc.cn-hangzhou.cr.aliyuncs.com/test/nginx:latest name: test command: ["sleep", "3600"]