Tous les produits
Search
Centre de documentation

Container Registry:Utiliser l'accélération P2P

Dernière mise à jour :Aug 19, 2026

La fonctionnalité d'accélération P2P accélère l'extraction des images afin de réduire le temps de déploiement des applications. Lorsque de nombreux nœuds d'un cluster de conteneurs doivent extraire une image simultanément, vous pouvez utiliser l'accélération P2P pour améliorer les performances. Cette rubrique décrit comment utiliser la fonctionnalité d'accélération P2P pour accélérer l'extraction des images.

Fonctionnement de l'accélération P2P

Lorsque de nombreux nœuds extraient une image en même temps, le registre d'images de conteneur devient un goulot d'étranglement en termes de bande passante. L'accélération P2P répartit les données d'image entre les nœuds de calcul du cluster, ce qui réduit le trafic vers l'origine et accélère les extractions pour tous les nœuds simultanément.

Dans un cluster de 1 000 nœuds extrayant une image de 1 Go sur un réseau de 10 Gbit/s, l'accélération P2P réduit le temps d'extraction de plus de 95 % par rapport aux extractions d'images standard. Le nouveau mode d'accélération P2P améliore également les performances de 30 à 50 % par rapport à l'ancien mode.

Par défaut, le nouveau mode d'accélération P2P est utilisé lorsque Container Registry charge les ressources d'image à la demande. Pour plus de détails, consultez la rubrique Charger les ressources d'une image de conteneur à la demande.

L'accélération P2P est prise en charge dans les types de clusters suivants :

  • Clusters ACK

  • Clusters sur site et clusters de fournisseurs de services cloud tiers

Prérequis

Avant de commencer, assurez-vous que vous avez :

Modification de votre charge de travail par le webhook

Lorsque l'accélération P2P est activée pour un Pod, le webhook de l'agent d'accélération P2P effectue automatiquement les actions suivantes :

  1. Remplace l'adresse de l'image de conteneur par un endpoint accéléré par P2P. Par exemple :

    • Original : test****vpc.cn-hangzhou.cr.aliyuncs.com/docker-builder/nginx:latest

    • Remplacé : test****vpc.distributed.cn-hangzhou.cr.aliyuncs.com:65001/docker-builder/nginx:latest

  2. Génère un secret d'extraction d'image pour l'endpoint P2P, copié à partir de votre secret d'extraction d'image original. Le nouveau secret ne diffère que par le nom de domaine.

Important

La génération du secret d'extraction d'image et le remplacement de l'adresse de l'image sont asynchrones. Pour éviter les échecs d'extraction, créez ou émettez le secret d'extraction d'image pour l'endpoint P2P avant de déployer une charge de travail. Dans l'exemple ci-dessus, le secret est créé dans le domaine test-registry-vpc.distributed.cn-hangzhou.cr.aliyuncs.com:65001.

Remarque

Si les identifiants de votre secret d'extraction d'image original ne sont pas valides, l'extraction d'image accélérée par P2P échouera également.

Activer l'accélération P2P

Ajoutez le libellé d'accélération P2P (k8s.aliyun.com/image-accelerate-mode: p2p) à une charge de travail ou à un namespace. Vous n'avez pas besoin de modifier les fichiers YAML des charges de travail lorsque vous utilisez la méthode au niveau du namespace.

Option 1 : Ajouter le libellé à une charge de travail

Cet exemple ajoute le libellé à un Deployment. Modifiez le Deployment :

kubectl edit deploy <Name of the Deployment>

Ajoutez le libellé k8s.aliyun.com/image-accelerate-mode: p2p à la section labels du modèle de Pod :

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 instance image pull secret
      imagePullSecrets:
      - name: test-registry
      containers:
      # your ACR instance image
      - image: test-registry-vpc.cn-hangzhou.cr.aliyuncs.com/docker-builder/nginx:latest
        name: test
        command: ["sleep", "3600"]

Option 2 : Ajouter le libellé à un namespace

L'application du libellé au niveau du namespace active l'accélération P2P pour toutes les charges de travail éligibles de ce namespace, sans nécessiter de modifications individuelles pour chaque charge de travail.

