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コンポーネントに付与する必要はありません。 デフォルトでは、権限が付与されます。
RAMロールを作成します。
RAMロールを作成するときは、ロールタイプパラメーターを [通常のサービスロール] に設定し、信頼できるサービスをElastic Compute Service (ECS) に設定します。 詳細については、「信頼できるAlibaba CloudサービスのRAMロールの作成」をご参照ください。
RAMロールに権限を付与します。
AliyunContainerRegistryReadOnlyAccessポリシーをRAMロールにアタッチします。 詳細については、「RAMロールへの権限の付与」をご参照ください。
手順2: Container Registry Enterprise EditionインスタンスのIDを表示する
Container Registryコンソールにログインします。
上部のナビゲーションバーで、リージョンを選択します。
左側のナビゲーションウィンドウで、[インスタンス] をクリックします。
[インスタンス] ページで、管理するEnterprise Editionインスタンスをクリックします。
[概要] ページの左上隅にあるContainer RegistryインスタンスのIDを表示します。
ステップ3: P2Pコンポーネントのインストール
ACKコンソールにログインします。
左側のナビゲーションウィンドウで、 を選択します。
アプリカタログページで、ack-acr-acceleration-p2pコンポーネントを検索します。 ack-acr-acceleration-p2pコンポーネントが見つかったら、コンポーネントのカードをクリックします。
表示されるページで、[デプロイ] をクリックします。
[デプロイ] ウィザードで、クラスターと名前空間を選択し、[次へ] をクリックします。
[パラメーター] ステップで、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>
オプション: 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>
オプション: P2Pコンポーネントを使用してアップロードとダウンロードの合計帯域幅の上限を指定する場合は、ratelimitパラメーターを設定します。 デフォルト値は512メガバイト/秒です。 ノードの帯域幅に基づいて値を指定できます。
p2p: # Total net rate limit (MBytes/s) for uploading and downloading ratelimit: "512M"
[デプロイ] ウィンドウで、クラスターを選択し、[作成] をクリックします。
ステップ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アクセラレーションラベルを追加する
ACK コンソールにログインします。
左側のナビゲーションペインで、[クラスター] をクリックします。
[クラスター] ページで、管理するクラスターを見つけ、クラスター名をクリックするか、[操作] 列の [詳細] をクリックします。
左側のナビゲーションウィンドウで、[名前空間とクォータ] をクリックします。
[名前空間] ページで、設定する名前空間を見つけ、[操作] 列の [編集] をクリックします。
[名前空間の編集] ダイアログボックスの [ラベル] セクションで、[変数キー] パラメーターを
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アクセラレーションが有効になります。