全部产品
Search
文档中心

Container Service for Kubernetes:Gunakan image-syncer untuk memigrasi gambar kontainer

更新时间:Jul 02, 2025

Migrasi dan sinkronisasi gambar diperlukan dalam klaster Kubernetes. Anda dapat menggunakan image-syncer untuk memigrasikan dan menyinkronkan beberapa gambar dari repositori gambar yang dikelola sendiri ke Alibaba Cloud Container Registry (ACR) secara bersamaan. Topik ini menjelaskan cara menggunakan image-syncer untuk memigrasikan gambar kontainer.

Informasi latar belakang

Jika jumlah gambar sedikit, Anda dapat menjalankan perintah docker pull dan docker push untuk memigrasikan gambar dari beban kerja Kubernetes ke Container Service for Kubernetes (ACK). Namun, jika Anda menjalankan perintah tersebut untuk memigrasikan lebih dari seratus gambar atau repositori gambar yang menyimpan data dalam skala TB, proses migrasi akan memakan waktu lama dan berisiko menyebabkan kehilangan data. Dibandingkan dengan klaster Kubernetes yang dibuat dan dipelihara oleh penyedia cloud lainnya, ACK unggul dalam hal biaya layanan, biaya pemeliharaan, kemudahan penggunaan, dan stabilitas jangka panjang. Semakin banyak penyedia cloud ingin memigrasikan beban kerja Kubernetes mereka ke ACK. Untuk mengatasi masalah migrasi gambar dalam skala besar, alat open source image-syncer yang dikembangkan oleh Alibaba Cloud menyediakan kemampuan replikasi sinkronisasi gambar, membantu penyedia layanan cloud memigrasikan gambar. Kapasitas maksimum repositori gambar mencapai lebih dari 3 TB. Server yang menjalankan image-syncer dapat memanfaatkan sepenuhnya bandwidth server tanpa memerlukan kapasitas disk tambahan.

Ikhtisar image-syncer

Migrasi dan sinkronisasi gambar antar repositori gambar diperlukan untuk memigrasikan aplikasi dari klaster Kubernetes yang dikelola sendiri ke klaster ACK. Metode sinkronisasi gambar tradisional menggunakan skrip yang berisi perintah docker pull atau docker push dan memiliki batasan berikut:

  • Metode ini bergantung pada penyimpanan disk, memerlukan waktu lama untuk diselesaikan, dan membuat migrasi gambar dalam skala besar menjadi sulit.

  • Docker daemon diperlukan, yang membatasi jumlah gambar yang dapat ditarik atau didorong secara bersamaan.

  • Operasi API HTTP diperlukan untuk mengimplementasikan beberapa fitur, sehingga Anda harus menulis skrip sinkronisasi yang kompleks.

image-syncer adalah alat yang mudah digunakan untuk memigrasikan atau menyinkronkan sejumlah besar gambar secara bersamaan. Anda dapat menggunakan image-syncer untuk menyinkronkan gambar Docker dari atau ke hampir semua layanan repositori gambar berbasis Docker Registry V2, seperti ACR, Docker Hub, Quay.io, dan Harbor. Alat ini digunakan untuk memigrasikan gambar dalam skala TB di lingkungan produksi. Untuk informasi lebih lanjut, lihat image-syncer.

Fitur

image-syncer memiliki fitur berikut:

  • Menyinkronkan gambar dari beberapa repositori gambar sumber ke beberapa repositori gambar tujuan, termasuk Docker Hub, Quay.io, Alibaba Cloud Container Registry, dan Harbor.

  • Mendukung layanan repositori gambar Docker berbasis Docker Registry V2.

  • Menyinkronkan gambar hanya dengan menggunakan sumber daya memori dan jaringan. Gambar tidak disimpan di disk server tempat repositori gambar tujuan berada, meningkatkan efisiensi sinkronisasi.

  • Mendukung sinkronisasi tambahan. Gambar yang telah disinkronkan tidak disinkronkan ulang.

  • Mendukung sinkronisasi bersamaan. Anda dapat memodifikasi jumlah gambar yang dapat ditarik atau didorong secara bersamaan dalam file konfigurasi.

  • Secara otomatis mencoba kembali tugas sinkronisasi yang gagal untuk menyelesaikan sebagian besar masalah sinkronisasi gambar yang disebabkan oleh gangguan jaringan.

  • Program seperti Docker daemon tidak diperlukan. Pastikan lingkungan runtime terhubung ke jaringan registry yang perlu disinkronkan.

