溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

image-transfer怎么用

發(fā)布時間:2022-01-11 17:45:57 來源:億速云 閱讀:169 作者:iii 欄目:云計算

這篇文章主要介紹了image-transfer怎么用的相關(guān)知識,內(nèi)容詳細易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇image-transfer怎么用文章都會有所收獲,下面我們一起來看看吧。

業(yè)務(wù)上云,鏡像怎么遷移?

業(yè)務(wù)上云主要有幾種場景,一是自建 idc 上云,二是第三方云遷移,三是異地災(zāi)備,即混合云。這些場景中,無論是上云還是云遷移,遷移流程主要有如下幾步。

  1. 網(wǎng)絡(luò)規(guī)劃。vpc 配置,子網(wǎng)劃分等。

  2. 數(shù)據(jù)遷移。對象存儲,文件存儲等。

  3. 應(yīng)用遷移。業(yè)務(wù),配置等。

在數(shù)據(jù)遷移過程中,如果業(yè)務(wù)大量使用容器化部署,則需要批量鏡像遷移。而目前大部分云廠商的鏡像倉庫服務(wù)沒有提供鏡像倉庫批量遷移的能力。業(yè)務(wù)想要遷移,只能先在本地下載原鏡像,修改 tag 后,再上傳至目的鏡像倉庫。這個過程存在以下幾個缺點:

  • 耗時耗力。僅僅對于單個鏡像遷移,就需要三步操作,并且需要時刻盯著,若出現(xiàn)失敗情況,需進一步處理。

  • 完全人肉操作,易出現(xiàn)差錯。在對原鏡像修改 tag 時,由于是人為修改,極易操作失誤,tag 修改錯了等。

  • 鏡像量大時,成本增加,上云進度緩慢。如果有幾百上千個鏡像,這樣人肉操作,遷移進度會十分緩慢,且遷移成本會大大增加。

image-transfer 的原理

設(shè)計目標(biāo)

針對鏡像遷移的痛點。我們希望開發(fā)一種鏡像批量遷移工具。它對使用者而言,只需要簡單的配置,就可以實現(xiàn)鏡像批量遷移,無需人工干預(yù),提高業(yè)務(wù)上云/遷移的進度,降低成本。具體而言,該工具有以下設(shè)計目標(biāo)。

  1. 配置簡單,無需復(fù)雜輸入。我們希望對使用者而言這個工具是簡單易用的,僅需配置源、目的鏡像地址和鑒權(quán),即可完成批量遷移。

  2. 快速高效遷移海量鏡像,降低遷移成本。針對大量的鏡像遷移需求,我們希望工具可以高效完成,借助高并發(fā)的一些技術(shù),實現(xiàn)快速遷移。

  3. 一定的容錯能力,減少人工干預(yù)維護。在遷移過程中,我們希望工具可以進行一些錯誤的識別和自動修復(fù),盡量減少人工維護,提高運維效率。

  4. 對運行環(huán)境沒有依賴,提高工具普適性。我們希望工具是可以在任何 linux,mac os,windows 操作系統(tǒng)中運行,而不用依賴 docker 及其他程序。

  5. 支持騰訊云 CCR 一鍵全量遷移模式。目前,騰訊云容器鏡像服務(wù) TCR 企業(yè)版正式上線,騰訊云 TCR 個人版(CCR)將在未來逐步減少維護,直到下線。因此工具需要支持 CCR 倉庫一鍵全量遷移至 TCR 企業(yè)版。

  6. 支持自定義 qps 限速。批量遷移鏡像,頻繁的調(diào)用鏡像倉庫接口有可能導(dǎo)致鏡像倉庫崩潰,因此需要對 qps 進行限制。

架構(gòu)

image-transfer 由多個模塊構(gòu)成,下圖給出了 image-transfer 架構(gòu)圖。

image-transfer怎么用

  • 通用模式輸入(默認):用于接受用戶下發(fā)的鏡像遷移任務(wù)。包括鏡像遷移配置文件和鑒權(quán)配置文件。該模式用于實現(xiàn)云廠商之間的鏡像遷移。

  • CCR 一鍵遷移模式輸入:需要在工具輸入?yún)?shù)添加 --ccrToTcr=true,該模式用于 CCR 倉庫一鍵全量遷移至 TCR 企業(yè)版。除了添加 --ccrToTcr=true 參數(shù),還需鑒權(quán)配置文件和騰訊云 secret 配置文件。

  • pipeline:該模塊是工具處理鏡像遷移的核心。負責(zé)處理用戶下發(fā)的鏡像遷移任務(wù),包括根據(jù)遷移配置文件處理鏡像倉庫的同步規(guī)則,以及進行鏡像的分層拉取和傳輸任務(wù)。模塊采用了高并發(fā)的 pipeline 模型,提高遷移速度。

  • 重試 task:這個階段會重試 pipeline 中傳輸失敗的任務(wù)。重試次數(shù)可根據(jù)用戶輸入?yún)?shù)而定,默認為 2 次。

Pipeline

由于工具采用 golang 語言編寫,因此核心處理模塊采用了 go 的 pipeline 高并發(fā)模型。整個 pipeline 模塊分為三個小模塊。

