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

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

最終更新日:Sep 06, 2024

イメージを使用してコンテナーを作成すると、通常、コンテナーの起動に必要なリソースがいくつかある場合でも、イメージのパッケージ全体がダウンロードされて解凍されます。 これには通常長い時間がかかる。 Container Registry Enterprise Editionを使用して、加速バージョンのコンテナイメージをデプロイできます。 高速化されたイメージにより、システムは、イメージパッケージ全体をダウンロードする必要なく、必要なリソースのみをダウンロードして解凍することができます。 これは、アプリケーション展開を加速し、高い弾性を提供する。

前提条件

  • Container Service for Kubernetes (ACK) クラスターまたはACKサーバーレスクラスターが作成されています。 詳細については、「ACKマネージドクラスターの作成」および「ACKサーバーレスクラスターの作成」をご参照ください。

    説明

    V1.16.9以降のACKマネージドクラスター、ACK専用クラスター、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インスタンスは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インスタンスへのアクセス」をご参照ください。

リージョンに関する制限事項

オンデマンドイメージロード機能は、Alibaba Finance CloudおよびAlibaba Gov Cloudのリージョンではサポートされていません。

イメージアクセラレーションの有効化

リポジトリのイメージアクセラレーションを有効にできます。 このようにして、リポジトリにプッシュされた各イメージは、自動的に高速化されたイメージに変換されます。 プッシュ画像を加速画像に変換するのに必要な時間は、プッシュ画像のサイズに依存する。 変換は元の画像には影響しません。

説明

高速化イメージは、元のイメージと同じ名前空間とリポジトリにあります。 加速画像のタグは、元の画像のタグの末尾に_acceleratedが付いています。

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

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

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

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

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

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

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

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

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を追加し、高速化ノードにポッドをスケジュールします。