Saat melakukan migrasi beban kerja Kubernetes ke ACK, pemindahan sejumlah besar gambar kontainer sering kali menjadi hambatan utama. Skrip berbasis docker pull dan docker push memerlukan ruang disk yang sebanding dengan ukuran gambar, bergantung pada Docker daemon, serta sulit dikelola ketika diperlukan penyaringan tag atau sinkronisasi ke beberapa tujuan sekaligus. image-syncer mengatasi kendala tersebut dengan menyalin gambar secara langsung antar registri hanya menggunakan memori dan bandwidth jaringan—tanpa Docker daemon maupun penyimpanan disk di host. Server yang menjalankan image-syncer memanfaatkan bandwidth secara penuh tanpa memerlukan kapasitas disk tertentu. Kapasitas maksimum Repository image yang didukung melebihi 3 TB.
Cara kerja
image-syncer membaca file konfigurasi JSON yang mendefinisikan kredensial otentikasi dan aturan sinkronisasi, lalu mentransfer gambar secara langsung antar registri. Satu file konfigurasi dapat mendefinisikan aturan untuk menyinkronkan gambar dari beberapa Repository image sumber ke beberapa Repository image tujuan secara bersamaan. Setiap eksekusi memeriksa gambar yang sudah ada di tujuan dan melewatkannya, sehingga menjalankan ulang tool ini aman dilakukan. Tool ini menangani transfer secara konkuren dengan tingkat paralelisme yang dapat dikonfigurasi dan secara otomatis mencoba ulang tugas yang gagal guna mengatasi fluktuasi jaringan.
image-syncer mendukung layanan apa pun yang kompatibel dengan Docker Registry V2, termasuk Alibaba Cloud Container Registry (ACR), Docker Hub, Quay.io, dan Harbor. Tool ini telah digunakan untuk migrasi gambar skala TB di lingkungan produksi.
Batasan
Sebelum mengonfigurasi aturan sinkronisasi, perhatikan batasan berikut:
-
Satu aturan sinkronisasi memetakan satu Repository sumber ke satu Repository tujuan. Satu aturan tidak dapat menyinkronkan seluruh namespace atau registri.
-
URL Repository sumber tidak boleh kosong.
-
Jika URL sumber menentukan beberapa tag (dipisahkan koma), URL tujuan tidak boleh mencantumkan tag.
Prasyarat
Sebelum memulai, pastikan Anda telah memiliki:
-
Konektivitas jaringan dari mesin host ke semua registri sumber dan tujuan.
-
Izin pull dan daftar tag pada semua Repository sumber.
-
Izin push dan pembuatan Repository pada semua registri tujuan.
Konfigurasi image-syncer
image-syncer menggunakan file konfigurasi JSON dengan dua bidang tingkat atas: auth dan images.
Otentikasi (auth)
Bidang auth memetakan setiap URL registri ke kredensialnya. Jika suatu registri tidak memerlukan otentikasi, tidak perlu dicantumkan dalam auth—image-syncer akan mengaksesnya secara anonim.
URL registri dalam auth harus persis sesuai dengan hostname registri yang digunakan dalam URL gambar.
| Field | Required | Type | Default | Description |
|---|---|---|---|---|
username |
No | String | — | Username untuk registri |
password |
No | String | — | Password untuk registri |
insecure |
No | Boolean | false |
Atur ke true untuk terhubung melalui HTTP alih-alih HTTPS. Didukung mulai versi V1.0.1 dan seterusnya. |
Aturan sinkronisasi (images)
Bidang images mendefinisikan aturan sinkronisasi sebagai pasangan kunci-nilai. Kuncinya adalah URL gambar sumber; nilainya adalah URL gambar tujuan. Keduanya mengikuti format registry/namespace/repository:tag.
Perilaku tag bergantung pada cara Anda menentukan URL sumber:
| Source URL | Destination URL | Behavior |
|---|---|---|
| Tanpa tag | Tanpa tag | Semua tag dalam Repository sumber disinkronkan, mempertahankan nama tag aslinya |
Satu tag, misalnya :v1 |
Tanpa tag | Hanya gambar dengan tag tersebut yang disinkronkan, mempertahankan nama tag aslinya |
Satu tag, misalnya :v1 |
Dengan tag, misalnya :stable |
Hanya gambar tersebut yang disinkronkan, diubah namanya sesuai tag tujuan |
Beberapa tag, misalnya :v1,v2,v3 |
Tanpa tag (wajib) | Hanya tag-tag tersebut yang disinkronkan, mempertahankan nama tag aslinya |
| Tanpa tag | String kosong "" |
Semua tag disinkronkan ke Repository dengan nama yang sama di namespace default registri default |
Contoh file konfigurasi
{
"auth": {
"quay.io": {
"username": "xxx",
"password": "xxxxxxxxx",
"insecure": true
},
"registry.cn-beijing.aliyuncs.com": {
"username": "xxx",
"password": "xxxxxxxxx"
},
"registry.hub.docker.com": {
"username": "xxx",
"password": "xxxxxxxxxx"
}
},
"images": {
"quay.io/coreos/kube-rbac-proxy": "quay.io/ruohe/kube-rbac-proxy",
"xxxx": "xxxxx",
"xxx/xxx/xx:tag1,tag2,tag3": "xxx/xxx/xx"
}
}
Ganti nilai placeholder dengan URL registri, kredensial, dan path gambar yang sebenarnya.
Jalankan image-syncer
Setelah menyiapkan file konfigurasi, jalankan image-syncer terhadap file tersebut. Tool ini mencatat jumlah gambar yang gagal disinkronkan dan memberikan output error terperinci untuk membantu mendiagnosis masalah.
Untuk contoh lengkap yang berfungsi, lihat Sinkronkan gambar dari Proyek Harbor yang dikelola sendiri ke Container Registry Edisi Perusahaan.