Utilisation de la console ACK :

  1. Connectez-vous à la console ACKconsole ACK. Dans le volet de navigation de gauche, cliquez sur Clusters.

  2. Sur la page Clusters, recherchez le cluster souhaité et cliquez sur son nom. Dans le volet de navigation de gauche, cliquez sur Namespaces and Quotas.

  3. Sur la page Namespace, recherchez le namespace cible et cliquez sur Edit dans la colonne Actions.

  4. Dans la boîte de dialogue Edit Namespace, cliquez sur +Labels, définissez Variable Name sur k8s.aliyun.com/image-accelerate-mode et Variable Value sur p2p, puis cliquez sur OK.

Utilisation de kubectl :

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

Vérifier l'accélération P2P

Après avoir activé l'accélération P2P, confirmez que le webhook a injecté l'annotation, l'adresse d'image P2P et le secret d'extraction d'image P2P dans le Pod.

Exécutez la commande suivante :

kubectl get po <Name of the pod> -oyaml

Sortie attendue :

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

L'accélération P2P est active lorsque les trois éléments suivants sont présents dans la sortie :

  • L'annotation k8s.aliyun.com/image-accelerate-mode: p2p

  • L'adresse de l'image remplacée par un endpoint P2P .distributed.

  • Le secret d'extraction d'image P2P (acr-credential-<original-secret-name>-p2p)

(Facultatif) Désactiver le chargement des images à la demande et activer l'accélération P2P

Suivez cette procédure pour configurer un seul nœud afin qu'il utilise l'accélération P2P sans chargement d'image à la demande.

Remarque

Ces modifications s'appliquent à un seul nœud uniquement. Les opérations d'exploitation et de maintenance ultérieures sur le nœud peuvent les écraser. Réappliquez les modifications si cela se produit.

  1. Connectez-vous à la console ACKconsole ACK. Dans le volet de navigation de gauche, cliquez sur Clusters.

  2. Sur la page Clusters, cliquez sur le nom du cluster que vous souhaitez gérer. Dans le volet de navigation de gauche, choisissez Nodes > Nodes.

  3. Sur la page Nodes, cliquez sur l'ID d'instance sous l'adresse IP du nœud que vous souhaitez gérer.

  4. Sur la page des détails de l'instance, utilisez Connect pour vous connecter au nœud.

  5. Exécutez la commande vi pour modifier le champ p2pConfig dans le fichier /etc/overlaybd/overlaybd.json. Définissez enable sur false :

    {
         "p2pConfig": {
            "enable": false,
            "address": "https://localhost:6****/accelerator"
        },
    ... ...
    }
  6. Redémarrez le service overlaybd pour recharger les ressources d'image à la demande :

    service overlaybd-tcmu restart

(Facultatif) Activer la collecte de métriques d'accélération

Activer la collecte de métriques

Activez la collecte de métriques lors de l'installation de l'agent d'accélération P2P. Dans la configuration YAML de l'agent, définissez exporter.enable sur true :

p2p:

  v2:
    # Component for P2P v2
    image: registry-vpc.__ACK_REGION_ID__.aliyuncs.com/acs/dadi-agent
    imageTag: v0.1.2-72276d4-aliyun

    # Concurrency limit on the number of layers each node proxy downloads simultaneously
    proxyConcurrencyLimit: 128

    # Port for communication between P2P nodes
    p2pPort: 65002

    cache:
      # Disk cache capacity in bytes, default 4 GB
      capacity: 4294967296
      # Set to 1 if you are using high-performance disks, e.g. ESSD PL2/PL3
      aioEnable: 0
    exporter:
      # Set to true to enable metric collection
      enable: false
      port: 65003

    # Downstream throughput limit in MB/s
    throttleLimitMB: 512

Accéder aux métriques

Le champ exporter dans le fichier YAML P2P définit le port d'écoute. Configurez-le comme suit :

ExporterConfig:
  enable: true # Enables the metric collection feature.
  port: 65006 # Listening port.
  standaloneExporterPort: true # Exposes a standalone port. If set to false, throughput is reported over the HTTP service port.

Pour récupérer les métriques, exécutez :

curl 127.0.0.1:$port/metrics

Exemple de sortie :

# HELP DADIP2P_Alive
# TYPE DADIP2P_Alive gauge
DADIP2P_Alive{node="192.168.69.172:65005",mode="agent"} 1.000000 1692156721833

