Mengambil gambar kontainer dari registri saat pembuatan pod menimbulkan latensi, terutama untuk gambar berukuran besar atau di lingkungan dengan akses jaringan yang lambat. ImageCache adalah fitur Elastic Container Instance (ECI) yang tersedia sebagai CustomResourceDefinition (CRD) Kubernetes. Tambahkan anotasi ke metadata pod Anda agar ECI mencocokkan cache gambar yang telah dibuat sebelumnya saat pembuatan pod, sehingga lapisan gambar sudah tersedia di disk alih-alih ditarik dari registri.
Anotasi hanya berlaku saat pod dibuat. Menambahkan atau mengubah anotasi pada pod yang sudah ada tidak memiliki efek.
Cara kerja
Buat resource ImageCache yang berisi gambar yang digunakan oleh pod Anda.
Tambahkan anotasi ke
spec.template.metadatadalam manifes pod atau Deployment Anda.Saat ECI membuat pod, anotasi tersebut dicocokkan dengan resource ImageCache yang tersedia dan lapisan yang telah di-cache dipasang, sehingga proses pengambilan gambar dilewati.
ImageCache adalah resource tingkat kluster. Pod di namespace mana pun dalam kluster dapat menggunakannya.
Prasyarat
Sebelum memulai, pastikan Anda telah memiliki:
Kluster Kubernetes dengan ECI yang diaktifkan
Setidaknya satu resource ImageCache dalam status Ready (diperlukan saat menggunakan pinning dengan
eci-imc-id)
Anotasi
Tambahkan anotasi berikut ke bagian metadata spesifikasi pod Anda. Untuk Deployment, letakkan di spec.template.metadata.
| Anotasi | Nilai contoh | Default | Deskripsi |
|---|---|---|---|
k8s.aliyun.com/eci-auto-imc | "true" | "true" | Mengaktifkan pencocokan cache gambar otomatis. ECI memilih cache terbaik berdasarkan tingkat kecocokan gambar, ukuran gambar, dan waktu pembuatan. Jika tidak ada cache yang cocok, ECI akan membuatnya secara otomatis. |
k8s.aliyun.com/imc-perfect-match | "true" | "false" | Mengharuskan semua gambar kontainer dalam pod sesuai dengan cache gambar. |
k8s.aliyun.com/imc-match-count-request | "2" | — | Menentukan jumlah gambar kontainer dalam pod yang ingin Anda cocokkan secara tepat dengan cache gambar. |
k8s.aliyun.com/eci-imc-id | imc-2zebxkiifuyzzlhl**** | — | Mengaitkan pod ke cache gambar tertentu. |
Aturan prioritas
Saat beberapa anotasi ditetapkan, aturan prioritas berikut berlaku:
eci-imc-id(mengaitkan ke cache tertentu) menggantikan pencocokan otomatis (eci-auto-imc).Dalam pencocokan otomatis,
imc-perfect-matchmenggantikanimc-match-count-requestjika keduanya ditetapkan. Lebih disarankan menggunakanimc-perfect-match.
Contoh konfigurasi
Untuk hasil terbaik pada kedua contoh berikut:
Gunakan gambar yang sudah termasuk dalam resource ImageCache untuk memaksimalkan tingkat hit cache.
Tetapkan
imagePullPolicy: IfNotPresentpada setiap kontainer untuk melewati pengunduhan lapisan yang sudah di-cache.
Contoh 1: Pencocokan cache gambar otomatis (disarankan)
Gunakan eci-auto-imc agar ECI memilih cache terbaik yang tersedia secara otomatis. Tambahkan imc-perfect-match: "true" jika semua gambar dalam pod harus ada dalam cache.
apiVersion: apps/v1
kind: Deployment
metadata:
name: test
labels:
app: test
spec:
replicas: 2
selector:
matchLabels:
app: nginx
template:
metadata:
name: nginx-test
labels:
app: nginx
alibabacloud.com/eci: "true"
annotations:
k8s.aliyun.com/eci-auto-imc: "true" # Aktifkan pencocokan cache otomatis
k8s.aliyun.com/imc-perfect-match: "true" # Semua gambar harus ada dalam cache
spec:
containers:
- name: nginx
image: registry.cn-shanghai.aliyuncs.com/eci_open/nginx:1.14.2
ports:
- containerPort: 80
imagePullPolicy: IfNotPresent # Mencegah pengunduhan ulang lapisan gambar yang sudah di-cache
- name: busybox
image: registry.cn-shanghai.aliyuncs.com/eci_open/busybox:1.30
command: ["sleep"]
args: ["999999"]
imagePullPolicy: IfNotPresent # Mencegah pengunduhan ulang lapisan gambar yang sudah di-cacheContoh 2: Mengaitkan ke cache gambar tertentu
Gunakan eci-imc-id untuk menargetkan resource ImageCache tertentu. Cache yang ditentukan harus berada dalam status Ready sebelum Anda menerapkan manifes, jika tidak, pembuatan pod akan gagal.
apiVersion: apps/v1
kind: Deployment
metadata:
name: test
labels:
app: test
spec:
replicas: 2
selector:
matchLabels:
app: nginx
template:
metadata:
name: nginx-test
labels:
app: nginx
alibabacloud.com/eci: "true"
annotations:
k8s.aliyun.com/eci-imc-id: imc-2ze5tm5gehgtiiga**** # ID ImageCache target
spec:
containers:
- name: nginx
image: registry.cn-shanghai.aliyuncs.com/eci_open/nginx:1.14.2
ports:
- containerPort: 80
imagePullPolicy: IfNotPresent # Mencegah pengunduhan ulang lapisan gambar yang sudah di-cache