Todos os produtos
Search
Central de documentação

Container Service for Kubernetes:Use P2P acceleration

Última atualização: Jul 04, 2026

O recurso de aceleração P2P agiliza o pull de imagens para reduzir o tempo de implantação de aplicações. Quando vários nós em um cluster de contêineres precisam fazer pull de uma imagem simultaneamente, a aceleração P2P melhora significativamente o desempenho. Este tópico descreve como utilizar esse recurso para acelerar o pull de imagens.

Como funciona a aceleração P2P

Quando muitos nós fazem pull de uma imagem ao mesmo tempo, o registro de imagens de contêiner torna-se um gargalo de largura de banda. A aceleração P2P distribui os dados da imagem entre os nós de computação do cluster, reduzindo o tráfego back-to-origin e acelerando o pull para todos os nós simultaneamente.

Em um cluster de 1.000 nós fazendo pull de uma imagem de 1 GB em uma rede de 10 Gbit/s, a aceleração P2P reduz o tempo de pull em mais de 95% em comparação com pulls padrão. O novo modo de aceleração P2P também oferece uma melhoria de desempenho de 30% a 50% em relação ao modo anterior.

Por padrão, o Container Registry utiliza o novo modo de aceleração P2P ao carregar recursos de imagem sob demanda. Para mais detalhes, consulte Carregar recursos de uma imagem de contêiner sob demanda.

A aceleração P2P é compatível com os seguintes tipos de cluster:

  • Clusters ACK

  • Clusters on-premises e clusters de provedores de serviços de nuvem terceirizados

Pré-requisitos

Antes de começar, verifique se você possui:

Como o webhook modifica sua carga de trabalho

Ao ativar a aceleração P2P para um Pod, o webhook do agente de aceleração P2P executa automaticamente as seguintes ações:

  1. Substitui o endereço da imagem do contêiner por um endpoint com aceleração P2P. Exemplo:

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

    • Substituído: test****vpc.distributed.cn-hangzhou.cr.aliyuncs.com:65001/docker-builder/nginx:latest

  2. Gera um secret de pull de imagem para o endpoint P2P, copiado do seu secret original. O novo secret difere apenas no nome de domínio.

Importante

A geração do secret de pull de imagem e a substituição do endereço da imagem são processos assíncronos. Para evitar falhas no pull, crie ou emita o secret de pull de imagem para o endpoint P2P antes de implantar uma carga de trabalho. No exemplo acima, o secret é criado no domínio test-registry-vpc.distributed.cn-hangzhou.cr.aliyuncs.com:65001.

Nota

Se as credenciais no seu secret original de pull de imagem forem inválidas, o pull de imagem com aceleração P2P também falhará.

Ativar aceleração P2P

Adicione o rótulo de aceleração P2P (k8s.aliyun.com/image-accelerate-mode: p2p) a uma carga de trabalho ou a um namespace. Não é necessário modificar arquivos YAML de carga de trabalho ao utilizar o método em nível de namespace.

Opção 1: Adicionar o rótulo a uma carga de trabalho

Este exemplo adiciona o rótulo a um Deployment. Edite o Deployment:

kubectl edit deploy <Name of the Deployment>

Adicione o rótulo k8s.aliyun.com/image-accelerate-mode: p2p à seção labels do modelo 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"]

Opção 2: Adicionar o rótulo a um namespace

Aplicar o rótulo no nível de namespace ativa a aceleração P2P para todas as cargas de trabalho elegíveis nesse namespace, sem exigir alterações individuais em cada carga.

Usando o console ACK:

  1. Faça login no console ACKconsole ACK. No painel de navegação à esquerda, clique em Clusters.

  2. Na página Clusters, localize o cluster desejado e clique em seu nome. No painel de navegação à esquerda, clique em Namespaces and Quotas.

  3. Na página Namespace, encontre o namespace de destino e clique em Edit na coluna Actions.

  4. Na caixa de diálogo Edit Namespace, clique em +Labels, defina Variable Name como k8s.aliyun.com/image-accelerate-mode e Variable Value como p2p e, em seguida, clique em OK.

Usando kubectl:

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

Verificar a aceleração P2P

Após ativar a aceleração P2P, confirme se o webhook injetou a anotação, o endereço da imagem P2P e o secret de pull de imagem P2P no Pod.

Execute o seguinte comando:

kubectl get po <Name of the pod> -oyaml

Saída esperada:

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

A aceleração P2P estará ativa quando os três itens abaixo estiverem presentes na saída:

  • A anotação k8s.aliyun.com/image-accelerate-mode: p2p

  • O endereço da imagem substituído por um endpoint P2P .distributed.

  • O secret de pull de imagem P2P (acr-credential-<original-secret-name>-p2p)

(Opcional) Desativar o carregamento de imagens sob demanda e ativar a aceleração P2P

Utilize este procedimento para configurar um único nó para usar aceleração P2P sem o carregamento de imagens sob demanda.