Anda dapat menggunakan alat image-syncer untuk memigrasikan, menyalin, dan melakukan sinkronisasi tambahan gambar dari repositori gambar. image-syncer memiliki persyaratan sumber daya perangkat keras yang rendah. Setelah sinkronisasi selesai, image-syncer menghitung jumlah gambar yang gagal disinkronkan dan menyediakan log rinci untuk membantu Anda mengidentifikasi masalah.

Persiapan

Untuk menggunakan image-syncer, siapkan file konfigurasi. Blok kode berikut menunjukkan contoh file konfigurasi:

{
    "auth": {                   // Bidang ini menentukan informasi autentikasi. Setiap objek terdiri dari nama pengguna dan kata sandi yang diperlukan untuk mengakses registry. Dalam kebanyakan kasus, image-syncer harus memiliki izin untuk menarik gambar dari dan mengakses tag di repositori sumber.
                                
                                // image-syncer harus memiliki izin untuk mendorong gambar ke dan membuat repositori di registry tujuan. Jika tidak ada informasi autentikasi yang diberikan untuk registry, image-syncer mengakses registry dalam mode anonim.

        "quay.io": {            // URL registry, yang harus sama dengan URL registry dalam URL gambar.
            "username": "xxx",               // Opsional. Nama pengguna.
            "password": "xxxxxxxxx",         // Opsional. Kata sandi.
            "insecure": true                 // Opsional. Menentukan apakah repositori diakses menggunakan HTTP. Nilai default: false. Hanya image-syncer versi 1.0.1 dan yang lebih baru yang mendukung parameter ini.
        },
        "registry.cn-beijing.aliyuncs.com": {
            "username": "xxx",
            "password": "xxxxxxxxx"
        },
        "registry.hub.docker.com": {
            "username": "xxx",
            "password": "xxxxxxxxxx"
        }
    },
    "images": {
        // Bidang yang menggambarkan aturan sinkronisasi gambar. Setiap aturan adalah pasangan nilai-kunci. Kunci menentukan URL repositori sumber dan nilai menentukan URL repositori tujuan.
        // Anda tidak dapat menyinkronkan seluruh namespace atau registry berdasarkan satu aturan. Anda hanya dapat menyinkronkan satu repositori berdasarkan satu aturan.
        // URL repositori sumber dan tujuan dalam format registry/namespace/repository:tag, yang mirip dengan format URL gambar yang digunakan dalam perintah docker pull atau docker push.
        // URL repositori sumber harus berisi registry/namespace/repository. Jika URL repositori tujuan bukan string kosong, itu juga harus berisi registry/namespace/repository.
        // URL repositori sumber tidak boleh berupa string kosong. Untuk menyinkronkan gambar dari repositori sumber ke beberapa repositori tujuan, Anda harus mengonfigurasi beberapa aturan.
        // Nama dan tag repositori tujuan dapat berbeda dari repositori sumber. Dalam hal ini, aturan sinkronisasi gambar bekerja dengan cara yang sama seperti kombinasi perintah docker pull, docker tag, dan docker push.
        "quay.io/coreos/kube-rbac-proxy": "quay.io/ruohe/kube-rbac-proxy",
        "xxxx":"xxxxx",
        "xxx/xxx/xx:tag1,tag2,tag3":"xxx/xxx/xx"
        // Jika URL repositori sumber tidak berisi tag, semua gambar di repositori sumber disinkronkan ke repositori tujuan dengan tag aslinya. Dalam hal ini, URL repositori tujuan tidak boleh berisi tag.
        // Jika URL repositori sumber hanya berisi satu tag, hanya gambar dengan tag tersebut di repositori sumber yang disinkronkan ke repositori tujuan. Jika URL repositori tujuan tidak berisi tag, gambar yang disinkronkan tetap menggunakan tag aslinya.
        // Jika URL repositori sumber berisi beberapa tag yang dipisahkan dengan koma (,), seperti "a/b/c:1,2,3", URL repositori tujuan tidak boleh berisi tag. Gambar yang disinkronkan tetap menggunakan tag aslinya.
        // Jika URL repositori tujuan adalah string kosong, gambar disinkronkan ke repositori dengan nama dan tag yang sama di namespace default dari registry default. Registry dan namespace default dapat diatur melalui parameter perintah atau variabel lingkungan.
    }     
}

Contoh

Sinkronkan gambar dari proyek Harbor yang dikelola sendiri ke Container Registry Enterprise Edition