OpenI 啟智社區(qū)

啟智社區(qū),確實(shí)給力

當(dāng)前位置:首頁 > 資訊 > 行業(yè)資訊 >

阿里云開源 image-syncer 工具,容器鏡像大批量遷移同步利器

怎么把已有的容器鏡像平滑的遷移到阿里云鏡像服務(wù) ACR 上?最近阿里云給出了很好的方案,他們開源了 image-syncer 工具,能夠使得成百上千個(gè)鏡像實(shí)現(xiàn)平滑的批量遷移,其中最大鏡像倉庫的總量可以達(dá)到 3T 以上。而這一工具,也被稱為容器鏡像遷移/同步利器,雷鋒網(wǎng) AI 開發(fā)者將其重點(diǎn)內(nèi)容及開源地址整理編輯如下。

阿里云開源 image-syncer 工具,容器鏡像大批量遷移同步利器

什么是 image-syncer?

顧名思義,image-syncer 本質(zhì)上就是圖像同步器。它是一個(gè) docker 鏡像同步工具,能夠?qū)⒍鄬?duì)多的鏡像倉庫同步,并支持目前絕大多數(shù)主流的 docker 鏡像倉庫服務(wù),例如:ACR、DockerHub、Quay、自建 Harbor 等。
通常情況下,在 k8s 集群遷移場(chǎng)景中,鏡像倉庫之間進(jìn)行鏡像遷移/同步是基本需求,而使用 docker pull/push 結(jié)合腳本的傳統(tǒng)方式進(jìn)行鏡像同步,有如下幾個(gè)局限性
  • 依賴磁盤存儲(chǔ),需要及時(shí)進(jìn)行本地鏡像的清理,并且落盤造成多余的時(shí)間開銷,難以勝任生產(chǎn)場(chǎng)景中大量鏡像的遷移
  • 依賴 docker 程序,docker daemon 對(duì) pull/push 的并發(fā)數(shù)進(jìn)行了嚴(yán)格的限制,無法進(jìn)行高并發(fā)同步
  • 一些功能只能通過 HTTP api 進(jìn)行操作,單純使用 docker cli 無法做到,使腳本變得復(fù)雜
阿里云開源 image-syncer 工具,容器鏡像大批量遷移同步利器

圖 1 阿里云遷移框架
 
而 image-syncer 開發(fā)之初的定位就是一個(gè)簡(jiǎn)單、易用的批量鏡像遷移/同步工具;因此,它的特性如下:
  • 支持多對(duì)多鏡像倉庫同步
  • 支持基于 Docker Registry V2 搭建的 docker 鏡像倉庫服務(wù) (如 Docker Hub、 Quay、 阿里云鏡像服務(wù) ACR、 Harbor 等)
  • 同步只經(jīng)過內(nèi)存和網(wǎng)絡(luò),不依賴磁盤存儲(chǔ),同步速度快
  • 增量同步, 通過對(duì)同步過的鏡像 blob 信息落盤,不重復(fù)同步已同步的鏡像
  • 并發(fā)同步,可以通過配置文件調(diào)整并發(fā)數(shù)
  • 自動(dòng)重試失敗的同步任務(wù),可以解決大部分鏡像同步中的網(wǎng)絡(luò)抖動(dòng)問題
  • 不依賴 docker 以及其他程序
只需要保證 image-syncer 的運(yùn)行環(huán)境與需要同步的 registry 網(wǎng)絡(luò)連通,使用者就可以快速地完成從鏡像倉庫的遷移、拷貝以及增量同步,并且該工具對(duì)硬件資源幾乎沒有要求(因?yàn)?image-syncer 嚴(yán)格控制網(wǎng)絡(luò)連接數(shù)目=并發(fā)數(shù),所以只有在當(dāng)單個(gè)鏡像層過大的情況下,并發(fā)數(shù)目過大可能會(huì)打滿內(nèi)存,內(nèi)存占用 <= 并發(fā)數(shù) x 最大鏡像層大小)。

阿里云開源 image-syncer 工具,容器鏡像大批量遷移同步利器

如何使用 image-syncer?