Nota

Essas alterações aplicam-se apenas a um único nó. Operações subsequentes de O&M no nó podem sobrescrevê-las. Reaplique as alterações caso isso ocorra.

  1. Faça login no console ACKconsole ACK. No painel de navegação à esquerda, clique em Clusters.

  2. Na página Clusters, clique no nome do cluster que deseja gerenciar. No painel de navegação à esquerda, escolha Nodes > Nodes.

  3. Na página Nodes, clique no ID da instância sob o endereço IP do nó que deseja gerenciar.

  4. Na página de detalhes da instância, use Connect para fazer login no nó.

  5. Execute o comando vi para editar o campo p2pConfig no arquivo /etc/overlaybd/overlaybd.json. Defina enable como false:

    {
         "p2pConfig": {
            "enable": false,
            "address": "https://localhost:6****/accelerator"
        },
    ... ...
    }
  6. Reinicie o serviço overlaybd para recarregar os recursos de imagem sob demanda:

    service overlaybd-tcmu restart

(Opcional) Ativar coleta de métricas de aceleração

Ativar coleta de métricas

Ative a coleta de métricas durante a instalação do agente de aceleração P2P. Na configuração YAML do agente, defina exporter.enable como 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

Acessar métricas

O campo exporter no arquivo YAML do P2P define a porta de escuta. Configure-o da seguinte forma:

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.

Para recuperar as métricas, execute:

curl 127.0.0.1:$port/metrics

Exemplo de saída:

# 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

Referência de métricas

Nomes das métricas

Métrica

Descrição

Unidade

DADIP2P_Alive

Indica se o serviço está ativo

DADIP2P_Read_Throughtput

Throughput de leitura do serviço P2P

bytes/s

DADIP2P_QPS

Consultas por segundo

DADIP2P_MaxLatency

Latência máxima de requisição

μs

DADIP2P_Count

Tráfego acumulado processado

bytes

DADIP2P_Cache

Uso de cache por servidor

bytes

Tags

Tag

Valores

Descrição

node

IP:porta

Endereço de serviço do agente P2P ou raiz

type

pread

Processamento de requisição downstream

download

Roteamento back-to-origin

peer

Distribuição de rede P2P

disk

Operações de disco

http

Processamento de requisição HTTP

allocated

Espaço de cache alocado

used

Espaço de cache em uso

Exemplo:

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.

Logs de auditoria

Ativar logs de auditoria

No ConfigMap p2p, defina logAudit como 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.

Formato do log de auditoria

Cada entrada de log registra o tempo de processamento desde o recebimento da requisição até o retorno da resposta. Unidade: μ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]

Cada entrada contém: timestamp, AUDIT, ponteiro de thread e um código de operação com os campos [pathname=], [size=] e [latency=].

  • Ignore o marcador AUDIT e o ponteiro de thread — eles são para uso interno.

  • size: tamanho dos dados para uma única requisição. Um valor negativo indica uma exceção.

  • latency: latência de processamento para uma única requisição, em μs.

Códigos de operação comuns:

Código

Descrição

http:pread

Proxy HTTP processando uma requisição de dados de saída

rpc:stat

Agente P2P obtendo o tamanho do arquivo

rpc:pread

Agente P2P processando uma requisição de dados de saída

download

Agente P2P baixando dados da origem (upstream)

filewrite

Agente P2P gravando um shard de dados no cache

fileread

Agente P2P lendo shards de dados do cache

Exemplo de log:

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.

Apêndice

Referência de desempenho da aceleração P2P

Resultados de testes com 1.000 nós fazendo pull da mesma imagem simultaneamente, com descompressão da imagem após o download.

Ambiente de teste:

Componente

Especificação

Cluster ACK

1.000 nós

Instância Elastic Compute Service (ECS)

4 vCPUs, 8 GB de memória

Disco em nuvem

ESSD PL1 de 200 GB

Agente P2P

1 vCPU, 1 GB de memória, 4 GB de cache

Especificações de imagem testadas:

  • 4 GB (512 MB × 8 camadas)

  • 10 GB (10 GB × 1 camada)

  • 20 GB (4 GB × 5 camadas, 10 GB × 2 camadas, 512 MB × 40 camadas, 20 GB × 1 camada, 2 GB × 10 camadas)

Resultados dos testes (tempo de pull P95):

Especificação da imagem

Tempo de pull

Throughput pico back-to-origin (Gbit/s)

512 MB × 8 camadas

116 segundos

2

10 GB × 1 camada

6 minutos e 20 segundos

1,2

4 GB × 5 camadas

9 minutos e 15 segundos

5,1

10 GB × 2 camadas

9 minutos e 50 segundos

6,7

512 MB × 40 camadas

7 minutos e 55 segundos

3,8

20 GB × 1 camada

11 minutos

2,5

2 GB × 10 camadas

8 minutos e 13 segundos

3,2