Alibaba Cloud Container Service for Kubernetes (ACK) クラスターで P2P アクセラレーション機能を使用すると、コンテナイメージのプルを高速化し、アプリケーションのデプロイ時間を短縮できます。このトピックでは、ACK クラスターに P2P アクセラレーションエージェントをインストールする方法について説明します。
前提条件
ACR Enterprise Edition インスタンスの Standard または Advanced Edition が作成されていること。
ACK マネージドクラスターまたは専用クラスター、あるいはACK Serverless Pro クラスターが作成されていること。
ご利用の ACK クラスターの VPC からのアクセスを許可するように、ACR Enterprise Edition インスタンスのネットワークアクセス制御が設定されていること。詳細については、「VPC のアクセス制御の設定」をご参照ください。
イメージ使用の制限事項
大規模モデル用などの非常に大きなコンテナイメージを使用する場合、効率的な P2P プルを確保するために、次の要件のいずれかを満たす必要があります。ノードプールのノードにAutoPL タイプのデータディスクがあること、またはノードに P2P データキャッシング用に 8 GB 以上の空きメモリがあること。
ステップ 1:P2P アクセラレーションの有効化
Container Registry コンソールにログインします。
上部のナビゲーションバーで、リージョンを選択します。
左側のナビゲーションウィンドウで、[インスタンス] をクリックします。
[インスタンス] ページで、管理する Enterprise Edition インスタンスをクリックします。
[概要] ページで、[インスタンス ID] を記録します。次に、[コンポーネント設定] セクションで [P2P アクセラレーション] をオンにし、確認ダイアログボックスで [OK] をクリックします。
警告P2P アクセラレーションエージェントを無効にする前に、P2P 機能の使用を停止し、エージェントがインストールされているすべてのクラスターからアンインストールする必要があります。この機能を再度有効にするには、エージェントを再インストールする必要があります。