運(yùn)行 image-syncer,只需要提供一個(gè)配置文件,內(nèi)容如下:
{
 "auth": { // 認(rèn)證字段,其中每個(gè)對(duì)象為一個(gè) registry 的一個(gè)賬號(hào)和
 // 密碼;通常,同步源需要具有 pull 以及訪問 tags 權(quán)限,
 // 同步目標(biāo)需要擁有 push 以及創(chuàng)建倉庫權(quán)限,如果沒有提供,則默認(rèn)匿名訪問
 
 "quay.io": { // registry 的 url,需要和下面 images 中對(duì)應(yīng) registry 的 url 相同
 "username": "xxx", // 用戶名,可選
 "password": "xxxxxxxxx", // 密碼,可選
 "insecure": true // registry 是否是 http 服務(wù),如果是,insecure 字段需要為 true,默認(rèn)是 false,可選,支持這個(gè)選項(xiàng)需要 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ī)則包括一個(gè)源倉庫(鍵)和一個(gè)目標(biāo)倉庫(值)
 // 同步的最大單位是倉庫(repo),不支持通過一條規(guī)則同步整個(gè) namespace 以及 registry
 // 源倉庫和目標(biāo)倉庫的格式與 docker pull/push 命令使用的鏡像 url 類似(registry/namespace/repository:tag)
 // 源倉庫和目標(biāo)倉庫(如果目標(biāo)倉庫不為空字符串)都至少包含 registry/namespace/repository
 // 源倉庫字段不能為空,如果需要將一個(gè)源倉庫同步到多個(gè)目標(biāo)倉庫需要配置多條規(guī)則
 // 目標(biāo)倉庫名可以和源倉庫名不同(tag 也可以不同),此時(shí)同步功能類似于: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 時(shí),表示將該倉庫所有 tag 同步到目標(biāo)倉庫,此時(shí)目標(biāo)倉庫不能包含 tag
 // 當(dāng)源倉庫字段中包含 tag 時(shí),表示只同步源倉庫中的一個(gè) tag 到目標(biāo)倉庫,如果目標(biāo)倉庫中不包含 tag,則默認(rèn)使用源 tag
 // 源倉庫字段中的 tag 可以同時(shí)包含多個(gè)(比如"a/b/c:1,2,3"),tag 之間通過","隔開,此時(shí)目標(biāo)倉庫不能包含 tag,并且默認(rèn)使用原來的 tag
 // 當(dāng)目標(biāo)倉庫為空字符串時(shí),會(huì)將源鏡像同步到默認(rèn) registry 的默認(rèn) namespace 下,并且 repo 以及 tag 與源倉庫相同,默認(rèn) registry 和默認(rèn) namespace 可以通過命令行參數(shù)以及環(huán)境變量配置,參考下面的描述
 } 
}

用戶可以根據(jù)配置不同的鏡像同步規(guī)則組合,以匹配不同的遷移/同步需求,如將單個(gè)鏡像 repo 同步到多個(gè)不同的鏡像 repo、將多個(gè)源鏡像同步到單個(gè)鏡像 repo 中(以 tag 區(qū)分)、在同一個(gè) registry 中以不同的名字拷貝一個(gè)鏡像 repo 等等。

需要注意的是,如果匿名訪問作為同步源的 registry 地址,可能存在權(quán)限問題無法 pull 鏡像以及無法獲取 tags,這種情況下需要在" auth "中加入有對(duì)應(yīng)權(quán)限的賬號(hào)密碼;而如果匿名訪問作為同步目標(biāo)的 registry 地址,可能存在權(quán)限問題無法 push 鏡像,同樣也可能需要用戶提供有對(duì)應(yīng)權(quán)限的賬號(hào)密碼。

通常從自建 harbor 同步鏡像到 ACR 需要 5 個(gè)步驟,包括:
  • 創(chuàng)建 ACR 實(shí)例
  • 創(chuàng)建命名空間
  • 創(chuàng)建訪問憑證
  • 進(jìn)行權(quán)限管理,完成配置
阿里云開源 image-syncer 工具,容器鏡像大批量遷移同步利器

圖 2 最小權(quán)限設(shè)置示例
  • 下載 image-syncer 可執(zhí)行文件(目前只支持 linux amd64 版本,可以自行編譯)并解壓,然后運(yùn)行工具
最新版源碼以及二進(jìn)制文件:
https://github.com/AliyunContainerService/image-syncer/releases/tag/v1.0.3

常見問題

一次同步會(huì)經(jīng)歷三個(gè)階段:生成同步任務(wù)、執(zhí)行同步任務(wù)以及重試失敗任務(wù);其中,每個(gè)同步任務(wù)都代表了一個(gè)需要同步的 tag(鏡像),如果配置文件中某條規(guī)則沒有指定 tag,在「生成同步任務(wù)」階段會(huì)自動(dòng) list 源倉庫所有 tag,并生成對(duì)應(yīng)的同步任務(wù),如果生成同步任務(wù)失敗,也會(huì)在重試階段進(jìn)行重試。(故意配錯(cuò)賬號(hào)密碼時(shí))執(zhí)行輸出如下:

阿里云開源 image-syncer 工具,容器鏡像大批量遷移同步利器

圖 3 配錯(cuò)賬號(hào)密碼時(shí)執(zhí)行輸出
 
正常運(yùn)行的輸出:

阿里云開源 image-syncer 工具,容器鏡像大批量遷移同步利器

圖 4 正常操作時(shí)執(zhí)行輸出
 
在運(yùn)行時(shí),image-syncer 會(huì)打印出如下的日志信息:

阿里云開源 image-syncer 工具,容器鏡像大批量遷移同步利器

圖 5 輸出結(jié)果日志
 
而在同步結(jié)束之后,image-syncer 也會(huì)統(tǒng)計(jì)成功和失敗的同步任務(wù)數(shù)目(每個(gè)同步任務(wù)代表一個(gè)鏡像),并在標(biāo)準(zhǔn)輸出和日志中打印 "Finished, FAILED TASKS> sync tasks failed, TASKS> tasks generate failed" 的字樣,從而可以獲得同步的結(jié)果。

阿里云開源 image-syncer 工具,容器鏡像大批量遷移同步利器

圖 6 部分其它參數(shù)示例
原文鏈接:

https://yq.aliyun.com/articles/727565?utm_content=g_1000088598 
Github 開源地址:
https://github.com/AliyunContainerService/image-syncer 
更多 FAQ 參見:
https://github.com/AliyunContainerService/image-syncer/blob/master/FAQs.md    
來源 | 雷鋒網(wǎng) AI 開發(fā)者
主站蜘蛛池模板: 亚洲色图15p| 亚洲人成无码网站久久99热国产| 一级国产a级a毛片无卡| 精精国产XXXX视频在线播放| 无码成人精品区在线观看| 国产剧情av麻豆香蕉精品| 久久精品aⅴ无码中文字字幕| 91精品国产人成网站| 日韩国产成人精品视频| 国产成人精品永久免费视频| 久久精品视频一区| 黄色片网站在线免费观看| 日韩a无吗一区二区三区| 国产又黄又大又粗的视频| 久久久国产乱子伦精品| 被黑化男配做到哭h| 成人做受120视频试看| 兽皇videos极品另类| chinese国产xxxx中国| 正在播放91大神调教偷偷| 国产精品自产拍在线观看花钱看| 亚洲国产品综合人成综合网站| www.九色视频| 日韩日韩日韩日韩日韩| 国产中文制服丝袜另类| 两个人看的视频www在线高清| 窝窝女人体国产午夜视频| 国内精品久久人妻互换| 亚洲伊人精品综合在合线| 黑人粗长大战亚洲女2021国产精品成人免费视频 | 老司机亚洲精品影院在线| 性做久久久久免费看| 人人爽天天碰天天躁夜夜躁| 68日本xxxⅹxxxxx18| 最近中文字幕免费mv视频| 国产乱了真实在线观看| 一区二区视频网| 欧美激情综合色综合啪啪五月| 国产日韩欧美不卡在线二区| 久久99精品国产麻豆宅宅| 看一级毛片国产一级毛片|