Saat menerapkan layanan melalui gambar di Knative, kluster Container Service for Kubernetes (ACK) menarik gambar dari repositori jarak jauh dan membuat pod baru. Gambar besar dapat menyebabkan waktu penarikan yang lama. Kami merekomendasikan Anda menggunakan fitur ImageCache yang disediakan oleh Elastic Container Instance untuk membuat snapshot cache dari gambar yang ingin digunakan. Kemudian, buat pod (contoh wadah elastis) berdasarkan snapshot ini untuk mengurangi waktu startup.
Pengenalan
Proses pembuatan pod sering kali memerlukan waktu yang cukup lama karena pengunduhan gambar. Untuk mempercepat pembuatan pod, Elastic Container Instance menyediakan fitur cache gambar. Anda dapat membuat snapshot cache dari gambar dan menggunakannya untuk menerapkan pod pada contoh wadah elastis. Hal ini mengurangi jumlah lapisan gambar yang perlu diunduh, sehingga mempercepat pembuatan pod. Sebagai contoh, jika Anda membuat pod menggunakan gambar Docker untuk Apache Flink sebesar 386,26 MB, dibutuhkan 50 detik untuk menarik gambar dari Docker Hub. Namun, dengan menggunakan cache gambar, proses ini hanya membutuhkan 5 detik.
Data ini bersifat teoretis. Penghematan waktu bervariasi tergantung pada jumlah dan ukuran gambar serta kualitas koneksi jaringan ke repositori gambar.
Dalam kluster ACK, contoh wadah elastis disimpan sebagai jenis objek Custom Resource Definition (CRD) bernama ImageCache. CRD ImageCache adalah sumber daya tingkat kluster dalam Kubernetes dan dapat digunakan di semua namespace dalam kluster.
Untuk informasi lebih lanjut tentang cara membuat dan menggunakan cache gambar serta metode penagihan, lihat Ikhtisar Cache Gambar.
Langkah 1: Buat ImageCache
Buat file imagecache-secrets-test.yaml berdasarkan blok kode berikut untuk mempercepat penarikan gambar dan mengurangi waktu startup instance:
apiVersion: eci.alibabacloud.com/v1 kind: ImageCache metadata: name: imagecache-sample-test annotations: k8s.aliyun.com/eci-image-cache: "true" # Aktifkan penggunaan ulang ImageCaches. spec: images: - registry.cn-shanghai.aliyuncs.com/eci_open/nginx:1.14.2 - registry.cn-shanghai.aliyuncs.com/eci_open/busybox:1.30 imageCacheSize: 25 retentionDays: 7CatatanJika gambar yang ingin Anda cache memiliki lapisan gambar yang tersedia di ImageCaches yang ada, Anda dapat mengaktifkan penggunaan ulang ImageCaches untuk mempercepat proses caching.
Untuk informasi lebih lanjut tentang ImageCache dan cara mengonfigurasi parameter dalam kode sampel di atas, lihat Kelola ImageCaches.
Jalankan perintah berikut untuk membuat ImageCache:
kubectl create -f imagecache-secrets-test.yamlJalankan perintah berikut untuk menanyakan status ImageCache:
kubectl get imagecache imagecache-sample-testKeluaran yang diharapkan:
NAME AGE CACHEID PHASE PROGRESS imagecache-sample-test 20h imc-2zeditzeoemfhqor**** Ready 100%
Langkah 2: Gunakan ImageCache untuk mempercepat pembuatan pod
Saat membuat pod dari ImageCache, Anda dapat menambahkan anotasi ke metadata pod metadata untuk menentukan ImageCache yang ingin digunakan atau mengatur pod untuk secara otomatis memilih ImageCache. Berikut adalah daftar anotasi yang tersedia:
k8s.aliyun.com/eci-image-snapshot-id: menentukan ImageCache yang ingin digunakan.k8s.aliyun.com/eci-image-cache: secara otomatis memilih ImageCache optimal.
Jika Anda menentukan k8s.aliyun.com/eci-image-snapshot-id dan k8s.aliyun.com/eci-image-cache secara bersamaan, hanya k8s.aliyun.com/eci-image-snapshot-id yang akan berlaku.
Tentukan ImageCache
Saat membuat Layanan Knative, Anda dapat menggunakan anotasi k8s.aliyun.com/eci-image-snapshot-id untuk menentukan ImageCache yang ingin digunakan.
Pastikan bahwa ImageCache yang ditentukan berada dalam status Ready. Jika tidak, pembuatan pod akan gagal.
Contoh:
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
name: helloworld-go
spec:
template:
metadata:
labels:
app: helloworld-go
annotations:
k8s.aliyun.com/eci-image-snapshot-id: imc-2ze5tm5gehgtiiga**** # Tentukan ImageCache yang ingin Anda gunakan.
spec:
containers:
- image: registry.cn-hangzhou.aliyuncs.com/knative-sample/helloworld-go:73fbdd56Pilih ImageCache secara otomatis
Saat membuat Layanan Knative, Anda dapat menggunakan anotasi k8s.aliyun.com/eci-image-cache untuk mengatur pod agar secara otomatis memilih ImageCache.
Setelah anotasi ini ditentukan, Elastic Container Instance memilih ImageCache berdasarkan aturan berikut:
Elastic Container Instance memfilter semua ImageCaches di wilayah tersebut. Ukuran setiap ImageCache tidak boleh melebihi ukuran ruang penyimpanan sementara dari sebuah contoh wadah elastis.
Elastic Container Instance memilih ImageCache optimal berdasarkan atribut berikut dalam urutan prioritas menurun: derajat kecocokan, ukuran cache, dan waktu pembuatan.
Derajat kecocokan: derajat kecocokan antara ImageCache dan registri gambar serta versi gambar yang ditentukan. ImageCache dengan derajat kecocokan tertinggi digunakan untuk membuat pod.
Ukuran cache: ukuran ImageCache. ImageCache yang paling mendekati ukuran gambar yang ditentukan digunakan untuk membuat pod.
Waktu pembuatan: waktu ketika ImageCache dibuat. ImageCache yang paling baru dibuat digunakan untuk membuat pod.
CatatanJika tidak ada ImageCache yang cocok, gambar yang ditentukan akan secara otomatis dicache saat pod dibuat. Dalam hal ini, sistem menarik gambar dari registri yang ditentukan. Kami merekomendasikan Anda mengatur kebijakan penarikan gambar menjadi IfNotPresent. Ini mencegah unduhan berulang dari lapisan gambar yang sama dan meningkatkan efisiensi caching.
Contoh:
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
name: helloworld-go
spec:
template:
metadata:
labels:
app: helloworld-go
annotations:
k8s.aliyun.com/eci-image-cache: "true" # Pilih ImageCache secara otomatis.
spec:
containers:
- image: registry.cn-hangzhou.aliyuncs.com/knative-sample/helloworld-go:73fbdd56