多協(xié)程處理鏡像倉庫同步規(guī)則

這里是對用戶輸入的鏡像遷移配置文件進行處理解析,獲取每一個需要傳輸?shù)脑寸R像地址(包括 repo 和 tag),以及對應(yīng)的目的鏡像地址。然后針對每個源鏡像地址和目的鏡像地址組成一個 job。如果鏡像配置文件中沒有指定源鏡像的 tag,則會拉取該 repo 下的所有 tag,再針對每個 tag,組成一個 job。這個過程采用 golang 的多協(xié)程方式處理,增加處理速度。協(xié)程數(shù)量可由用戶在輸入?yún)?shù)指定 --proc,默認是 5 個。每個 job 組成后,會被放入task channel 中,等待被消費。

Task傳輸通道

task 通道可看作一個簡易中間件,由 golang 的 channel 實現(xiàn),每個 job 被生產(chǎn)后,會被放入該 channel 中,等待被消費。該設(shè)計可以保證生產(chǎn)者生產(chǎn)出 job 就會立即被放入消費線,一旦消費端有空閑,即可進行消費處理。提高 job 處理效率。

多協(xié)程處理 task

這些協(xié)程就是 job 的消費端。拿到 job 后,會首先拉去 job 中源地址的 manifest,判斷是否為多 manifest 鏡像,接著對每個 blob 進行拉取,再將 blob 傳輸?shù)侥康牡刂罚詈笤賹?manifest 傳輸?shù)侥康牡刂?,整個過程都是利用緩存,數(shù)據(jù)不落盤,提高效率。這個過程采用 golang 的多協(xié)程方式處理,增加處理速度。協(xié)程數(shù)量可由用戶在輸入?yún)?shù)指定 --routines,默認是 5 個。

鏡像遷移最佳實踐

本節(jié)將介紹如何利用 image-transfer 工具,實現(xiàn)不同場景下的批量鏡像遷移。包含場景如下:

  1. 不同云廠商之間的鏡像遷移。例,從阿里云鏡像倉庫 ACR 遷移到騰訊云鏡像倉庫 TCR。

  2. 開源/自建鏡像倉庫遷移上云。例,從 harbor 鏡像倉庫遷移到騰訊云鏡像倉庫 TCR。

  3. 騰訊云 TCR 個人版 (CCR) 一鍵遷移至騰訊云鏡像倉庫企業(yè)版 TCR。

工具安裝:

首先對工具進行下載編譯,有兩種方式,一種是直接獲取二進制文件,第二種是下載源碼編譯。

二進制 release 包下載地址:

https://github.com/tkestack/image-transfer/releases

示例采用下載源碼編譯進行演示:

編譯過程也非常簡單,進入源碼目錄,直接 make。

git clone https://github.com/tkestack/image-transfer.git
cd ./image-transfer
make

編譯完成后,會在當(dāng)前目錄生成 image-transfer 二進制文件。即可使用。接下來進行最佳實踐演示。

最佳實踐之場景一:不同云廠商之間的鏡像遷移

以從阿里云鏡像倉庫 ACR 遷移到騰訊云鏡像倉庫 TCR 為例。

1. 準(zhǔn)備騰訊云鏡像倉庫 TCR 以及阿里云鏡像倉庫 ACR 的訪問憑證信息文件:auth.json
   grant-test.tencentcloudcr.com:
   username: xxx
   password: xxx
   grant-test2.tencentcloudcr.com:
   username: xxx
   password: xxx
   registry.cn-hangzhou.aliyuncs.com:
   username: xxx
   password: xxx
   ccr.ccs.tencentyun.com:
   username: xxx
   password: xxx
   registry.hub.docker.com:
   username: xxx
   password: xxx

配置很簡單,輸入需要訪問源鏡像倉庫地址,和目的鏡像倉庫地址。并輸入對應(yīng)鏡像倉庫的用戶名和密碼即可。

其中 insecure 表示,registry 是否是 http 服務(wù),如果是,insecure 字段需要為 true,默認是 false,可選。

而目的鏡像倉庫的用戶需要擁有 push 以及創(chuàng)建倉庫權(quán)限,如果沒有提供,則默認匿名訪問。

其中騰訊云 TCR 訪問憑證如下方法獲取: image-transfer怎么用 阿里云鏡像倉庫 ACR 的訪問憑證如下獲?。?image-transfer怎么用

2. 準(zhǔn)備好需要遷移的鏡像規(guī)則文件:rule.yaml
registry.cn-hangzhou.aliyuncs.com/grantzhao/sichenzhao:xx": "grant-test.tencentcloudcr.com/grantzhao/sichenzhao

該文件是配置需要傳輸?shù)脑寸R像和目的鏡像。文件規(guī)則是:源鏡像地址: 目的鏡像地址 其中源鏡像地址,可以指定 tag,也可以不指定 tag,也可以指定多個 tag。 指定單個 tag 時:目的地址可以包含 tag,也可以不包含。不包含 tag 時則使用源鏡像的 tag。 不指定 tag 時:目的地址必須包含 tag。 指定多個 tag 時:多 tag 之間用英文逗號隔開,比如 grant-test.tencentcloudcr.com/grantzhao/sichenzhao:1.0,2.0,3.0。此時目的地址不能包含 tag,默認使用源地址的 tag。

