All Products
Search
Document Center

Container Service for Kubernetes:Gunakan fitur akselerasi P2P

Last Updated:Nov 11, 2025

Fitur akselerasi P2P mempercepat penarikan citra untuk mengurangi waktu penerapan aplikasi. Ketika banyak node dalam kluster kontainer perlu menarik citra secara bersamaan, Anda dapat menggunakan akselerasi P2P untuk meningkatkan kinerja. Topik ini menjelaskan cara menggunakan fitur akselerasi P2P untuk mempercepat penarikan citra.

Informasi latar belakang

Ketika banyak node dalam kluster kontainer menarik citra secara bersamaan, bandwidth jaringan penyimpanan citra kontainer dapat menjadi bottleneck yang memperlambat proses tersebut. Fitur akselerasi P2P memanfaatkan sumber daya bandwidth dari node komputasi untuk mendistribusikan citra ke berbagai node. Hal ini mengurangi tekanan pada penyimpanan citra kontainer, mempercepat penarikan citra, dan mempersingkat waktu penerapan aplikasi. Hasil pengujian menunjukkan bahwa ketika 1.000 node menarik citra berukuran 1 GB secara bersamaan dalam jaringan dengan bandwidth 10 Gbit/s, fitur akselerasi P2P mengurangi waktu penarikan citra lebih dari 95% dibandingkan dengan mode penarikan citra biasa. Selain itu, mode akselerasi P2P baru meningkatkan kinerja sebesar 30% hingga 50% dibandingkan dengan mode akselerasi P2P lama. Secara default, mode akselerasi P2P baru digunakan saat Container Registry memuat sumber daya citra sesuai permintaan. Untuk informasi selengkapnya, lihat Muat sumber daya citra kontainer sesuai permintaan.

Anda dapat menggunakan fitur akselerasi P2P pada jenis kluster berikut:

  • Kluster ACK

  • Kluster on-premises dan kluster dari penyedia layanan cloud pihak ketiga

Prasyarat

Agen akselerasi P2P telah diinstal di kluster.

Batasan

Setelah Anda mengaktifkan fitur akselerasi P2P, agen akselerasi P2P menggunakan webhook untuk mengganti alamat citra kontainer asli dengan alamat citra yang dipercepat P2P. Misalnya, agen akselerasi P2P mengganti alamat citra asli (test****vpc.cn-hangzhou.cr.aliyuncs.com/docker-builder/nginx:latest) dengan alamat (test****vpc.distributed.cn-hangzhou.cr.aliyuncs.com:65001/docker-builder/nginx:latest) citra yang dipercepat P2P.

Selain itu, webhook secara otomatis menghasilkan kunci penarikan citra untuk menarik citra yang dipercepat P2P. Kunci penarikan citra yang dihasilkan disalin dari kunci penarikan citra asli. Pembuatan kunci penarikan citra dan penggantian alamat citra bersifat asinkron. Oleh karena itu, kami menyarankan agar Anda membuat atau menerbitkan kunci penarikan citra yang diperlukan sebelum menerapkan beban kerja. Dalam contoh di atas, kunci penarikan citra dibuat di domain test-registry-vpc.distributed.cn-hangzhou.cr.aliyuncs.com:65001. Hal ini mencegah kegagalan penarikan citra akibat penggantian alamat citra.

Aktifkan akselerasi P2P

Anda dapat menambahkan label akselerasi P2P ke beban kerja seperti Pod dan Deployment untuk mengaktifkan akselerasi P2P bagi beban kerja tersebut. Anda juga dapat menambahkan label akselerasi P2P ke namespace di kluster ACK Anda sehingga akselerasi P2P diaktifkan untuk semua beban kerja yang memenuhi kondisi akselerasi di namespace tersebut. Anda tidak perlu mengubah file YAML beban kerja untuk mengaktifkan akselerasi P2P. Pilih metode penambahan label sesuai kebutuhan Anda.

Catatan

