イメージを使用してコンテナーを作成すると、通常、コンテナーの起動に必要なリソースがいくつかある場合でも、イメージのパッケージ全体がダウンロードされて解凍されます。 これには通常長い時間がかかる。 Container Registry Enterprise Editionを使用して、加速バージョンのコンテナイメージをデプロイできます。 高速化されたイメージにより、システムは、イメージパッケージ全体をダウンロードする必要なく、必要なリソースのみをダウンロードして解凍することができます。 これは、アプリケーション展開を加速し、高い弾性を提供する。
前提条件
Alibaba Cloud Container Service for Kubernetes (ACK) クラスター、ACK Edgeクラスター、ACKサーバーレスクラスター、またはAlibaba Cloud Container Compute Service (ACS) クラスターが作成されます。 詳細については、「ACKマネージドクラスターの作成」、「コンソールでのACKエッジクラスターの作成」、「ACKサーバーレスクラスターの作成」、および「ACSクラスターの作成」をご参照ください。
説明バージョンがV1.16.9以降のACK管理クラスターとACK専用クラスター、およびバージョンがV1.26.3以降のACK EdgeクラスターとACKサーバーレスクラスターのみが高速化イメージをサポートしています。 クラスターは、Alibaba Cloud Linux 2.1903、Alibaba Cloud Linux 3.2104、Alibaba Cloud Linux 3.2104 LTS 64ビットArm Edition、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クラスターまたはACKサーバーレスクラスターの仮想プライベートクラウド (VPC) がContainer Registry Enterprise Editionインスタンスのアクセス制御リスト (ACL) に追加されます。 高速化イメージはVPCでのみ実行できます。 詳細については、「VPC ACLの設定」をご参照ください。
背景情報
Container Registry Enterprise Editionを使用して、加速バージョンのコンテナイメージをデプロイできます。 高速化されたイメージにより、システムは必要なリソースのみをダウンロードし、イメージパッケージをオンラインで解凍できます。 これは、アプリケーションアーチファクトの分布を加速し、高い弾性を提供する。 高速化された画像の効果は、画像サイズや画像リポジトリのネットワーク条件などの要因に依存します。 テストでは、Docker Hubから1.34 GBサイズのNodeBBイメージを取得するには36秒かかることが示されています。 画像上でアプリケーションを開始するには38秒かかります。 加速されたNodeBBイメージをプルするには4秒しかかかりません。イメージのアプリケーションを起動するには9秒しかかかりません。
使用制限
コンテナランタイムがContainerdの場合、高速化イメージのリポジトリにカスタムドメイン名を使用できます。 docker acceleratedイメージのリポジトリにカスタムドメイン名を使用することはできません。 詳細については、「カスタムドメイン名を使用した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$
に設定します。 詳細については、「イベント通知」をご参照ください。
aliyun-acr-acr-acceleration-suiteコンポーネントのインストール
アクセラレーションイメージを使用してコンテナを起動するには、ACKクラスターのワーカーノードにaliyun-acr-acr-acceleration-suiteコンポーネントをインストールする必要があります。
イメージアクセラレーションラベルをノードに添付します。
ワーカーノードを作成するときに、ノードにe alibabacloud.com/image-accelerate-enabled: trueラベルを添付して、ノードの初期化時にイメージアクセラレーションを有効にできます。 イメージアクセラレーションラベルがアタッチされると、ノードの初期化時にaliyun-acr-acr-acceleration-suiteコンポーネントが自動的にインストールされます。
説明アクセラレーションコンテナは、アクセラレーションノードで実行する必要があります。 アクセラレーションノードは、共通コンテナとアクセラレーションコンテナの両方をサポートします。
既存のワーカーノードにラベルをアタッチすると、イメージアクセラレーションは有効になりません。
virtual-kubelet仮想ノードにラベルをアタッチすると、イメージアクセラレーションがすぐに有効になります。
クラスターの作成時にイメージアクセラレーションラベルを添付します。
クラスターの作成時に、Labelsパラメーターo alibabacloud.com/image-accelerate-enabled: trueを設定できます。 詳細については、「ACK管理クラスターの作成」をご参照ください。
ノードをスケールアウトするときに、イメージアクセラレーションラベルをノードに添付します。
ノードをスケールアウトするときに、Node Labelパラメーターt o alibabacloud.com/image-accelerate-enabled: trueを設定できます。 このようにして、e alibabacloud.com/image-accelerate-enabled: trueラベルがノードプール内の新しいノードに添付されます。 詳細については、「ノードプールの作成と管理」をご参照ください。
説明個別のノードプールを作成して、高速化イメージをサポートするノードを管理できます。
既存のノードが追加されたときにイメージアクセラレーションラベルを添付します。
既存のノードをノードプールに追加するときに、Labelsパラメーターt o alibabacloud.com/image-accelerate-enabled: trueを設定できます。 詳細については、「既存のECSインスタンスをACKクラスターに追加する」をご参照ください。
aliyun-acr-acceleration-suiteコンポーネントをインストールします。
ACKコンソールにログインします。
ACKコンソールの左側のナビゲーションウィンドウで、[クラスター] をクリックします。
クラスターページで、管理するクラスターの名前をクリックし、 左側のナビゲーションウィンドウに表示されます。
その他のセクションアドオンページ, 検索aliyun-acr-acceleration-suiteをクリックし、インストール.
aliyun-acr-acceleration-suiteのインストールメッセージ, クリックOK.
[クラスター管理] ページの左側のナビゲーションウィンドウで、
を選択します。 [DaemonSets] ページで、コンポーネントのデーモンのインストールの詳細を表示します。[クラスター管理] ページの左側のナビゲーションウィンドウで、
を選択します。 [デプロイメント] ページで、コンポーネントのデプロイメントのインストールの詳細を表示します。
コンポーネントのすべてのポッドが開始されると、コンポーネントのインストールは完了です。
aliyun-acr-acr-acceleration-suiteコンポーネントのアンインストール
aliyun-acr-acr-acceleration-suiteコンポーネントをアンインストールする前に、アクセラレーションイメージを使用して作成されたコンテナーが実行されていないことを確認してください。
ACKコンソールにログインします。
[クラスター] ページで、管理するクラスターを見つけ、クラスターの名前をクリックするか、[操作] 列の [詳細] をクリックします。 クラスターの詳細ページが表示されます。
クラスター管理ページの左側のナビゲーションウィンドウで、 .
その他のセクションアドオンページ, 検索aliyun-acr-acceleration-suiteをクリックし、アンインストール.
aliyun-acr-acr-acceleration-suiteのアンインストールメッセージ, クリックOK.
アクセラレーションイメージの展開Deploy an accelerated image
アクセラレーションイメージが存在するリポジトリへのアクセスを設定します。
シークレットを使用せずにイメージリポジトリにアクセスできるaliyun-acr-credential-helperコンポーネントを使用して、リポジトリへのアクセスを構成します。
ACKクラスター用にaliyun-acr-credential-helperコンポーネントが設定されており、Container Registry Enterprise Editionに関する指定された情報が正しい場合は、この手順をスキップできます。
aliyun-acr-credential-helperコンポーネントがACKクラスターに設定されていない場合は、クラスターのコンポーネントを設定できます。 詳細については、「aliyun-acr-credential-helperコンポーネントを使用して、シークレットを使用せずにイメージをプルする」をご参照ください。
イメージのプルに使用されるシークレットの名前のプレフィックスを指定します。
警告イメージをプルするために使用されるシークレットを構成し、現在のクラスターのビジネスイメージをプルするために必要なアクセス許可のみが付与される場合は、最小権限の原則に従っていることを確認してください。 詳細については、「RAMユーザーへのカスタムポリシーのアタッチ」をご参照ください。
次のコマンドを実行して、型がkubernetes.io/dockerconfigjsonで、名前がacr-credential-で始まるシークレットを作成します。
kubectl create secret docker-registry acr-credential-test --docker-server=<RegistryVpcDomain> --docker-username=<UserName> --docker-password=<Password>
イメージのプルに使用するシークレットのラベルを指定します。
説明V0.2.6以降のaliyun-acr-acr-acceleration-suiteコンポーネントのみがこのメソッドをサポートしています。
次のコマンドを実行して、型がkubernetes.io/dockerconfigjsonで、ラベルiがtrueをs images.alibabacloud.com/acceleratedシークレットを作成します。
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サーバーレスクラスターの名前空間にイメージアクセラレーションラベルを添付することもできます。 アクセラレーション条件を満たす名前空間内のすべてのワークロードは、オンデマンドでコンテナイメージのリソースをロードできます。 この方法では、ワークロードごとにYAMLファイルを編集する必要はありません。 次のいずれかの方法を使用して、イメージアクセラレーションラベルを特定のワークロードまたは名前空間内のすべてのワークロードにアタッチできます。
説明ラベルの名前は
k8s.aliyun.com/image-accelerate-mode
で、ラベルの値はオンデマンド
です。イメージアクセラレーションラベルをワークロードにアタッチします。
次の例は、ポッドにイメージアクセラレーションラベルをアタッチする方法を示しています。 次のコマンドを実行して、展開によって管理されるポッドにイメージアクセラレーションラベルを添付します。
kubectl edit deployment <Name of the Deployment> -n <Namespace in which the Deployment resides>
デプロイのYAMLファイルに
k8s.aliyun.com/image-accelerate-mode: オンデマンド
ラベルを追加します。apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment labels: app: nginx spec: replicas: 1 selector: matchLabels: app: nginx template: metadata: labels: app: nginx # enable on-demand mode k8s.aliyun.com/image-accelerate-mode: on-demand spec: containers: # your ACR instacne image - image: test-registry-vpc.cn-hangzhou.cr.aliyuncs.com/test/nginx:latest name: test command: ["sleep", "3600"]
イメージアクセラレーションラベルを名前空間にアタッチします。
ACKコンソールで画像アクセラレーションラベルを添付します。
ACK コンソールにログインします。
ACK コンソールの左側のナビゲーションウィンドウで、[クラスター] をクリックします。
[クラスター] ページで、イメージアクセラレーションラベルをアタッチする名前空間のクラスターを見つけ、クラスターの名前をクリックするか、[操作] 列の [詳細] をクリックします。
詳細ページの左側のナビゲーションウィンドウで、[名前空間とクォータ] をクリックします。
[名前空間] ページで、設定する名前空間を見つけ、[操作] 列の [編集] をクリックします。
[名前空間の編集] ダイアログボックスの [ラベル] セクションで、[変数キー] を
k8s.aliyun.com/image-accelerate-mode
に、[変数値] を[オンデマンド]
に設定し、[OK] をクリックします。
CLIにイメージアクセラレーションラベルを添付します。
kubectl label namespaces <YOUR-NAMESPACE> k8s.aliyun.com/image-accelerate-mode=on-demand
イメージアクセラレーションラベルを名前空間に添付し、共通イメージをアクセラレーションイメージに変換した場合、名前空間でポッドを作成または更新すると、aliyun-acr-acr-acceleration-suiteコンポーネントは自動的にポッドのアクセラレーションイメージのURLを使用して、ポッドの元のイメージのURLを置き換え、nodeSelectorを追加してアクセラレーションノードにポッドをスケジュールします。