3. 運行工具
   ./image-transfer --routines=5 --securityFile=./security.yaml --ruleFile=./rule.yaml --ns=default \
   --registry=grant-test.tencentcloudcr.com --retry=2 --qps=100

參數(shù)解釋:

--ns 指定了一個默認的 ns,若目的倉庫的 ns 為空,則由該默認的 ns 代替。

--registry指定了一個默認的 registry,若目的倉庫的 registry 為空,則由該默認的 registry 代替。

--routines=5,表示設(shè)置并發(fā)數(shù)為 5。默認為 5。

--retry=2,表示失敗后的重試次數(shù)為 2,默認為 2。

--securityFile,指定鑒權(quán)文件。

--ruleFile,指定鏡像倉庫配置文件。

--qps,限制請求的 qps 不高于100/s。

4. 運行結(jié)果

image-transfer怎么用 最后一行

################# Finished, 0 transfer jobs failed, 0 jobs generate failed #################

表示運行成功。

最佳實踐之場景二:開源/自建鏡像倉庫遷移上云

以從開源鏡像倉庫 docker hub 遷移到騰訊云鏡像倉庫 TCR 為例。

1. 準(zhǔn)備 docker hub 以及騰訊云鏡像倉庫 TCR 的訪問憑證信息文件:security.yaml
   grant-test2.tencentcloudcr.com:
   username: xxx
   password: xxx
   registry.hub.docker.com:
   username: xxx
   password: xxx
2. 準(zhǔn)備好需要遷移的鏡像規(guī)則文件:image.json
   sichenzhao/private-test:xxx": "grant-test2.tencentcloudcr.com/grantzhao/sichenzhao
3. 運行工具
   ./image-transfer --routines=5 --securityFile=./security.yaml --ruleFile=./rule.yaml --ns=default \
   --registry=grant-test.tencentcloudcr.com --retry=2
4. 運行結(jié)果

image-transfer怎么用 最后一行

################# Finished, 0 transfer jobs failed, 0 jobs generate failed #################

表示運行成功。

最佳實踐之場景三:騰訊云 TCR 個人版(CCR)一鍵遷移至騰訊云鏡像倉庫企業(yè)版 TCR

該場景下的使用方式和上面兩種場景稍有不同。主要表現(xiàn)為輸入?yún)?shù)的變化。

1. 準(zhǔn)備鏡像鑒權(quán)配置文件 security.yaml
   grant-test.tencentcloudcr.com:
   username: xxx
   password: xxx
   grant-test2.tencentcloudcr.com:
   username: xxx
   password: xxx
   ccr.ccs.tencentyun.com:
   username: xxx
   password: xxx
2. 準(zhǔn)備騰訊云 secret 配置文件 secret.yaml

對于 TCR 的一鍵遷移模式,不需倉庫的用戶名和密碼作為訪問鑒權(quán),而是通過騰訊云的 secret 信息。

   ccr:
   secretId: xxx
   secretKey: xxx
   tcr:
   secretId: xxx
   secretKey: xxx

注意: 文件格式如上所示,只允許修改 secretId 和 secretKey 項。

如果沒有 ccr 的 secret 信息,則會用 tcr 的代替。相反如果沒有 tcr 的 secret 信息,也會用 ccr 的代替。

其中 secret 信息按如下方式獲?。?image-transfer怎么用 包含 secretid 和 secretkey 兩個信息

3. 運行工具

這里的參數(shù)輸入與上面兩種場景略有區(qū)別。

   ./image-transfer --ccrToTcr=true --routines=5 --securityFile=./security.yaml --secretFile=./secret.yaml --tcrName=tcr-test \
   --retry=3 --tcrRegion=ap-guangzhou --ccrRegion=ap-guangzhou --qps=3000

參數(shù)解釋:

--ccrToTcr=true,表示開啟 TCR 一鍵全量遷移模式。

--secretFile,提供 secret.yaml 配置文件。

--tcrName=tcr-test,指定目的 tcr 倉庫的名字。

--tcrRegion,指定目的 tcr 倉庫所在的地域。

--ccrRegion,指定源 ccr 倉庫所在的地域。

4. 運行結(jié)果

image-transfer怎么用

一鍵批量遷移時間會很久,因為需要把 ccr 的全部鏡像傳輸?shù)?tcr。

最后可以看到,有 16 個 job 失敗了。工具最后會列出失敗的 job 的源鏡像地址和目的鏡像地址。對于這些失敗的 job,去倉庫檢查后發(fā)現(xiàn),這些 job 的 tag 是失效的。因此傳輸失敗。

關(guān)于“image-transfer怎么用”這篇文章的內(nèi)容就介紹到這里,感謝各位的閱讀!相信大家對“image-transfer怎么用”知識都有一定的了解,大家如果還想學(xué)習(xí)更多知識,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI