這篇文章主要介紹了image-transfer怎么用的相關(guān)知識,內(nèi)容詳細(xì)易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇image-transfer怎么用文章都會有所收獲,下面我們一起來看看吧。
創(chuàng)新互聯(lián)建站于2013年開始,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項目成都網(wǎng)站制作、網(wǎng)站建設(shè)網(wǎng)站策劃,項目實施與項目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元麒麟做網(wǎng)站,已為上家服務(wù),為麒麟各地企業(yè)和個人服務(wù),聯(lián)系電話:18982081108
業(yè)務(wù)上云主要有幾種場景,一是自建 idc 上云,二是第三方云遷移,三是異地災(zāi)備,即混合云。這些場景中,無論是上云還是云遷移,遷移流程主要有如下幾步。
網(wǎng)絡(luò)規(guī)劃。vpc 配置,子網(wǎng)劃分等。
數(shù)據(jù)遷移。對象存儲,文件存儲等。
應(yīng)用遷移。業(yè)務(wù),配置等。
在數(shù)據(jù)遷移過程中,如果業(yè)務(wù)大量使用容器化部署,則需要批量鏡像遷移。而目前大部分云廠商的鏡像倉庫服務(wù)沒有提供鏡像倉庫批量遷移的能力。業(yè)務(wù)想要遷移,只能先在本地下載原鏡像,修改 tag 后,再上傳至目的鏡像倉庫。這個過程存在以下幾個缺點:
耗時耗力。僅僅對于單個鏡像遷移,就需要三步操作,并且需要時刻盯著,若出現(xiàn)失敗情況,需進一步處理。
完全人肉操作,易出現(xiàn)差錯。在對原鏡像修改 tag 時,由于是人為修改,極易操作失誤,tag 修改錯了等。
鏡像量大時,成本增加,上云進度緩慢。如果有幾百上千個鏡像,這樣人肉操作,遷移進度會十分緩慢,且遷移成本會大大增加。
針對鏡像遷移的痛點。我們希望開發(fā)一種鏡像批量遷移工具。它對使用者而言,只需要簡單的配置,就可以實現(xiàn)鏡像批量遷移,無需人工干預(yù),提高業(yè)務(wù)上云/遷移的進度,降低成本。具體而言,該工具有以下設(shè)計目標(biāo)。
配置簡單,無需復(fù)雜輸入。我們希望對使用者而言這個工具是簡單易用的,僅需配置源、目的鏡像地址和鑒權(quán),即可完成批量遷移。
快速高效遷移海量鏡像,降低遷移成本。針對大量的鏡像遷移需求,我們希望工具可以高效完成,借助高并發(fā)的一些技術(shù),實現(xiàn)快速遷移。
一定的容錯能力,減少人工干預(yù)維護。在遷移過程中,我們希望工具可以進行一些錯誤的識別和自動修復(fù),盡量減少人工維護,提高運維效率。
對運行環(huán)境沒有依賴,提高工具普適性。我們希望工具是可以在任何 linux,mac os,windows 操作系統(tǒng)中運行,而不用依賴 docker 及其他程序。
支持騰訊云 CCR 一鍵全量遷移模式。目前,騰訊云容器鏡像服務(wù) TCR 企業(yè)版正式上線,騰訊云 TCR 個人版(CCR)將在未來逐步減少維護,直到下線。因此工具需要支持 CCR 倉庫一鍵全量遷移至 TCR 企業(yè)版。
支持自定義 qps 限速。批量遷移鏡像,頻繁的調(diào)用鏡像倉庫接口有可能導(dǎo)致鏡像倉庫崩潰,因此需要對 qps 進行限制。
image-transfer 由多個模塊構(gòu)成,下圖給出了 image-transfer 架構(gòu)圖。
通用模式輸入(默認(rèn)):用于接受用戶下發(fā)的鏡像遷移任務(wù)。包括鏡像遷移配置文件和鑒權(quán)配置文件。該模式用于實現(xiàn)云廠商之間的鏡像遷移。
CCR 一鍵遷移模式輸入:需要在工具輸入?yún)?shù)添加 --ccrToTcr=true,該模式用于 CCR 倉庫一鍵全量遷移至 TCR 企業(yè)版。除了添加 --ccrToTcr=true 參數(shù),還需鑒權(quán)配置文件和騰訊云 secret 配置文件。
pipeline:該模塊是工具處理鏡像遷移的核心。負(fù)責(zé)處理用戶下發(fā)的鏡像遷移任務(wù),包括根據(jù)遷移配置文件處理鏡像倉庫的同步規(guī)則,以及進行鏡像的分層拉取和傳輸任務(wù)。模塊采用了高并發(fā)的 pipeline 模型,提高遷移速度。
重試 task:這個階段會重試 pipeline 中傳輸失敗的任務(wù)。重試次數(shù)可根據(jù)用戶輸入?yún)?shù)而定,默認(rèn)為 2 次。
由于工具采用 golang 語言編寫,因此核心處理模塊采用了 go 的 pipeline 高并發(fā)模型。整個 pipeline 模塊分為三個小模塊。
這里是對用戶輸入的鏡像遷移配置文件進行處理解析,獲取每一個需要傳輸?shù)脑寸R像地址(包括 repo 和 tag),以及對應(yīng)的目的鏡像地址。然后針對每個源鏡像地址和目的鏡像地址組成一個 job。如果鏡像配置文件中沒有指定源鏡像的 tag,則會拉取該 repo 下的所有 tag,再針對每個 tag,組成一個 job。這個過程采用 golang 的多協(xié)程方式處理,增加處理速度。協(xié)程數(shù)量可由用戶在輸入?yún)?shù)指定 --proc,默認(rèn)是 5 個。每個 job 組成后,會被放入task channel 中,等待被消費。
task 通道可看作一個簡易中間件,由 golang 的 channel 實現(xiàn),每個 job 被生產(chǎn)后,會被放入該 channel 中,等待被消費。該設(shè)計可以保證生產(chǎn)者生產(chǎn)出 job 就會立即被放入消費線,一旦消費端有空閑,即可進行消費處理。提高 job 處理效率。
這些協(xié)程就是 job 的消費端。拿到 job 后,會首先拉去 job 中源地址的 manifest,判斷是否為多 manifest 鏡像,接著對每個 blob 進行拉取,再將 blob 傳輸?shù)侥康牡刂?,最后再?manifest 傳輸?shù)侥康牡刂?,整個過程都是利用緩存,數(shù)據(jù)不落盤,提高效率。這個過程采用 golang 的多協(xié)程方式處理,增加處理速度。協(xié)程數(shù)量可由用戶在輸入?yún)?shù)指定 --routines,默認(rèn)是 5 個。
本節(jié)將介紹如何利用 image-transfer 工具,實現(xiàn)不同場景下的批量鏡像遷移。包含場景如下:
不同云廠商之間的鏡像遷移。例,從阿里云鏡像倉庫 ACR 遷移到騰訊云鏡像倉庫 TCR。
開源/自建鏡像倉庫遷移上云。例,從 harbor 鏡像倉庫遷移到騰訊云鏡像倉庫 TCR。
騰訊云 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 為例。
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,默認(rèn)是 false,可選。
而目的鏡像倉庫的用戶需要擁有 push 以及創(chuàng)建倉庫權(quán)限,如果沒有提供,則默認(rèn)匿名訪問。
其中騰訊云 TCR 訪問憑證如下方法獲取: 阿里云鏡像倉庫 ACR 的訪問憑證如下獲?。?
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,默認(rèn)使用源地址的 tag。
./image-transfer --routines=5 --securityFile=./security.yaml --ruleFile=./rule.yaml --ns=default \ --registry=grant-test.tencentcloudcr.com --retry=2 --qps=100
參數(shù)解釋:
--ns 指定了一個默認(rèn)的 ns,若目的倉庫的 ns 為空,則由該默認(rèn)的 ns 代替。
--registry指定了一個默認(rèn)的 registry,若目的倉庫的 registry 為空,則由該默認(rèn)的 registry 代替。
--routines=5,表示設(shè)置并發(fā)數(shù)為 5。默認(rèn)為 5。
--retry=2,表示失敗后的重試次數(shù)為 2,默認(rèn)為 2。
--securityFile,指定鑒權(quán)文件。
--ruleFile,指定鏡像倉庫配置文件。
--qps,限制請求的 qps 不高于100/s。
最后一行
################# Finished, 0 transfer jobs failed, 0 jobs generate failed #################
表示運行成功。
以從開源鏡像倉庫 docker hub 遷移到騰訊云鏡像倉庫 TCR 為例。
grant-test2.tencentcloudcr.com: username: xxx password: xxx registry.hub.docker.com: username: xxx password: xxx
sichenzhao/private-test:xxx": "grant-test2.tencentcloudcr.com/grantzhao/sichenzhao
./image-transfer --routines=5 --securityFile=./security.yaml --ruleFile=./rule.yaml --ns=default \ --registry=grant-test.tencentcloudcr.com --retry=2
最后一行
################# Finished, 0 transfer jobs failed, 0 jobs generate failed #################
表示運行成功。
該場景下的使用方式和上面兩種場景稍有不同。主要表現(xiàn)為輸入?yún)?shù)的變化。
grant-test.tencentcloudcr.com: username: xxx password: xxx grant-test2.tencentcloudcr.com: username: xxx password: xxx ccr.ccs.tencentyun.com: username: xxx password: xxx
對于 TCR 的一鍵遷移模式,不需倉庫的用戶名和密碼作為訪問鑒權(quán),而是通過騰訊云的 secret 信息。
ccr: secretId: xxx secretKey: xxx tcr: secretId: xxx secretKey: xxx
注意: 文件格式如上所示,只允許修改 secretId 和 secretKey 項。
如果沒有 ccr 的 secret 信息,則會用 tcr 的代替。相反如果沒有 tcr 的 secret 信息,也會用 ccr 的代替。
其中 secret 信息按如下方式獲?。? 包含 secretid 和 secretkey 兩個信息
這里的參數(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 倉庫所在的地域。
一鍵批量遷移時間會很久,因為需要把 ccr 的全部鏡像傳輸?shù)?tcr。
最后可以看到,有 16 個 job 失敗了。工具最后會列出失敗的 job 的源鏡像地址和目的鏡像地址。對于這些失敗的 job,去倉庫檢查后發(fā)現(xiàn),這些 job 的 tag 是失效的。因此傳輸失敗。
關(guān)于“image-transfer怎么用”這篇文章的內(nèi)容就介紹到這里,感謝各位的閱讀!相信大家對“image-transfer怎么用”知識都有一定的了解,大家如果還想學(xué)習(xí)更多知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。