従来、コンテナを実行するには、起動前にイメージ全体をダウンロードして展開する必要がありました。しかし、コンテナの起動に必要なイメージデータはごく一部であることが多く、これが起動時間の長期化を招いていました。Container Registry Enterprise Edition の遅延読み込み機能は、イメージ全体ではなく、起動に不可欠なイメージデータのみをダウンロードして展開することで、この問題に対処します。この方法により、アプリケーションのデプロイが大幅に高速化され、スケーリングの弾力性が向上します。
前提条件
-
サポートされている ACK クラスターが利用可能であること。
説明高速化イメージは、v1.16.9 以降の ACK マネージド/専用クラスター、および v1.26.3 以降の ACK Edge クラスター、ACK Serverless クラスター、ACK Lingjun クラスター、Alibaba Cloud Container Compute Service (ACS) クラスターで使用できます。クラスターを作成する際、オペレーティングシステムは Alibaba Cloud Linux 2.1903、Alibaba Cloud Linux 3.2104、Alibaba Cloud Linux 3.2104 LTS 64 bit ARM edition、Alibaba Cloud Linux UEFI 2.1903、または CentOS 7.9 である必要があります。
-
Container Registry Enterprise Edition インスタンスを作成済みであること。詳細については、「Container Registry Enterprise Edition インスタンスの作成」をご参照ください。
重要サポートされる Container Registry Enterprise Edition インスタンスのエディションは、イメージの高速化モードによって異なります。
-
フルモード:Standard または Advanced エディションがサポートされています。
-
インデックス専用モード:Basic、Standard、または Advanced エディションがサポートされています。
-
-
ご利用の ACK または ACK Serverless クラスターの VPC が、Container Registry Enterprise Edition インスタンスに設定されていること。高速化イメージは VPC 内で使用する必要があります。詳細については、「VPC のアクセス制御の設定」をご参照ください。
背景情報
Container Registry Enterprise Edition の遅延読み込み機能を使用すると、デプロイメントで高速化イメージを利用できます。これにより、イメージ全体のダウンロードが不要になり、オンザフライでの展開が可能になるため、アプリケーションのディストリビューション効率とスケーリングの弾力性が大幅に向上します。高速化の効果は、イメージサイズやリポジトリのネットワーク条件などの要因によって異なります。あるテストでは、Docker Hub の 1.34 GB の NodeBB イメージを使用するアプリケーションでは、イメージのプルに 36 秒かかり、合計起動時間は 38 秒でした。高速化イメージを使用することで、プル時間は 4 秒に短縮され、合計起動時間はわずか 9 秒になりました。
制限事項
-
コンテナランタイムが containerd の場合、高速化イメージリポジトリはカスタムドメイン名を使用できます。Docker の制限により、Docker ランタイムを使用する場合はサポートされません。詳細については、「カスタムドメイン名を使用した Container Registry Enterprise Edition インスタンスへのアクセス」をご参照ください。
-
インデックス専用モードは、Function Compute (FC) または Serverless App Engine (SAE) のシナリオでは使用できません。
-
既存のイメージは手動で高速化イメージに変換する必要があります。
利用可能なリージョン
遅延読み込み機能は、Finance Cloud および Alibaba Gov Cloud リージョンでは利用できません。
高速化イメージへの変換
リポジトリを設定して、プッシュされた元のイメージを自動的に高速化イメージに変換できます。変換時間はイメージサイズによって異なります。元のイメージは影響を受けません。
高速化イメージは、元のイメージと同じ名前空間とリポジトリ名を使用します。タグのフォーマットは次のとおりです。
-
インデックス専用モード:高速化イメージのタグは、元のイメージタグに
_acceleratedサフィックスを付けたものです。このモードは containerd ランタイムでのみサポートされます。高速化イメージの使用中は、元のイメージタグを削除できません。 -
フルモード:
-
_acceleratedサフィックスが付いた高速化イメージは、Docker と containerd の両方のランタイムをサポートします。 -
_containerd_acceleratedサフィックスが付いた高速化イメージは、containerd ランタイム専用です。_containerd_acceleratedサフィックスが付いたイメージを使用している場合、高速化イメージまたはその元のイメージを削除することはできません。
-
Container Registry コンソールにログインします。
上部のナビゲーションバーで、リージョンを選択します。
-
左側のナビゲーションウィンドウで、インスタンス をクリックします。
[インスタンス] ページで、管理したい Enterprise Edition インスタンスをクリックします。
-
インスタンス詳細ページの左側のナビゲーションウィンドウで、 を選択します。
-
[リポジトリ] ページで、対象のリポジトリの名前をクリックするか、操作 列の 管理 をクリックします。 [基本情報] ページの左上隅にある 編集 をクリックします。
-
基本情報の変更 ダイアログボックスで、高速化イメージ を有効にし、モードを選択してから OK をクリックします。
-
フルモード:コンテナの起動を大幅に高速化します。生成される高速化イメージのサイズは、元のイメージサイズの約 130% です。1 GB の元のイメージから高速化イメージを生成するには約 25 秒かかります。既存のイメージレイヤーは再生成されません。
-
[インデックス専用モード]:フルモードの約 70% の高速化効果を提供します。高速化イメージのサイズは、元のイメージサイズの約 3% です。1 GB の元のイメージから高速化イメージを生成するには約 3 秒かかります。インデックスが作成済みのイメージレイヤーは再インデックスされません。
重要インデックス専用モードはパブリックプレビュー中です。本番環境で使用する前に、非本番環境でテストすることを推奨します。
説明-
インデックス専用モードは、
tarまたはtgzで圧縮されたイメージにのみ適用されます。このモードは、zstdなどの他の方法で圧縮されたイメージには適用されません。 -
インデックス専用モードは元のイメージと一緒に使用する必要があり、元のイメージは削除できません。フルモードでは、高速化イメージは独立して使用できます。
-
インデックス専用モードは Docker ランタイムではサポートされていません。
-
イメージの高速化を設定すると、プッシュされたイメージは自動的に変換タスクをトリガーします。イメージ変換の完了時に通知を受け取りたい場合は、イベント通知を設定できます。たとえば、式を
_accelerated$に設定します。詳細については、「イベント通知の設定」をご参照ください。 -
-
(オプション) プリフェッチファイルリスト を指定します。このリスト内のファイルは、高速化イメージの起動時にプリフェッチされます。コンテナ起動時に大きなファイルを読み取る必要がある場合に、この機能を使用することを推奨します。
説明各行にはファイルへの絶対パスを含める必要があります。ディレクトリの場合、パスはスラッシュ (
/) で終わる必要があります。
イメージ高速化コンポーネントのインストール
高速化コンテナを起動するには、ワーカーノードに遅延読み込み用のストレージプラグインをインストールする必要があります。
-
ACK マネージドおよび専用クラスター
新しいノードプールで有効化
既存のノードプールで有効化
-
ACK コンソールにログインし、左側のナビゲーションウィンドウで [クラスター] をクリックします。
-
クラスター名をクリックします。左側のナビゲーションウィンドウで、[ノード] > [ノードプール] を選択します。
-
ノードプールを見つけ、[操作] 列の [編集] をクリックします。[詳細オプション] セクションで、[コンテナイメージの高速化] を有効にし、画面の指示に従ってノードプールの ConfigMap を更新します。[ステータス] 列には、更新中は [更新中]、完了すると [アクティブ] と表示されます。
その他のクラスタータイプ
alibabacloud.com/image-accelerate-enabled: trueイメージ高速化ラベルをノードに追加する必要があります。この操作により、ノードの初期化中にイメージ高速化機能が自動的に有効になり、イメージストレージプラグインがインストールされます。ラベルを追加する方法はクラスタータイプによって異なります。
クラスタータイプ
設定ガイド
ACK Serverless クラスター
ACK Edge クラスター
-
クラウド側ノードプールについては、「ノードプールの作成と管理」をご参照ください。
-
エッジノードプールについては、「エッジノードプールの作成」をご参照ください。
ACK Lingjun クラスター
Alibaba Cloud Container Compute Service (ACS)
-
-
イメージ高速化コンポーネントをインストールします。
ACK コンソールにログインします。左側のナビゲーションウィンドウで、クラスターリスト をクリックします。
-
クラスターリスト ページで、対象のクラスターの名前をクリックします。左側のナビゲーションウィンドウで、アドオン管理 をクリックします。
-
アドオン管理 ページで、さらに表示 セクションの aliyun-acr-acceleration-suite を見つけ、インストール をクリックします。
-
ヒント ダイアログボックスで、OK をクリックします。
-
左側のナビゲーションウィンドウで、 を選択します。デーモンセット ページで、コンポーネントの DaemonSet のインストール詳細を表示します。
-
左側のナビゲーションウィンドウで、 を選択します。ステートレス ページで、コンポーネントの Deployment のインストール詳細を表示します。
すべての Pod が実行中になると、コンポーネントのインストールは完了です。
-
高速化イメージの有効化
-
リポジトリのアクセス認証情報を設定します。
警告最小権限の原則に従って、イメージプルシークレットを設定してください。クラスターが使用するサービスイメージをプルするために必要な権限のみを付与します。詳細については、「RAM ユーザーへのカスタムポリシーの付与」をご参照ください。
-
オプション 1:aliyun-acr-credential-helper コンポーネントを使用する。
-
aliyun-acr-credential-helper コンポーネントをインストールし、Container Registry Enterprise Edition インスタンスに対して正しく設定している場合は、追加の操作は不要です。
-
コンポーネントをインストールしていない場合は、今すぐインストールできます。詳細については、「aliyun-acr-credential-helper コンポーネントを使用したシークレットなしでのコンテナイメージのプル」をご参照ください。
-
-
オプション 2:イメージプルシークレットにラベルを追加する。
説明この方法は、aliyun-acr-acceleration-suite コンポーネントのバージョン 0.2.6 以降でのみサポートされます。
kubernetes.io/dockerconfigjson タイプの Secret を作成し、images.alibabacloud.com/accelerated: true ラベルを 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"
-
-
イメージ高速化ラベルを追加します。
イメージ高速化ラベルは、ご利用の ACK または ACK Serverless クラスター内の Pod や Deployment などのワークロード、または名前空間全体に追加できます。名前空間にラベルを付けると、その名前空間内のすべての対象ワークロードで遅延読み込みが有効になり、各ワークロードの YAML ファイルを変更する必要がなくなります。要件に最も適した方法を選択してください。
説明ラベルキーは
k8s.aliyun.com/image-accelerate-modeで、値はon-demandです。-
ワークロードにイメージ高速化ラベルを追加する。
次の例は、Deployment によって管理される Pod にラベルを追加する方法を示しています。次のコマンドを実行して Deployment を編集します。
kubectl edit deployment <DeploymentName> -n <DeploymentNamespace>Deployment の YAML ファイルに、
k8s.aliyun.com/image-accelerate-mode: on-demandラベルを追加します。apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment labels: app: nginx spec: replicas: 1 selector: matchLabels: app: nginx template: metadata: labels: app: nginx # オンデマンドモードを有効化 k8s.aliyun.com/image-accelerate-mode: on-demand spec: containers: # ご利用の ACR インスタンスイメージ - image: test-registry-vpc.cn-hangzhou.cr.aliyuncs.com/test/nginx:latest name: test command: ["sleep", "3600"] -
名前空間にイメージ高速化ラベルを追加する。
-
コンソールでイメージ高速化ラベルを追加する。
-
ACK コンソールにログインし、左側のナビゲーションバーで クラスターリスト を選択します。
クラスターリスト ページで、クラスターの名前をクリックします。左側のナビゲーションウィンドウで、名前空間とクォータ をクリックします。
-
名前空間 ページで、対象の名前空間を見つけ、操作 列の 編集 をクリックします。
-
名前空間の編集 ダイアログボックスで、タグ の 変数名 を
k8s.aliyun.com/image-accelerate-modeに、タグ の 可変値 をon-demandに設定し、OK をクリックします。
-
-
コマンドラインを使用してイメージ高速化ラベルを追加する。
-
kubectl label namespaces <YOUR-NAMESPACE> k8s.aliyun.com/image-accelerate-mode=on-demand高速化ラベルを追加し、元のイメージを高速化イメージに変換すると、高速化コンポーネントは、名前空間内での Pod の作成または更新時に、元のイメージアドレスを高速化イメージアドレスに自動的に置き換え、Pod を高速化ノードにスケジュールするための nodeSelector を追加します。
-