すべてのプロダクト
Search
ドキュメントセンター

Container Registry:コンテナーイメージのリソースをオンデマンドで読み込む

最終更新日:Dec 03, 2024

イメージを使用してコンテナーを作成すると、通常、コンテナーの起動に必要なリソースがいくつかある場合でも、イメージのパッケージ全体がダウンロードされて解凍されます。 これには通常長い時間がかかる。 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専用クラスター、およびバージョンが1.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インスタンスに設定されています。 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が付いています。

  1. Container Registryコンソールにログインします。

  2. 上部のナビゲーションバーで、リージョンを選択します。

  3. 左側のナビゲーションウィンドウで、[インスタンス] をクリックします。

  4. [インスタンス] ページで、管理するEnterprise Editionインスタンスをクリックします。

  5. Container Registry Enterprise Editionインスタンスの管理ページの左側のナビゲーションウィンドウで、リポジトリ > リポジトリ.

  6. [リポジトリ] ページで、イメージアクセラレーションを有効にするリポジトリを見つけます。 リポジトリの名前をクリックするか、[操作] 列の [管理] をクリックします。

  7. 表示されるページで、編集左上隅にあります。

  8. 設定の変更ダイアログボックスをオンにするイメージアクセラレーションの有効化モードを選択し、確認.

    • フルモード: このモードは、コンテナーの起動を大幅に高速化します。 加速された画像のサイズは、元の画像のサイズの約130% である。 システムは、1 GBサイズの画像に対して加速画像を生成するために約25秒を要する。 画像レイヤに対して加速画像レイヤが生成されている場合、システムは、画像レイヤに対して加速画像レイヤを再生成しない。

    • インデックス専用モード: このモードは、コンテナ起動時のフルモードの効果とほぼ70% のアクセラレーション効果を提供します。 加速された画像のサイズは、元の画像のサイズの約3% である。 システムは、1 GBサイズの画像に対して加速画像を生成するために約3秒を要する。 システムは、すでにインデックスを持つ画像レイヤーのインデックスを再生成しません。

      重要

      インデックスのみのモードはパブリックプレビューです。 本番環境でモードを使用する前に、テスト環境でモードを確認することを推奨します。

      説明
      • インデックス専用モードは、tartgzで圧縮された画像にのみ使用できます。 このモードは、zstdなどの他の圧縮方法で圧縮された画像には使用できません。

      • インデックスのみのモードを使用してイメージを高速化するには、元のイメージを高速化イメージにバインドする必要があります。 元の画像は削除できません。 フルモードを使用する場合は、加速画像を個別に使用できます。

      • インデックスのみのモードは、Dockerランタイムをサポートしていません。

    リポジトリのイメージアクセラレーションを有効にすると、システムがリポジトリにプッシュする各イメージは自動的にアクセラレーションされたイメージに変換されます。 イメージが高速化イメージに変換されるたびに通知される場合は、イベント通知を設定できます。 たとえば、式ベースのトリガーを指定し、式を _accelerated$ に設定します。 詳細については、「イベント通知」をご参照ください。

aliyun-acr-acr-acceleration-suiteコンポーネントのインストール

