日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

通過image-syncer工具遷移容器鏡像

在Kubernetes集群遷移場景中,鏡像倉庫之間進行鏡像遷移和同步是基本需求,image-syncer工具可以解決通用的容器鏡像批量遷移和鏡像同步復(fù)制的問題,將已有的容器鏡像平滑地遷移到阿里云鏡像服務(wù)ACR上。本文主要為您介紹如何通過image-syncer工具遷移容器鏡像。

背景信息

阿里云上的容器服務(wù)ACK在使用成本、運維成本、方便性、長期穩(wěn)定性上大大超過云廠商自建自維護Kubernetes集群,有不少云廠商紛紛想把之前自己維護Kubernetes負載遷移到阿里云ACK服務(wù)上。在遷移過程中,當(dāng)鏡像個數(shù)較少時,可以通過docker pulldocker push命令完成鏡像遷移,如果涉及到成千上百個鏡像,甚至幾TB的鏡像倉庫數(shù)據(jù)時,遷移過程就變得非常漫長,并且可能丟失數(shù)據(jù)。此時,用戶在各種容器鏡像倉庫之間遷移時,期望有鏡像同步復(fù)制的能力。阿里云開源image-syncer工具具備此能力并已經(jīng)幫助多家云廠商成功遷移鏡像,其中最大鏡像倉庫的總量達到3TB以上。同步任務(wù)時能跑滿機器帶寬,并且對進行同步任務(wù)的機器磁盤容量沒有要求。

image-syncer簡介

在Kubernetes集群遷移場景中,鏡像倉庫之間進行鏡像遷移和鏡像同步復(fù)制是基本需求,而使用docker pulldocker push結(jié)合腳本的傳統(tǒng)方式進行鏡像同步,存在以下幾個局限性:

  • 依賴磁盤存儲,需要及時進行本地鏡像的清理,并且落盤造成多余的時間開銷,難以勝任生產(chǎn)場景中大量鏡像的遷移任務(wù)。

  • 依賴Docker程序,Docker Daemon對Pull和Push的并發(fā)數(shù)進行了嚴(yán)格的限制,無法進行高并發(fā)同步。

  • 一些功能只能通過HTTP API進行操作,僅使用Docker CLI無法實現(xiàn),使腳本變得復(fù)雜。

image-syncer的定位是一個簡單、易用的批量鏡像遷移和鏡像同步復(fù)制工具,支持幾乎所有目前主流的基于Docker Registry V2搭建的鏡像存儲服務(wù),例如ACR、Docker、Hub、Quay、自建Harbor等,目前已經(jīng)初步經(jīng)過了TB級別的生產(chǎn)環(huán)境鏡像遷移驗證,詳情請參見image-syncer

工具特點

image-syncer提供了以下幾項支持:

  • 支持多對多鏡像倉庫同步。

  • 支持基于Docker Registry V2搭建的Docker鏡像倉庫服務(wù)

    例如,Docker Hub、Quay、 阿里云鏡像服務(wù)ACR、Harbor等。

  • 鏡像同步復(fù)制只經(jīng)過內(nèi)存和網(wǎng)絡(luò),不依賴磁盤存儲,同步速度快。

  • 支持增量同步。

    通過對同步過的鏡像blob信息落盤,不會對已同步的鏡像進行重復(fù)同步。

  • 支持并發(fā)同步。

    可以通過配置文件調(diào)整并發(fā)數(shù)。

  • 支持自動重試失敗的同步任務(wù),解決大部分鏡像同步中的網(wǎng)絡(luò)抖動問題。

  • 不依賴Docker以及其他程序。

通過使用image-syncer,只需要保證image-syncer的運行環(huán)境與需要同步的registry網(wǎng)絡(luò)連通,您可以快速地完成從鏡像倉庫的遷移、復(fù)制以及增量同步,并且image-syncer對硬件資源幾乎沒有要求(因為image-syncer嚴(yán)格控制網(wǎng)絡(luò)連接數(shù)目=并發(fā)數(shù),所以只有在單個鏡像層過大的情況下,并發(fā)數(shù)目過大可能會打滿內(nèi)存,內(nèi)存占用 <= 并發(fā)數(shù)x最大鏡像層大小)。除了使用重傳機制規(guī)避同步過程中可能出現(xiàn)的偶發(fā)問題之外,image-syncer會在運行結(jié)束時統(tǒng)計最后同步失敗的鏡像個數(shù),并且打印出詳細的日志,幫助使用者定位同步過程中出現(xiàn)的問題。

準(zhǔn)備工作

使用image-syncer時,您只需要提供一個配置文件,內(nèi)容示例如下:

{
    "auth": {                   // 認證字段,其中每個對象為一個registry的一個賬號和。
                                // 密碼;通常,同步源需要具有pull以及訪問tags權(quán)限。
                                // 同步目標(biāo)需要擁有push以及創(chuàng)建倉庫權(quán)限,如果沒有提供,則默認匿名訪問。

        "quay.io": {            // registry的url,需要和下面images中對應(yīng)registry的url相同。
            "username": "xxx",               // 用戶名,可選。
            "password": "xxxxxxxxx",         // 密碼,可選。
            "insecure": true                 // registry是否是http服務(wù),如果是,insecure字段需要為true,默認是false,可選,支持這個選項需要image-syncer版本 > v1.0.1。
        },
        "registry.cn-beijing.aliyuncs.com": {
            "username": "xxx",
            "password": "xxxxxxxxx"
        },
        "registry.hub.docker.com": {
            "username": "xxx",
            "password": "xxxxxxxxxx"
        }
    },
    "images": {
        // 同步鏡像規(guī)則字段,其中一條規(guī)則包括一個源倉庫(鍵)和一個目標(biāo)倉庫(值)。
        // 同步的最大單位是倉庫(repo),不支持通過一條規(guī)則同步整個namespace以及registry。
        // 源倉庫和目標(biāo)倉庫的格式與docker pull/push命令使用的鏡像url類似(registry/namespace/repository:tag)。
        // 源倉庫和目標(biāo)倉庫(如果目標(biāo)倉庫不為空字符串)都至少包含registry/namespace/repository。
        // 源倉庫字段不能為空,如果需要將一個源倉庫同步到多個目標(biāo)倉庫需要配置多條規(guī)則。
        // 目標(biāo)倉庫名可以和源倉庫名不同(tag也可以不同),此時同步功能類似于:docker pull + docker tag + 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"
        // 當(dāng)源倉庫字段中不包含tag時,表示將該倉庫所有tag同步到目標(biāo)倉庫,此時目標(biāo)倉庫不能包含tag。
        // 當(dāng)源倉庫字段中包含tag時,表示只同步源倉庫中的一個tag到目標(biāo)倉庫,如果目標(biāo)倉庫中不包含tag,則默認使用源tag。
        // 源倉庫字段中的tag可以同時包含多個(比如"a/b/c:1,2,3"),tag之間通過","隔開,此時目標(biāo)倉庫不能包含tag,并且默認使用原來的tag。
        // 當(dāng)目標(biāo)倉庫為空字符串時,會將源鏡像同步到默認registry的默認namespace下,并且repo以及tag與源倉庫相同,默認registry和默認namespace可以通過命令行參數(shù)以及環(huán)境變量配置。
    }     
}

使用示例

從自建Harbor同步鏡像到ACR企業(yè)版