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

Container Registry:ACKサーバーレスおよびACKクラスターでP2Pアクセラレーション機能を使用する

最終更新日:Jun 27, 2024

ACKサーバーレスクラスターとContainer Service for Kubernetes (ACK) クラスターのP2Pアクセラレーション機能を使用して、イメージプルとアプリケーションデプロイを高速化できます。 このトピックでは、ACKのマネージド、専用、サーバーレスのKubernetesクラスターでP2Pアクセラレーション機能を使用する方法について説明します。

前提条件

  • Contain Registry Enterprise Editionインスタンスが作成されます。 Container Registry Enterprise Editionインスタンスは、Advanced Editionである必要があります。 詳細については、「Container Registry Enterprise Editionインスタンスの作成」をご参照ください。

  • 仮想プライベートクラウド (VPC) が設定されています。 VPC経由でContainer Registry Enterprise EditionインスタンスにアクセスするためにACKクラスターが必要な場合。 詳細については、「VPC ACLの設定」をご参照ください。 インターネット経由でContainer Registry Enterprise EditionインスタンスにアクセスするためにACKクラスターが必要な場合は、インターネット経由のアクセスが有効になり、クラスターのIPアドレスがホワイトリストに追加されます。 詳細については、「インターネット経由のアクセスの設定」をご参照ください。

手順1: Container Registryリソースに対する読み取り権限の付与

ACKクラスターがサーバーレスKubernetesクラスターの場合、Container Registryリソースに対する読み取り権限をP2Pコンポーネントに付与する必要があります。

説明

ACKクラスターがマネージドまたは専用のKubernetesクラスターの場合、Container Registryリソースに対する読み取り権限をP2Pコンポーネントに付与する必要はありません。 デフォルトでは、権限が付与されます。

  1. RAMロールを作成します。

    RAMロールを作成するときは、ロールタイプパラメーターを [通常のサービスロール] に設定し、信頼できるサービスをElastic Compute Service (ECS) に設定します。 詳細については、「信頼できるAlibaba CloudサービスのRAMロールの作成」をご参照ください。

  2. RAMロールに権限を付与します。

    AliyunContainerRegistryReadOnlyAccessポリシーをRAMロールにアタッチします。 詳細については、「RAMロールへの権限の付与」をご参照ください。

手順2: Container Registry Enterprise EditionインスタンスのIDを表示する

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

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

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

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

  5. [概要] ページの左上隅にあるContainer RegistryインスタンスのIDを表示します。

ステップ3: P2Pコンポーネントのインストール

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

  2. 左側のナビゲーションウィンドウで、[マーケットプレイス] > [マーケットプレイス] を選択します。

  3. アプリカタログページで、ack-acr-acceleration-p2pコンポーネントを検索します。 ack-acr-acceleration-p2pコンポーネントが見つかったら、コンポーネントのカードをクリックします。

  4. 表示されるページで、[デプロイ] をクリックします。

  5. [デプロイ] ウィザードで、クラスターと名前空間を選択し、[次へ] をクリックします。

  6. [パラメーター] ステップで、registryInstancesパラメーターをステップ2で取得したContainer RegistryインスタンスIDに設定します。

    複数のContainer Registryインスタンスが使用されている場合は、registryInstancesパラメーターを設定するときに、インスタンスIDをコンマ (,) で区切ります。

    説明

    デフォルトでは、P2Pコンポーネントはノードのポート65001を使用します。 ポート65001が別のコンポーネントで使用されている場合は、ビジネス要件に基づいてP2Pコンポーネントで使用されるポートを変更します。

    p2p:
      ...
      # Port of P2P Agent in host network
      port: 65001
    
      # Id of ACR registry instances, support multi, e.g. "cri-xxx,cri-yyy"
      registryInstances: <ACR instance Id>
  7. オプション: controller.ramRoleパラメーターを、手順1で作成したRAMロールの名前に設定します。

    説明

    controller.ramRoleパラメーターは、ACKサーバーレスクラスターにのみ必要です。 他のクラスターでは、この手順をスキップできます。

    controller:
      ...
      # ACK Serverless cluster setting, in order to accessing ACR OpenAPI(Get*, List*) for ECS
      ramRole: <your ram role name>
  8. オプション: P2Pコンポーネントを使用してアップロードとダウンロードの合計帯域幅の上限を指定する場合は、ratelimitパラメーターを設定します。 デフォルト値は512メガバイト/秒です。 ノードの帯域幅に基づいて値を指定できます。

    p2p:
      # Total net rate limit (MBytes/s) for uploading and downloading
      ratelimit: "512M"
  9. [デプロイ] ウィンドウで、クラスターを選択し、[作成] をクリックします。