ステップ 2:P2P エージェントのインストール
次のいずれかの方法を使用して、P2P アクセラレーションエージェントに ACR Enterprise Edition インスタンスへのアクセス権を付与できます。
worker RAM ロールを使用した権限付与とインストール。
制限事項:ACR Enterprise Edition インスタンスと ACK クラスターは、同じ Alibaba Cloud アカウントに属している必要があります。
RAM ユーザーの AccessKey ID と AccessKey Secret を使用した権限付与とインストール。
サービスアカウントの RAM ロール (RRSA) を使用した権限付与とインストール。
制限事項:この方法は、Kubernetes 1.22 以降を実行するACK マネージドクラスターでのみサポートされます。
worker RAM ロールの使用
ACK コンソールにログインします。左側のナビゲーションウィンドウで、クラスターリスト をクリックします。
クラスターリスト ページで、クラスターの名前をクリックします。左側のナビゲーションウィンドウで、クラスター情報 をクリックします。
[クラスター情報] ページで、[基本情報] タブをクリックします。[クラスターリソース] セクションで、[worker RAM ロール] の名前をコピーし、リンクをクリックして Resource Access Management (RAM) コンソールに移動し、ロールに権限を付与します。
次のカスタム権限ポリシーを作成します。詳細については、「カスタム権限ポリシーの作成」をご参照ください。
{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": [ "cr:GetInstanceVpcEndpoint", "cr:ListInstanceEndpoint" ], "Resource": "*" } ] }[ロール] ページで worker RAM ロールを見つけ、作成したカスタム権限ポリシーをアタッチします。詳細については、「RAM ロールへの権限付与」をご参照ください。
ACK コンソールにログインします。左側のナビゲーションウィンドウで、 をクリックします。
[アプリカタログ] ページで、検索ボックスに ack-acr-acceleration-p2p と入力し、コンポーネントを見つけてそのカードをクリックします。
コンポーネントの詳細ページで、右上の [デプロイ] をクリックします。
[作成] パネルで、[クラスター] と [名前空間] を選択し、リリース名を入力して、[次へ] をクリックします。
[パラメーター] パネルで、最新のチャートバージョンを選択し、acrInstances パラメーターにご利用の ACR Enterprise Edition インスタンス ID を設定します。複数のインスタンスがある場合は、ID をカンマ (
,) で区切ります。# ご利用の ACR Enterprise Edition インスタンスの ID。複数の ID を指定するには、カンマ (,) で区切ります。例: "cri-xxx,cri-yyy" acrInstances: "" # ACR Enterprise Edition インスタンスのリージョン。デフォルト値はクラスターのリージョンです。 # クラスターとインスタンスが異なるリージョンにある場合、またはデータセンターのセルフマネージドクラスターからインスタンスにアクセスする場合は、このパラメーターを設定する必要があります。 region: "" # ACR Enterprise Edition インスタンスの VPC に接続されている VPC。デフォルト値はクラスターの VPC です。 # クラスターとインスタンスが異なるリージョンにある場合、またはデータセンターのセルフマネージドクラスターから VPC 経由でインスタンスにアクセスする場合は、このパラメーターを設定する必要があります。 vpcId: "" p2p: # ホストネットワークで P2P エージェントが使用するポート。 port: 65001説明デフォルトでは、エージェントはノードでポート 65001 を使用します。ポートの競合が発生した場合は、ポート番号を変更してください。
ACK クラスターと ACR Enterprise Edition インスタンスが同じリージョンにある場合は、
regionおよびvpcIdパラメーターを空のままにできます。異なるリージョンにある場合は、regionパラメーターを ACR Enterprise Edition インスタンスのリージョンに設定し、vpcIdパラメーターをインスタンスに関連付けられている VPC の ID に設定する必要があります。大規模モデル用などの非常に大きなコンテナイメージを使用する場合は、ノードの構成に基づいて P2P データキャッシュモードを調整する必要があります:
データディスクベースのキャッシュモード (デフォルト):ノードのデータディスクタイプが AutoPL であることを確認します。
p2p.v2.cache.modeをdiskに設定します。メモリベースのキャッシュモード:ノードに 8 GB 以上の空きメモリがあることを確認し、
p2p.v2.cache.modeの値をmemoryに設定します。
RAM ユーザーの AccessKey ペアの使用
RAM ユーザーを作成します。詳細については、「RAM ユーザーの作成」をご参照ください。
RAM ユーザーに次の権限を付与します。次に、AccessKey ペアを作成し、AccessKey ID と AccessKey Secret を記録します。
{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": [ "cr:GetInstanceVpcEndpoint", "cr:ListInstanceEndpoint" ], "Resource": "*" } ] }ACK コンソールにログインします。左側のナビゲーションウィンドウで、 をクリックします。
[アプリカタログ] ページで、検索ボックスに ack-acr-acceleration-p2p と入力し、コンポーネントを見つけてそのカードをクリックします。
コンポーネントの詳細ページで、右上の [デプロイ] をクリックします。
[作成] パネルで、[クラスター] と [名前空間] を選択し、リリース名を入力して、[次へ] をクリックします。
[パラメーター] パネルで、最新のチャートバージョンを選択します。acrInstances パラメーターにご利用の ACR Enterprise Edition インスタンス ID を設定します。複数のインスタンスがある場合は、ID をカンマ (
,) で区切ります。次に、記録した AccessKey ID と AccessKey Secret を入力します。# ご利用の ACR Enterprise Edition インスタンスの ID。複数の ID を指定するには、カンマ (,) で区切ります。例: "cri-xxx,cri-yyy" acrInstances: "" # Kubernetes クラスターがデータセンターでセルフマネージドされている場合は、次のパラメーターを指定する必要があります。 accessKey: "" accessKeySecret: "" # ACR Enterprise Edition インスタンスのリージョン。デフォルト値はクラスターのリージョンです。 # クラスターとインスタンスが異なるリージョンにある場合、またはデータセンターのセルフマネージドクラスターからインスタンスにアクセスする場合は、このパラメーターを設定する必要があります。 region: "" # ACR Enterprise Edition インスタンスの VPC に接続されている VPC。デフォルト値はクラスターの VPC です。 # クラスターとインスタンスが異なるリージョンにある場合、またはデータセンターのセルフマネージドクラスターから VPC 経由でインスタンスにアクセスする場合は、このパラメーターを設定する必要があります。 vpcId: "" p2p: # ホストネットワークで P2P エージェントが使用するポート。 port: 65001説明デフォルトでは、エージェントはノードでポート 65001 を使用します。ポートの競合が発生した場合は、ポート番号を変更してください。
ACK クラスターと ACR Enterprise Edition インスタンスが同じリージョンにある場合は、
regionおよびvpcIdパラメーターを空のままにできます。異なるリージョンにある場合は、regionパラメーターを ACR Enterprise Edition インスタンスのリージョンに設定し、vpcIdパラメーターをインスタンスに関連付けられている VPC の ID に設定する必要があります。大規模モデル用などの非常に大きなコンテナイメージを使用する場合は、ノードの構成に基づいて P2P データキャッシュモードを調整する必要があります:
データディスクベースのキャッシュモード (デフォルト):ノードのデータディスクタイプが AutoPL であることを確認します。
p2p.v2.cache.modeをdiskに設定します。メモリベースのキャッシュモード:ノードに 8 GB 以上の空きメモリがあることを確認し、
p2p.v2.cache.modeの値をmemoryに設定します。
RRSA の使用
サービスアカウントの RAM ロール (RRSA) 機能を使用すると、Pod レベルで詳細な権限制御を適用できます。
RRSA 機能は、Kubernetes 1.22 以降を実行するクラスターでのみサポートされます。
RRSA を使用するには、エージェントをバージョン 0.3.6 以降にアップグレードする必要があります。
P2P アクセラレーションエージェントで RRSA を有効にするには、まずクラスターで RRSA を有効にし、次にエージェントの RRSA 設定を構成する必要があります。これらの手順を誤った順序で実行した場合、RRSA 設定を有効にするには、エージェントをアンインストールして再インストールする必要があります。
クラスターで RRSA 機能を有効にします。詳細については、「RRSA を使用してサービスアカウントに RAM ロールを関連付け、Pod レベルで詳細な権限管理を実装する」をご参照ください。
Container Registry リソースにアクセスするように RAM ロールを設定します。
シナリオ 1:ACK クラスターと ACR Enterprise Edition インスタンスが同じアカウントにある場合。
アカウント A が ACK クラスターと ACR Enterprise Edition インスタンスの両方を所有していると仮定します。アカウント A で RAM ロールを作成します。詳細については、「信頼できる Alibaba Cloud アカウントの RAM ロールの作成」をご参照ください。次に、次の権限ポリシーをロールにアタッチします。
{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": [ "cr:GetInstanceVpcEndpoint", "cr:ListInstanceEndpoint" ], "Resource": "*" } ] }{ "Statement": [ { "Action": "sts:AssumeRole", "Condition": { "StringEquals": { "oidc:aud": [ "sts.aliyuncs.com" ], "oidc:iss": "<oidc_issuer_url>", "oidc:sub": [ "system:serviceaccount:aliyun-acr-acceleration:ack-acr-acceleration-p2p-job-sa", "system:serviceaccount:aliyun-acr-acceleration:ack-acr-acceleration-p2p-sa" ] } }, "Effect": "Allow", "Principal": { "Federated": [ "<oidc_provider_arn>" ] } } ], "Version": "1" }シナリオ 2:ACK クラスターと ACR Enterprise Edition インスタンスが異なるアカウントにある場合。
アカウント A が ACK クラスターを所有し、アカウント B が ACR Enterprise Edition インスタンスを所有していると仮定します。アカウント A の ACK クラスターに、アカウント B の Container Registry リソースへのアクセス権を付与する必要があります。
アカウント A で RAM ロールを作成します。詳細については、「信頼できる Alibaba Cloud アカウントの RAM ロールの作成」をご参照ください。AliyunSTSAssumeRoleAccess 権限ポリシーをアタッチして、ロールに他のロールを引き受ける権限を付与します。次に、その信頼ポリシーを変更します。
{ "Statement": [ { "Action": "sts:AssumeRole", "Condition": { "StringEquals": { "oidc:aud": [ "sts.aliyuncs.com" ], "oidc:iss": "<oidc_issuer_url>", "oidc:sub": [ "system:serviceaccount:aliyun-acr-acceleration:ack-acr-acceleration-p2p-job-sa", "system:serviceaccount:aliyun-acr-acceleration:ack-acr-acceleration-p2p-sa" ] } }, "Effect": "Allow", "Principal": { "Federated": [ "<oidc_provider_arn>" ] } } ], "Version": "1" }アカウント B で、ACR 権限用の RAM ロールを作成します。[信頼ポリシー] タブで、アカウント A のロールの ARN を追加します。アカウント B のロールに次の権限ポリシーをアタッチします。
{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": [ "cr:GetInstanceVpcEndpoint", "cr:ListInstanceEndpoint" ], "Resource": "*" } ] }説明この RAM ロールの [最大セッション期間] を設定できます。有効な範囲は 3,600〜43,200 秒です。次の手順で expireDuration パラメーターで設定するセッション期間は、最大セッション期間以下である必要があります。expireDuration を [最大セッション期間] と同じ値に設定することを推奨します。
ACK コンソールにログインします。左側のナビゲーションウィンドウで、 をクリックします。
[アプリカタログ] ページで、検索ボックスに ack-acr-acceleration-p2p と入力し、コンポーネントを見つけてそのカードをクリックします。
コンポーネントの詳細ページで、右上の [デプロイ] をクリックします。
[作成] パネルで、[クラスター] と [名前空間] を選択し、リリース名を入力して、[次へ] をクリックします。
[パラメーター] パネルで、最新のチャートバージョンを選択します。acrInstances パラメーターにご利用の ACR Enterprise Edition インスタンス ID を設定します。複数のインスタンスがある場合は、ID をカンマ (
,) で区切ります。次の表の説明に従って、RRSA パラメーターを設定します。パラメーター
説明
値
rrsa.enable
RRSA を有効にするかどうかを指定します。
true
rrsa.rrsaRoleARN
アカウント A で作成された RAM ロールの ARN。
例: acs:ram::aaa
rrsa.rrsaOIDCProviderRoleARN
アカウント A のクラスターの OIDC プロバイダーの ARN。
例: acs:ram::bbb
rrsa.assumeRoleARN
アカウント B で作成された RAM ロールの ARN。このパラメーターは、同一アカウントのシナリオでは不要です。
例:acs:ram::ccc
rrsa.expireDuration
アカウント B で作成されたロールのセッション期間。これは、エージェントによって生成される一時的な認証情報の有効期間を決定します。同一アカウント内での利用シナリオでは、このパラメーターは必須ではありません。
重要expireDuration の値は、アカウント B で作成されたロールの「最大セッション期間」を超えることはできません。
デフォルト値は 3600 です。値は 3600〜43200 の間である必要があります。単位:秒。
アカウント B のロールの最大セッション期間も 43200 に設定する必要があります。
その他のパラメーターについては、「付録」をご参照ください。
説明デフォルトでは、エージェントはノードでポート 65001 を使用します。ポートの競合が発生した場合は、ポート番号を変更してください。
ACK クラスターと ACR Enterprise Edition インスタンスが同じリージョンにある場合は、
regionおよびvpcIdパラメーターを空のままにできます。異なるリージョンにある場合は、regionパラメーターを ACR Enterprise Edition インスタンスのリージョンに設定し、vpcIdパラメーターをインスタンスに関連付けられている VPC の ID に設定する必要があります。大規模モデル用などの非常に大きなコンテナイメージを使用する場合は、ノードの構成に基づいて P2P データキャッシュモードを調整する必要があります:
データディスクベースのキャッシュモード (デフォルト):ノードのデータディスクタイプが AutoPL であることを確認します。
p2p.v2.cache.modeをdiskに設定します。メモリベースのキャッシュモード:ノードに 8 GB 以上の空きメモリがあることを確認し、
p2p.v2.cache.modeの値をmemoryに設定します。
# ご利用の ACR Enterprise Edition インスタンスの ID。複数の ID を指定するには、カンマ (,) で区切ります。例: "cri-xxx,cri-yyy" acrInstances: "" rrsa: enable: true rrsaRoleARN: "" rrsaOIDCProviderRoleARN: "" assumeRoleARN: "" expireDuration: 3600 # ACR Enterprise Edition インスタンスのリージョン。デフォルト値はクラスターのリージョンです。 # クラスターとインスタンスが異なるリージョンにある場合、またはデータセンターのセルフマネージドクラスターからインスタンスにアクセスする場合は、このパラメーターを設定する必要があります。 region: "" # ACR Enterprise Edition インスタンスの VPC に接続されている VPC。デフォルト値はクラスターの VPC です。 # クラスターとインスタンスが異なるリージョンにある場合、またはデータセンターのセルフマネージドクラスターから VPC 経由でインスタンスにアクセスする場合は、このパラメーターを設定する必要があります。 vpcId: "" p2p: # ホストネットワークで P2P エージェントが使用するポート。 port: 65001
付録
次の表に、ack-acr-acceleration-p2p コンポーネントのパラメーターの一部を示します。
パラメーター | デフォルト (ディスクモード) | デフォルト (メモリモード) | 説明 |
blocksize | 256 | 256 | ソースの Object Storage Service (OSS) からリクエストされる単一のデータチャンクのサイズ。 |
capacity | 4294967296 | 0 | ディスクキャッシュのサイズ。 |
optionBlockSize | 67108864 | 8589934592 | メモリキャッシュのサイズ。
|
memoryCacheCapacityGB | 1 | 8 |
|
aio | 0 | 0 | libaio を有効にするかどうかを指定します。このパラメーターはメモリモードでは適用されません。
|
DeployConfig | |||
proxyFsParallels | 128 | P2P エージェントが同時に処理できるリクエストの数。 | |
AgentConfig | |||
connectTimeout (s) | 5 | P2P エージェントがアップストリームピアとの接続を確立するためのタイムアウト。 | |
transferTimeout (s) | 15 | データ転送のタイムアウト。この期間内にデータが受信されない場合、転送は中断されます。 | |