通常、イメージを使用してコンテナを作成する場合、コンテナの起動に必要なリソースが一部であっても、システムはイメージパッケージ全体をダウンロードして解凍します。 これには通常、長い時間がかかります。 Container Registry Enterprise Edition を使用して、コンテナイメージの高速化バージョンをデプロイできます。 高速化されたイメージでは、システムはイメージパッケージ全体ではなく、必要なリソースのみをダウンロードして解凍できます。 これにより、アプリケーションのデプロイが高速化され、高い弾力性が得られます。
前提条件
クラスタは、次のクラスタタイプのいずれかである必要があります。
マネージドエディションおよび専用エディション: v1.16.9 以降
ACK Edge クラスタ: v1.26.3 以降
Serverless Kubernetes クラスター: v1.26.3 以降
ACK Lingjun クラスタ: v1.26.3 以降
Alibaba Cloud Container Compute Service (ACS): v1.26.3 以降
クラスタ作成時にサポートされるオペレーティングシステム:
Alibaba Cloud Linux 2.1903
Alibaba Cloud Linux 3.2104
Alibaba Cloud Linux 3.2104 LTS 64 ビット ARM エディション
Alibaba Cloud Linux UEFI 2.1903
CentOS 7.9
Container Registry Enterprise Edition インスタンスが作成されます。 詳細については、「Container Registry Enterprise Edition インスタンスを作成する」をご参照ください。
重要高速化イメージをサポートする Container Registry Enterprise Edition インスタンスのエディションは、イメージの高速化モードによって異なります。
フルモード: Standard Edition および Advanced Edition
インデックスのみモード: Basic Edition、Standard Edition、および Advanced Edition
ACK クラスタまたは サーバーレス Kubernetes クラスター の VPC が、Container Registry Enterprise Edition インスタンスのアクセス制御リスト (ACL) に追加されます。 高速化イメージは VPC でのみ実行できます。 詳細については、「VPC のネットワークアクセス制御を構成する」をご参照ください。
背景情報
Container Registry Enterprise Edition を使用して、コンテナイメージの高速化バージョンをデプロイできます。 高速化されたイメージを使用すると、システムは必要なリソースのみをダウンロードし、イメージパッケージをオンラインで解凍できます。 これにより、アプリケーションアーティファクトの配布が高速化され、高い弾力性が提供されます。 高速化の効果は、イメージサイズとイメージリポジトリのネットワーク状態によって異なります。 テストでは、1.34 GB サイズの NodeBB イメージを Docker Hub からプルするには 36 秒かかります。 イメージでアプリケーションを起動するには 38 秒かかります。 高速化された NodeBB イメージのプルには 4 秒しかかからず、イメージでのアプリケーションの起動には 9 秒しかかかりません。
使用制限
コンテナランタイムが Containerd の場合、高速化イメージのリポジトリにカスタムドメイン名を設定できます。 コンテナランタイムが Docker の場合、Docker の制限により、高速化イメージのリポジトリにカスタムドメイン名を設定することはできません。 詳細については、「カスタムドメイン名を使用して Container Registry Enterprise Edition インスタンスにアクセスする」をご参照ください。
インデックスのみモードは、Function Compute または Serverless App Engine (SAE) シナリオでは使用できません。
既存のイメージを高速化イメージに変換するには、手動でトリガーする必要があります。
リージョン制限
オンデマンドイメージ読み込み機能は、Alibaba Finance Cloud および Alibaba Gov Cloud のリージョンではサポートされていません。
ベースイメージを高速化イメージに変換する
リポジトリのイメージの高速化を有効にできます。 これにより、リポジトリにプッシュされる各イメージは、自動的に高速化イメージに変換されます。 イメージを高速化イメージに変換するのに必要な時間は、イメージのサイズによって異なります。 変換はベースイメージには影響しません。
高速化イメージの名前空間名とリポジトリ名は、ベースイメージの名前空間名とリポジトリ名と同じです。 高速化イメージのタグ形式は、イメージの高速化モードによって異なります。
インデックスのみモードの場合、高速化イメージのタグ形式は、ベースイメージのタグに
_acceleratedサフィックスが付加されたものです。 高速化イメージは containerd ランタイムのみをサポートし、高速化イメージが使用されている場合は、ベースイメージのタグを削除することはできません。フルモードの場合、高速化イメージのタグは次のいずれかの形式になります。
ベースイメージのタグに
_acceleratedサフィックスが付加されたもの。 この形式のタグを持つ高速化イメージは、Docker および Containerd ランタイムをサポートします。ベースイメージのタグに
_containerd_acceleratedサフィックスが付加されたもの。 この形式のタグを持つ高速化イメージは、containerd ランタイムのみをサポートします。注:
_containerd_acceleratedサフィックスが付いたイメージとその元のイメージはどちらも、使用中は削除できません。
Container Registry コンソール にログインします。
上部のナビゲーションバーで、リージョンを選択します。
左側のナビゲーションウィンドウで、[インスタンス] をクリックします。
[インスタンス] ページで、管理する Enterprise Edition インスタンスをクリックします。
Container Registry Enterprise Edition インスタンスの管理ページの左側のナビゲーションウィンドウで、 を選択します。
[リポジトリ] ページで、イメージの高速化を有効にするリポジトリを見つけます。 リポジトリの名前をクリックするか、[アクション] 列の [管理] をクリックします。 表示されたページで、左上隅にある [編集] をクリックします。
[設定の変更] ダイアログボックスで、[高速化イメージ] セクションの [有効] を選択し、高速化モードを選択して、[確認] をクリックします。
[フルモード]: このモードでは、コンテナの起動が大幅に高速化されます。 高速化イメージのサイズは、ベースイメージのサイズの約 130% です。 システムが 1 GB サイズのイメージの高速化イメージを生成するには、約 25 秒かかります。 イメージレイヤーの高速化イメージレイヤーが既に生成されている場合、システムはイメージレイヤーの高速化イメージレイヤーを再生成しません。
[インデックスのみモード]: このモードでは、コンテナの起動時に、フルモードの効果の約 70% の高速化効果が得られます。 高速化イメージのサイズは、ベースイメージのサイズの約 3% です。 システムが 1 GB サイズのイメージの高速化イメージを生成するには、約 3 秒かかります。 システムは、既にインデックスがあるイメージレイヤーのインデックスを再生成しません。
重要インデックスのみモードはパブリックプレビュー中です。 本番環境でこのモードを使用する前に、テスト環境でこのモードを確認することをお勧めします。
説明インデックスのみモードは、
tarおよびtgzで圧縮されたイメージにのみ使用できます。zstdなどの他の圧縮方法で圧縮されたイメージには使用できません。インデックスのみモードを使用してイメージを高速化する場合は、高速化イメージをベースイメージと一緒に使用する必要があります。 ベースイメージを削除することはできません。 フルモードを使用する場合は、高速化イメージを個別に使用できます。
インデックスのみモードは、Docker ランタイムをサポートしていません。
リポジトリのイメージの高速化を有効にすると、システムがリポジトリにプッシュする各イメージは自動的に高速化イメージに変換されます。 イメージが高速化イメージに変換されるたびに通知を受け取る場合は、イベント通知を構成できます。 たとえば、式ベースのトリガーを指定し、式を
_accelerated$に設定します。 詳細については、「イベント通知」をご参照ください。(オプション) [プリフェッチファイルリスト] を指定します。 このリストのファイルは、高速化イメージの起動時に優先的にプリフェッチされます。 コンテナの起動時に大きなファイルを読み取る必要がある場合は、ファイルプリフェッチ機能を使用することをお勧めします。
説明1 行に 1 つのファイルの絶対パスを入力します。 絶対パスがディレクトリの場合は、行の末尾にスラッシュ (
/) を追加します。
aliyun-acr-acceleration-suite イメージ高速化コンポーネントをインストールする
高速化イメージを使用してコンテナを起動するには、ACK クラスタのワーカーノードに aliyun-acr-acceleration-suite コンポーネントをインストールする必要があります。
DADI 高速化イメージをサポートするには、ACK コンソールで [コンテナイメージの高速化] を有効にして、新規または既存のノードプールに対してイメージの高速化を有効にします。
ACK マネージドクラスターおよび専用クラスター
ノードプールを作成するときにイメージの高速化を有効にする
ACK コンソール にログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。
[クラスター] ページで、管理するクラスターを見つけて、その名前をクリックします。 左側のナビゲーションウィンドウで、 を選択します。
[ノードプール] ページの [詳細オプション] セクションで、[Container Registry の高速化] を有効にします。 詳細については、「ノードプールを作成および管理する」をご参照ください。
既存のノードプールに対してイメージの高速化を有効にする
[コンテナイメージの高速化] をオンまたはオフにすると、この操作は新しいノードに対してのみ有効になります。 この操作を既存のノードに適用するには、ノードプールからノードを削除し、ノードをノードプールに再度追加する必要があります。 詳細については、「ノードを削除する」および「既存の ECS インスタンスを ACK クラスタに追加する」をご参照ください。
ACK コンソール にログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。
[クラスター] ページで、管理するクラスターを見つけて、その名前をクリックします。 左側のナビゲーションウィンドウで、 を選択します。
[ノードプール] ページで、変更するノードプールを見つけて、[アクション] 列の [編集] をクリックします。 [詳細オプション] セクションで、[Container Registry の高速化] を有効にし、指示に従ってノードプールの ConfigMap を更新します。
[ノードプール] ページで、ノードプールの [ステータス] 列に [更新中] と表示されている場合は、ノードプールが変更されています。 ノードプールのステータスが [アクティブ] に変わると、変更は完了です。
その他のクラスター
ノードにイメージ高速化ラベル
alibabacloud.com/image-accelerate-enabled: trueを追加する必要があります。 これにより、イメージの高速化機能が有効になり、ノードの初期化中にイメージストレージプラグインが自動的にインストールされます。さまざまなタイプのクラスターのラベル設定は次のとおりです。
クラスタタイプ
参照
サーバーレス Kubernetes クラスター
ACK Edge クラスター
クラウド側ノードプールの場合は、「ノードプールを作成および管理する」を参照してください。
エッジ側ノードプールの場合は、「エッジノードプールの管理」を参照してください。
ACK Lingjun クラスター
Alibaba Cloud Container Service (ACS)
aliyun-acr-acceleration-suite コンポーネントをインストールします。
ACK コンソール にログインします。
[クラスター] ページで、aliyun-acr-acceleration-suite コンポーネントをインストールするクラスターの名前をクリックし、左側のナビゲーションウィンドウで を選択します。
[アドオン] ページの [その他] セクションで、[aliyun-acr-acceleration-suite] を見つけて、[インストール] をクリックします。
[aliyun-acr-acceleration-suite のインストール] メッセージで、[OK] をクリックします。
左側のナビゲーションウィンドウで、 を選択します。 [DaemonSet] ページで、コンポーネントのデーモンのインストールの詳細を表示します。
左側のナビゲーションウィンドウで、 を選択します。 [デプロイメント] ページで、コンポーネントのデプロイメントのインストールの詳細を表示します。
コンポーネントのすべてのポッドが起動すると、コンポーネントのインストールは完了です。
高速化イメージを有効にする
高速化イメージが存在するリポジトリのアクセス認証情報を構成します。
警告イメージをプルするために使用するシークレットを構成する際は、最小権限の原則に従い、必要な権限のみを付与するようにしてください。 詳細については、「カスタムポリシーを RAM ユーザーにアタッチする」をご参照ください。
シークレットを使用せずにイメージリポジトリからイメージをプルできる aliyun-acr-credential-helper コンポーネントを使用します。
クラスタに aliyun-acr-credential-helper コンポーネントが構成されており、Container Registry Enterprise Edition インスタンスに関する指定された情報が正しい場合は、この手順をスキップできます。
クラスタに aliyun-acr-credential-helper コンポーネントが構成されていない場合は、クラスタにコンポーネントを構成できます。 詳細については、「aliyun-acr-credential-helper コンポーネントを使用して、シークレットを使用せずにイメージをプルする」をご参照ください。
イメージをプルするために使用するシークレットのラベルを指定します。
説明V0.2.6 以降の aliyun-acr-acceleration-suite コンポーネントのみがこの方法をサポートしています。
次のコマンドを実行して、タイプが kubernetes.io/dockerconfigjson で、ラベルが images.alibabacloud.com/accelerated: true であるシークレットを作成します。
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 クラスタまたは サーバーレス Kubernetes クラスター の名前空間にイメージ高速化ラベルをアタッチすることもできます。 オンデマンドイメージ読み込み機能は、高速化条件を満たす名前空間内のすべてのワークロードに適用されます。 これにより、ワークロードごとに YAML ファイルを編集する必要がなくなります。 次のいずれかの方法を使用して、特定のワークロードまたは名前空間内のすべてのワークロードにイメージ高速化ラベルをアタッチできます。
説明ラベルの名前は
k8s.aliyun.com/image-accelerate-modeで、ラベルの値はon-demandです。ワークロードにイメージ高速化ラベルをアタッチします。
次の例は、ポッドにイメージ高速化ラベルをアタッチする方法を示しています。 次のコマンドを実行して、デプロイメントによって管理されるポッドにイメージ高速化ラベルをアタッチします。
kubectl edit deployment <デプロイメントの名前> -n <デプロイメントが存在する名前空間>k8s.aliyun.com/image-accelerate-mode: on-demandラベルをデプロイメントの YAML ファイルに追加します。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 コンソールでイメージ高速化ラベルをアタッチします。
ACK コンソール にログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。
[クラスター] ページで、目的のクラスターを見つけて、その名前をクリックします。 左側のナビゲーションウィンドウで、[名前空間とクォータ] をクリックします。
[名前空間] ページで、構成する名前空間を見つけて、[アクション] 列の [編集] をクリックします。
[名前空間の編集] ダイアログボックスの [ラベル] セクションで、[変数キー] を
k8s.aliyun.com/image-accelerate-modeに設定し、[変数値] をon-demandに設定して、[OK] をクリックします。
CLI でイメージ高速化ラベルをアタッチします。
kubectl label namespaces <YOUR-NAMESPACE> k8s.aliyun.com/image-accelerate-mode=on-demand名前空間にイメージ高速化ラベルをアタッチし、ベースイメージを高速化イメージに変換した場合、名前空間にポッドを作成または更新すると、aliyun-acr-acceleration-suite コンポーネントは自動的にポッドの高速化イメージの URL を使用してポッドのベースイメージの URL を置き換え、nodeSelector を追加して、ポッドを高速化ノードにスケジュールします。