アクセラレーションイメージを使用してコンテナを起動するには、ACKクラスターのワーカーノードにaliyun-acr-acr-acceleration-suiteコンポーネントをインストールする必要があります。

  1. イメージアクセラレーションラベルをノードに添付します。

    ワーカーノードを作成するときに、ノードにe alibabacloud.com/image-accelerate-enabled: trueラベルを添付して、ノードの初期化時にイメージアクセラレーションを有効にできます。 イメージアクセラレーションラベルがアタッチされると、ノードの初期化時にaliyun-acr-acr-acceleration-suiteコンポーネントが自動的にインストールされます。

    説明
    • アクセラレーションコンテナは、アクセラレーションノードで実行する必要があります。 アクセラレーションノードは、共通コンテナとアクセラレーションコンテナの両方をサポートします。

    • 既存のワーカーノードにラベルをアタッチすると、イメージアクセラレーションは有効になりません。

    • virtual-kubelet仮想ノードにラベルをアタッチすると、イメージアクセラレーションがすぐに有効になります。

    • クラスターの作成時にイメージアクセラレーションラベルを添付します。

      クラスターの作成時に、Labelパラメーター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ラベルがノードプール内の新しいノードに添付されます。 詳細については、「ノードプールの作成」をご参照ください。

      説明

      個別のノードプールを作成して、高速化イメージをサポートするノードを管理できます。

    • 既存のノードが追加されたときにイメージアクセラレーションラベルを添付します。

      既存のノードを追加するときに、Labelパラメーターo alibabacloud.com/image-accelerate-enabled: trueを設定できます。 詳細については、「既存のECSインスタンスをACKクラスターに追加する」をご参照ください。

  2. aliyun-acr-acceleration-suiteコンポーネントをインストールします。

    1. ACKコンソールにログインします。

    2. ACKコンソールの左側のナビゲーションウィンドウで、[クラスター] をクリックします。

    3. クラスターページで、管理するクラスターの名前をクリックし、操作 > アドオン左側のナビゲーションウィンドウに表示されます。

    4. その他のセクションアドオンページ, 検索aliyun-acr-acceleration-suiteをクリックし、インストール.

    5. aliyun-acr-acceleration-suiteのインストールメッセージ, クリックOK.

      • [クラスター管理] ページの左側のナビゲーションウィンドウで、[ワークロード] > [DaemonSets] を選択します。 [DaemonSets] ページで、コンポーネントのデーモンのインストールの詳細を表示します。

      • [クラスター管理] ページの左側のナビゲーションウィンドウで、[ワークロード] > [デプロイ] を選択します。 [デプロイメント] ページで、コンポーネントのデプロイメントのインストールの詳細を表示します。

      コンポーネントのすべてのポッドが開始されると、コンポーネントのインストールは完了です。

aliyun-acr-acr-acceleration-suiteコンポーネントのアンインストール

重要

aliyun-acr-acr-acceleration-suiteコンポーネントをアンインストールする前に、アクセラレーションイメージを使用して作成されたコンテナーが実行されていないことを確認してください。

  1. ACKコンソールにログインします。

  2. [クラスター] ページで、管理するクラスターを見つけ、クラスターの名前をクリックするか、[操作] 列の [詳細] をクリックします。 クラスターの詳細ページが表示されます。

  3. クラスター管理ページの左側のナビゲーションウィンドウで、操作 > アドオン.

  4. その他のセクションアドオンページ, 検索aliyun-acr-acceleration-suiteをクリックし、アンインストール.

  5. aliyun-acr-acr-acceleration-suiteのアンインストールメッセージ, クリックOK.

アクセラレーションイメージの展開Deploy an accelerated image

  1. アクセラレーションイメージが存在するリポジトリへのアクセスを設定します。

    • シークレットを使用せずにイメージリポジトリにアクセスできる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"
  2. 画像アクセラレーションラベルを添付します。

    イメージアクセラレーションラベルは、ポッドやデプロイメントなどのワークロードに添付できます。 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"]
    • イメージアクセラレーションラベルを名前空間にアタッチします。

      • コンソールに画像アクセラレーションラベルを添付します。

        1. ACK コンソールにログインします。

        2. ACK コンソールの左側のナビゲーションウィンドウで、[クラスター] をクリックします。

        3. [クラスター] ページで、イメージアクセラレーションラベルをアタッチする名前空間のクラスターを見つけ、クラスターの名前をクリックするか、[操作] 列の [詳細] をクリックします。

        4. 詳細ページの左側のナビゲーションウィンドウで、[ノード]> [名前空間とクォータ] を選択します。

        5. [名前空間] ページで、設定する名前空間を見つけ、[操作] 列の [編集] をクリックします。

        6. [名前空間の編集] ダイアログボックスの [ラベル] セクションで、[変数キー]k8s.aliyun.com/image-accelerate-modeに、[変数値][オンデマンド] に設定し、[OK] をクリックします。

      • CLIにイメージアクセラレーションラベルを添付します。

    kubectl label namespaces <YOUR-NAMESPACE> k8s.aliyun.com/image-accelerate-mode=on-demand

    イメージアクセラレーションラベルを設定した後、イメージがアクセラレーションイメージに変換されたとします。 名前空間でポッドを作成または更新すると、加速コンポーネントは自動的にポッドの元のイメージのアドレスを加速イメージのアドレスに置き換えます。 高速化コンポーネントはnodeSelectorを追加し、高速化ノードにポッドをスケジュールします。