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.
Untuk informasi tentang cara menginstal agen akselerasi P2P di kluster ACK, lihat Instal agen akselerasi P2P di kluster ACK.
Untuk informasi tentang cara menginstal agen akselerasi P2P di kluster on-premises atau kluster dari penyedia layanan cloud pihak ketiga, lihat Instal agen akselerasi P2P di kluster on-premises atau kluster dari penyedia layanan cloud pihak ketiga.
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.
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: p2pke 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
Masuk ke Konsol ACK. Di panel navigasi sebelah kiri, klik Clusters.
Di halaman Clusters, temukan kluster yang ingin Anda kelola lalu klik namanya. Di panel navigasi sebelah kiri, klik Namespaces and Quotas.
Di halaman Namespace, temukan namespace tempat Anda ingin menambahkan label akselerasi P2P, lalu klik Edit di kolom Actions.
Pada kotak dialog Edit Namespace, klik +Namespace Label, atur Variable Key menjadi
k8s.aliyun.com/image-accelerate-modedan Variable Value menjadip2p, 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.
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> -oyamlOutput 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-p2pDalam 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: 512Metode 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 portJalankan 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 gaugeDeskripsi 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 directoryFormat 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
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.
Masuk ke Konsol ACK. Di panel navigasi sebelah kiri, klik Clusters.
Di halaman Clusters, klik nama kluster yang ingin Anda kelola. Di panel navigasi sebelah kiri, pilih .
Di halaman Nodes, klik Instance ID di bawah alamat IP node yang ingin Anda kelola.
Di halaman detail instance, gunakan Remote Connection untuk masuk ke node tersebut.
Jalankan perintah
viuntuk mengedit field p2pConfig dalam file/etc/overlaybd/overlaybd.jsondengan mengubah nilai enable menjadi false.{ "p2pConfig": { "enable": false, "address": "https://localhost:6****/accelerator" }, ... ... }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 |