ステップ4: P2Pアクセラレーションを有効にする

ポッドやデプロイメントなどのワークロードにP2Pアクセラレーションラベルを追加して、これらのワークロードのP2Pアクセラレーションを有効にすることができます。 ACKクラスターの名前空間にP2Pアクセラレーションラベルを追加することもできます。 このように、P2Pアクセラレーションは、この名前空間のアクセラレーション条件を満たすすべてのワークロードに対して有効になります。 P2Pアクセラレーションを有効にするために、特定のワークロードのYAMLファイルを変更する必要はありません。 ビジネス要件に基づいてP2Pアクセラレーションラベルを追加する方法を選択します。

説明

P2Pアクセラレーションラベルの名前はk8s.aliyun.com/image-accelerate-modeで、値はp2pです。

  • ワークロードにP2Pアクセラレーションラベルを追加する

    この例では、展開にP2Pアクセラレーションラベルを追加します。 次のコマンドを実行して、配置にラベルを追加します。

    kubectl edit deploy <Deployment name>

    配置のYAMLファイルにラベルk8s.aliyun.com/image-accelerate-mode: p2pを追加します。

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: test
      labels:
        app: nginx
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          labels:
            # enable P2P
            k8s.aliyun.com/image-accelerate-mode: p2p
            app: nginx
        spec:
          # your ACR instacne image pull secret
          imagePullSecrets:
          - name: test-registry
          containers:
          # your ACR instacne image
          - image: test-registry-vpc.cn-hangzhou.cr.aliyuncs.com/docker-builder/nginx:latest
            name: test
            command: ["sleep", "3600"]
  • P2Pアクセラレーションラベルを名前空間に追加する

    • ACKコンソールの名前空間にP2Pアクセラレーションラベルを追加する

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

      2. 左側のナビゲーションペインで、[クラスター] をクリックします。

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

      4. 左側のナビゲーションウィンドウで、[名前空間とクォータ] をクリックします。

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

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

    • kubectlを使用してP2Pアクセラレーションラベルを名前空間に追加する

      kubectl label namespaces <your-namespace> k8s.aliyun.com/image-accelerate-mode=p2p

P2Pアクセラレーションの検証

ポッドに対してP2Pアクセラレーションを有効にすると、P2Pコンポーネントは自動的にP2P-related情報をポッドのYAMLファイルに追加します。 情報は、P2P-related注釈、P2P-accelerated画像のアドレス、およびP2P-accelerated画像をプルするための秘密を含む。

重要

元のイメージをプルするために使用されるシークレットとP2P-acceleratedのイメージをプルするために使用されるシークレットの唯一の違いは、イメージリポジトリのドメイン名です。 元の画像をプルするためのシークレットでユーザー情報が無効である場合、P2P-accelerated画像もプルされません。

次のコマンドを実行して、ポッドのYAMLファイルを表示します。

kubectl get po <Pod name> -oyaml

期待される出力:

apiVersion: v1
kind: Pod
metadata:
  annotations:
    # inject p2p-annotations automatically
    k8s.aliyun.com/image-accelerate-mode: p2p
    k8s.aliyun.com/p2p-config: '...'
spec:
  containers:
   # inject image to p2p endpoint
   - image: test-registry-vpc.distributed.cn-hangzhou.cr.aliyuncs.com:65001/docker-builder/nginx:latest
  imagePullSecrets:
  - name: test-registry
  # inject image pull secret for p2p endpoint
  - name: acr-credential-test-registry-p2p

P2P-relatedのアノテーション、P2P-acceleratedイメージのアドレス、およびP2P-acceleratedイメージをプルするためのシークレットがYAMLファイルに存在する場合、P2Pアクセラレーションが有効になります。