Nama label akselerasi P2P adalah k8s.aliyun.com/image-accelerate-mode dan nilainya adalah p2p.

  • Tambahkan label akselerasi P2P ke beban kerja

    Dalam contoh ini, label akselerasi P2P ditambahkan ke Deployment. Jalankan perintah berikut untuk mengedit file YAML Deployment:

    kubectl edit deploy <Nama Deployment>

    Tambahkan label k8s.aliyun.com/image-accelerate-mode: p2p ke file YAML Deployment.

    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"]
  • Tambahkan label akselerasi P2P ke namespace

    • Gunakan konsol ACK

      1. Masuk ke Konsol ACK. Di panel navigasi sebelah kiri, klik Clusters.

      2. Di halaman Clusters, temukan kluster yang ingin Anda kelola lalu klik namanya. Di panel navigasi sebelah kiri, klik Namespaces and Quotas.

      3. Di halaman Namespace, temukan namespace tempat Anda ingin menambahkan label akselerasi P2P, lalu klik Edit di kolom Actions.

      4. Pada kotak dialog Edit Namespace, klik +Namespace Label, atur Variable Key menjadi k8s.aliyun.com/image-accelerate-mode dan Variable Value menjadi p2p, lalu klik OK.

    • Anda dapat menambahkan label akselerasi P2P melalui baris perintah.

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

Verifikasi akselerasi P2P

Setelah Anda mengaktifkan akselerasi P2P untuk sebuah Pod, agen P2P secara otomatis menyuntikkan annotation akselerasi P2P, alamat citra yang dipercepat P2P, dan rahasia untuk menarik citra yang dipercepat P2P ke dalam Pod tersebut.

Penting

Rahasia untuk menarik citra yang dipercepat P2P dan rahasia untuk menarik citra asli hanya berbeda pada nama domain repositori citra. Konfigurasi lain dari rahasia tersebut identik. Jika informasi pengguna dalam rahasia untuk menarik citra asli tidak valid, penarikan citra yang dipercepat P2P akan gagal.

Jalankan perintah berikut untuk mengkueri Pod:

kubectl get po <Nama Pod> -oyaml

Output yang diharapkan:

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

Dalam kode di atas, annotation akselerasi P2P, alamat citra yang dipercepat P2P, dan rahasia untuk menarik citra yang dipercepat P2P disuntikkan ke dalam Pod. Akselerasi P2P telah diaktifkan untuk Pod tersebut.

(Opsional) Aktifkan pengumpulan metrik akselerasi di klien

Deskripsi metrik akselerasi P2P

Aktifkan fitur pengumpulan metrik

Aktifkan fitur pengumpulan metrik saat Anda menginstal agen akselerasi P2P.

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 number of layers downloading by each node proxy
    proxyConcurrencyLimit: 128

    # The server port to communicate with P2P nodes
    p2pPort: 65002

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

    # limit for downstream throughput
    throttleLimitMB: 512

Metode akses

Field exporter dalam file YAML P2P menentukan port untuk mengumpulkan metrik.

ExporterConfig:
  enable: true # Specifies whether to enable the metrics collection feature.
  port: 65006 # Specifies the listening port.
  standaloneExporterPort: true # Specifies whether to expose a standalone port. If you set this parameter to false, throughput is over the HTTP service port

Jalankan perintah curl 127.0.0.1:$port/metrics. Metrik berikut dikembalikan.

# 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

Deskripsi metrik

Nama metrik

  • DADIP2P_Alive: menunjukkan apakah layanan aktif.

  • DADIP2P_Read_Throughtput: throughput layanan P2P. Satuan: byte/detik.

  • DADIP2P_QPS: jumlah permintaan per detik (QPS).

  • DADIP2P_MaxLatency: statistik latensi. Satuan: μs.

  • DADIP2P_Count: statistik lalu lintas. Satuan: byte.

  • DADIP2P_Cache: cache yang digunakan oleh satu server. Satuan: byte.

Tag

  • node: alamat IP layanan dan nomor port agen atau root P2P.

  • type: jenis metrik.

    • pread: memproses permintaan downstream.

    • download: routing kembali-ke-asal.

    • peer: distribusi jaringan P2P.

    • disk: memproses disk.

    • http: memproses permintaan HTTP.

    • allocated: ruang yang dialokasikan untuk cache.

    • used: ruang yang digunakan oleh cache.

Contoh metrik

DADIP2P_Count{node="11.238.108.XXX:9877",type="http",mode="agent"} 4248808352.000000 1692157615810
Total lalu lintas permintaan HTTP yang diproses oleh layanan agen: 4248808352 byte.

DADIP2P_Cache{node="11.238.108.XXX:9877",type="used",mode="agent"} 2147487744.000000 1692157615810
Cache yang digunakan oleh agen: 2147487744 byte.

Log audit

Aktifkan log audit

Atur field audit dalam p2p configmap menjadi true.

DeployConfig:
  mode: agent
  logDir: /dadi-p2p/log
  logAudit: true
  logAuditMode: stdout # Logs are collected to the console. If you set this parameter to file, logs are collected to the /dadi-p2p/log/audit.log directory

Format log audit

Kode berikut menunjukkan format log audit. Kode tersebut mencatat waktu pemrosesan dari penerimaan permintaan hingga pengembalian hasil. Satuan: μ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]

Parameter utama mencakup waktu, AUDIT, pointer thread, dan kode operasi [pathname=][size=][latency=].

Anda dapat mengabaikan parameter AUDIT dan pointer thread. Parameter size menentukan ukuran log dalam satu permintaan. Jika nilai parameter ini negatif, terjadi pengecualian. Parameter latency menentukan latensi satu permintaan. Satuan: μs.

Daftar berikut menjelaskan kode operasi umum:

  • http:pread: Proxy HTTP memproses permintaan data keluaran.

  • rpc:stat: Agen P2P mendapatkan ukuran file.

  • rpc:pread: Agen P2P memproses permintaan data keluaran.

  • download: Agen P2P mengunduh data dari upstream.

  • filewrite: Agen P2P menulis shard data saat ini ke cache.

  • fileread: Agen P2P membaca shard data dari cache.

Contoh log

download[pathname=mytest][offset=0][size=65536][latency=26461]
  ## Latensi saat agen P2P mengunduh data [0,65536) dari file mytest dari upstream adalah 26461 μs.
rpc:pread[pathname=mytest][offset=0][size=65536][latency=2]
  ## Latensi saat agen P2P mengembalikan data [0,65536) dari file mytest ke downstream adalah 2 μs.
http:pread[pathname=mytest][offset=0][size=65536][latency=26461]
  ## Latensi saat proxy mengunduh data [0,65536) dari file mytest dari upstream adalah 26461 μs.

(Opsional) Nonaktifkan pemuatan citra sesuai permintaan dan aktifkan akselerasi P2P

Catatan

Anda dapat memodifikasi konfigurasi satu node di kluster untuk menonaktifkan pemuatan citra sesuai permintaan dan mengaktifkan akselerasi P2P. Operasi O&M berikutnya pada node tersebut dapat menimpa modifikasi tersebut. Dalam kasus ini, Anda harus memodifikasi ulang konfigurasi node tersebut.

  1. Masuk ke Konsol ACK. Di panel navigasi sebelah kiri, klik Clusters.

  2. Di halaman Clusters, klik nama kluster yang ingin Anda kelola. Di panel navigasi sebelah kiri, pilih Nodes > Nodes.

  3. Di halaman Nodes, klik Instance ID di bawah alamat IP node yang ingin Anda kelola.

  4. Di halaman detail instance, gunakan Remote Connection untuk masuk ke node tersebut.

  5. Jalankan perintah vi untuk mengedit field p2pConfig dalam file /etc/overlaybd/overlaybd.json dengan mengubah nilai enable menjadi false.

    {
         "p2pConfig": {
            "enable": false,
            "address": "https://localhost:6****/accelerator"
        },
    ... ...
    }
  6. Jalankan perintah berikut untuk memuat ulang sumber daya citra sesuai permintaan:

    service overlaybd-tcmu restart

Lampiran

Referensi efek akselerasi P2P

Menarik citra dengan spesifikasi berbeda

Spesifikasi citra yang digunakan dalam pengujian

  • 4 GB (512 MB × 8 layer)

  • 10 GB (10 GB × 1 layer)

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

Lingkungan pengujian

  • Kluster ACK: 1.000 node

  • Spesifikasi instance Elastic Compute Service (ECS): 4 vCPU dan 8 GB memori

  • Spesifikasi disk cloud: SSD (ESSD) enhanced 200 GB PL1

  • Spesifikasi agen P2P: 1 vCPU, 1 GB memori, dan cache 4 GB

Skenario pengujian

Seribu node menarik citra yang sama, dan citra tersebut didekompresi setelah diunduh.

Hasil pengujian (waktu P95)

Spesifikasi citra

Waktu yang dibutuhkan

Throughput puncak (Gbit/s) routing kembali-ke-asal (bucket)

512 MB × 8 layer

116 detik

2

10 GB × 1 layer

6 menit 20 detik

1,2

4 GB × 5 layer

9 menit 15 detik

5.1

10 GB × 2 layer

9 menit 50 detik

6,7

512 MB × 40 layer

7 menit 55 detik

3,8

20 GB × 1 layer

11 menit

2,5

2 GB × 10 layer

8 menit 13 detik

3.2