# HELP DADIP2P_Read_Throughtput Bytes / sec
# TYPE DADIP2P_Read_Throughtput gauge
DADIP2P_Read_Throughtput{node="192.168.69.172:65005",type="pread",mode="agent"} 0.000000 1692156721833
DADIP2P_Read_Throughtput{node="192.168.69.172:65005",type="download",mode="agent"} 0.000000 1692156721833
DADIP2P_Read_Throughtput{node="192.168.69.172:65005",type="peer",mode="agent"} 0.000000 1692156721833
DADIP2P_Read_Throughtput{node="192.168.69.172:65005",type="disk",mode="agent"} 0.000000 1692156721833
DADIP2P_Read_Throughtput{node="192.168.69.172:65005",type="http",mode="agent"} 0.000000 1692156721833

# HELP DADIP2P_QPS
# TYPE DADIP2P_QPS gauge
DADIP2P_QPS{node="192.168.69.172:65005",type="pread",mode="agent"} 0.000000 1692156721833
DADIP2P_QPS{node="192.168.69.172:65005",type="download",mode="agent"} 0.000000 1692156721833
DADIP2P_QPS{node="192.168.69.172:65005",type="peer",mode="agent"} 0.000000 1692156721833
DADIP2P_QPS{node="192.168.69.172:65005",type="disk",mode="agent"} 0.000000 1692156721833
DADIP2P_QPS{node="192.168.69.172:65005",type="http",mode="agent"} 0.000000 1692156721833

# HELP DADIP2P_MaxLatency us
# TYPE DADIP2P_MaxLatency gauge
DADIP2P_MaxLatency{node="192.168.69.172:65005",type="pread",mode="agent"} 0.000000 1692156721833
DADIP2P_MaxLatency{node="192.168.69.172:65005",type="download",mode="agent"} 0.000000 1692156721833
DADIP2P_MaxLatency{node="192.168.69.172:65005",type="peer",mode="agent"} 0.000000 1692156721833
DADIP2P_MaxLatency{node="192.168.69.172:65005",type="disk",mode="agent"} 0.000000 1692156721833
DADIP2P_MaxLatency{node="192.168.69.172:65005",type="http",mode="agent"} 0.000000 1692156721833

# HELP DADIP2P_Count Bytes
# TYPE DADIP2P_Count gauge
DADIP2P_Count{node="192.168.69.172:65005",type="pread",mode="agent"} 0.000000 1692156721833
DADIP2P_Count{node="192.168.69.172:65005",type="download",mode="agent"} 0.000000 1692156721833
DADIP2P_Count{node="192.168.69.172:65005",type="peer",mode="agent"} 0.000000 1692156721833
DADIP2P_Count{node="192.168.69.172:65005",type="disk",mode="agent"} 0.000000 1692156721833
DADIP2P_Count{node="192.168.69.172:65005",type="http",mode="agent"} 0.000000 1692156721833

# HELP DADIP2P_Cache
# TYPE DADIP2P_Cache gauge
DADIP2P_Cache{node="192.168.69.172:65005",type="allocated",mode="agent"} 4294967296.000000 1692156721833
DADIP2P_Cache{node="192.168.69.172:65005",type="used",mode="agent"} 4294971392.000000 1692156721833

# HELP DADIP2P_Label
# TYPE DADIP2P_Label gauge

Référence des métriques

Noms des métriques

Metric Description Unit
DADIP2P_Alive Indique si le service est actif —
DADIP2P_Read_Throughtput Débit de lecture du service P2P octets/s
DADIP2P_QPS Requêtes par seconde —
DADIP2P_MaxLatency Latence maximale des requêtes μs
DADIP2P_Count Trafic cumulé traité octets
DADIP2P_Cache Utilisation du cache par serveur octets

Tags

Tag Values Description
node IP:port Adresse de service de l'agent P2P ou de la racine
type pread Traitement des requêtes descendantes
download Routage vers l'origine
peer Distribution via le réseau P2P
disk Opérations sur disque
http Traitement des requêtes HTTP
allocated Espace cache alloué
used Espace cache utilisé

Exemple :

DADIP2P_Count{node="11.238.108.XXX:9877",type="http",mode="agent"} 4248808352.000000 1692157615810
The total HTTP request traffic processed by the agent service: 4248808352 bytes.

DADIP2P_Cache{node="11.238.108.XXX:9877",type="used",mode="agent"} 2147487744.000000 1692157615810
The cache used by the agent: 2147487744 bytes.

Journaux d'audit

Activer les journaux d'audit

Dans le ConfigMap p2p, définissez logAudit sur true :

DeployConfig:
  mode: agent
  logDir: /dadi-p2p/log
  logAudit: true
  logAuditMode: stdout # stdout sends logs to the console. Set to file to write logs to /dadi-p2p/log/audit.log.

Format des journaux d'audit

Chaque entrée de journal enregistre le temps de traitement depuis la réception de la requête jusqu'au retour de la réponse. Unité : μs.

2022/08/30 15:44:52|AUDIT|th=00007FBA247C5280|download[pathname=/https://cri-pi840la*****-registry.oss-cn-hangzhou.aliyuncs.com/docker/registry/v2/blobs/sha256/dd/dd65726c224b09836aeb6ecebd6baf58c96be727ba86da14e62835569896008a/data][offset=125829120][size=2097152][latency=267172]
....
2022/08/30 15:44:55|AUDIT|th=00007FBA2EFEAEC0|http:pread[pathname=/https://cri-pi840lacia*****-registry.oss-cn-hangzhou.aliyuncs.com/docker/registry/v2/blobs/sha256/dd/dd65726c224b09836aeb6ecebd6baf58c96be727ba86da14e62835569896008a/data][offset=127467520][size=65536][latency=21]

Chaque entrée contient : l'horodatage, AUDIT, le pointeur de thread et un code d'opération avec les champs [pathname=], [size=] et [latency=].

  • Ignorez le marqueur AUDIT et le pointeur de thread — ils sont destinés à un usage interne.

  • size : taille des données pour une seule requête. Une valeur négative indique une exception.

  • latency : latence de traitement pour une seule requête, en μs.

Codes d'opération courants :

Code Description
http:pread Le proxy HTTP traite une requête de données de sortie
rpc:stat L'agent P2P obtient la taille du fichier
rpc:pread L'agent P2P traite une requête de données de sortie
download L'agent P2P télécharge des données depuis l'amont
filewrite L'agent P2P écrit un fragment de données dans le cache
fileread L'agent P2P lit des fragments de données depuis le cache

Exemple de journal :

download[pathname=mytest][offset=0][size=65536][latency=26461]
  ## The latency when the P2P agent downloads the [0,65536) data of the mytest file from the upstream is 26461 μs.
rpc:pread[pathname=mytest][offset=0][size=65536][latency=2]
  ## The latency when the P2P agent returns the [0,65536) data of the mytest file to the downstream is 2 μs.
http:pread[pathname=mytest][offset=0][size=65536][latency=26461]
  ## The latency when the proxy downloads the [0,65536) data of the mytest file from the upstream is 26461 μs.

Annexe

Référence des performances de l'accélération P2P

Résultats des tests pour 1 000 nœuds extrayant la même image simultanément, avec décompression de l'image après le téléchargement.

Environnement de test :

Component Specification
Cluster ACK 1 000 nœuds
Instance Elastic Compute Service (ECS) 4 vCPU, 8 Go de mémoire
Disque cloud ESSD PL1 de 200 Go
Agent P2P 1 vCPU, 1 Go de mémoire, 4 Go de cache

Spécifications d'image testées :

  • 4 Go (512 Mo × 8 couches)

  • 10 Go (10 Go × 1 couche)

  • 20 Go (4 Go × 5 couches, 10 Go × 2 couches, 512 Mo × 40 couches, 20 Go × 1 couche, 2 Go × 10 couches)

Résultats des tests (temps d'extraction P95) :

Image specification Pull time Peak back-to-origin throughput (Gbit/s)
512 Mo × 8 couches 116 secondes 2
10 Go × 1 couche 6 minutes 20 secondes 1,2
4 Go × 5 couches 9 minutes 15 secondes 5,1
10 Go × 2 couches 9 minutes 50 secondes 6,7
512 Mo × 40 couches 7 minutes 55 secondes 3,8
20 Go × 1 couche 11 minutes 2,5
2 Go × 10 couches 8 minutes 13 secondes 3,2