環(huán)境遷移
Platfor
m Ops for AI 作為整合了 DataOps、MLOps、ModelOps 的復(fù)雜技術(shù)平臺(tái),在項(xiàng)目開發(fā)時(shí)僅使用一套系統(tǒng)無(wú)法支撐平臺(tái)的穩(wěn)定搭建,往往需要開發(fā)系統(tǒng)、集成測(cè)試系統(tǒng)、正式
環(huán)境系統(tǒng)在項(xiàng)目生命周期
中協(xié)作配合。將表、索引、并發(fā)程序、配置內(nèi)容等資源從源環(huán)境遷移到另一個(gè)目標(biāo)環(huán)境的過(guò)程就叫做環(huán)境遷移。
技術(shù)背景
發(fā)生遷移的環(huán)境一般包括開發(fā)環(huán)境、測(cè)試環(huán)境、生產(chǎn)環(huán)境 [24]。
開發(fā)環(huán)境:產(chǎn)品的配置可以在開發(fā)環(huán)境中進(jìn)行變更。對(duì)于遷移過(guò)程,開發(fā)環(huán)境一般只作
為源環(huán)境。
測(cè)試環(huán)境:測(cè)試環(huán)境包含了生產(chǎn)環(huán)境中所有業(yè)務(wù)的應(yīng)用程序和配置變更。將開發(fā)環(huán)境中
的資源遷移到測(cè)試環(huán)境中測(cè)試配置變更執(zhí)行。測(cè)試環(huán)境既可以作為源環(huán)境也可以作為目標(biāo)環(huán)
境。
生產(chǎn)環(huán)境:測(cè)試應(yīng)用程序滿足需求后,將應(yīng)用程序和配置內(nèi)容遷移到生產(chǎn)環(huán)境中。生產(chǎn)
環(huán)境一般只作為目標(biāo)環(huán)境。
在環(huán)境遷移過(guò)程中,首先需要對(duì)源環(huán)境的資源進(jìn)行拷貝,因此需要結(jié)合容器的鏡像存儲(chǔ)
功能。Docker registry 提供后端鏡像存儲(chǔ)服務(wù),在遷移之前為了確認(rèn)遷移后沒(méi)有發(fā)生鏡像丟
失的現(xiàn)象,先獲取一份 Docker registry 中的鏡像列表,接著采用復(fù)制鏡像或是復(fù)制 registry
存儲(chǔ)目錄等方法,完成從源環(huán)境到目標(biāo)資源的遷移工作。
思路方案
和數(shù)據(jù)集的共享類似,SecXOps 也支持項(xiàng)目代碼的共享。團(tuán)隊(duì)開發(fā)過(guò)程中可以隨時(shí)從
gitlab 上下載或同步代碼,用戶正在編輯的代碼也會(huì)存儲(chǔ)在 PVC 中,掛載到一個(gè)正在運(yùn)行的
供用戶在線編程的 pod 上。
容器的環(huán)境遷移需要通過(guò)封裝鏡像來(lái)實(shí)現(xiàn)。Docker 封裝鏡像有兩種方式,docker
commit 和 docker build。使用 docker commit 可以很方便地制作鏡像,然而這種方式對(duì)于鏡
像的使用者是完全未知的,使用者無(wú)法獲取封裝時(shí)對(duì)鏡像做了哪些修改。同時(shí)這種修改是永
久性的,如果新的使用者使用該鏡像創(chuàng)建容器修改之后繼續(xù)使用 docker commit,將會(huì)導(dǎo)致
整個(gè)鏡像越來(lái)越臃腫。而通常的 Docker 鏡像是多層存儲(chǔ)的,每一層都是在前一層的基礎(chǔ)上進(jìn)
行的修改,容器以鏡像為基礎(chǔ),同樣是多層存儲(chǔ),因此,如果可以把每一層操作的命令都寫
入一個(gè)腳本,用這個(gè)腳本來(lái)制作鏡像,上述問(wèn)題將不再存在。這種方式即是使用 Dockerfile
進(jìn)行 docker build。Dockerfile 是一個(gè)用來(lái)構(gòu)建鏡像的文本文件,文本內(nèi)容包含了構(gòu)建鏡像所
需的指令和說(shuō)明。一個(gè)簡(jiǎn)單的 Dockerfile 示例如下圖所示,通過(guò)類似的文件進(jìn)行 build 即可將
環(huán)境進(jìn)行復(fù)制。
Se用戶在 SecXOps 平臺(tái)上所開發(fā)的算法按照用戶預(yù)先設(shè)定好的類型標(biāo)簽可以分為數(shù)據(jù)預(yù)處
理、特征提取、模型訓(xùn)練、超參調(diào)優(yōu)等多種類型。當(dāng)某個(gè)項(xiàng)目所使用到的算法性能優(yōu)越時(shí),
用戶可以選擇將其公開展示,此時(shí) SecXOps 會(huì)檢測(cè)對(duì)應(yīng)的項(xiàng)目版本內(nèi)是否有 Dockerfile,如
果有,則會(huì)在當(dāng)前 Node 上根據(jù)該 Dockerfile 創(chuàng)建一個(gè)鏡像,鏡像內(nèi)只包含用戶的開發(fā)環(huán)境,
數(shù)據(jù)和代碼會(huì)分別創(chuàng)建一個(gè) Job,復(fù)制出一個(gè)新的 PVC。鏡像創(chuàng)建成功后,SecXOps 會(huì)觀測(cè)
當(dāng)前項(xiàng)目所在的 Node 的資源是否充足,當(dāng) CPU、內(nèi)存資源充足時(shí),優(yōu)先選擇在該 Node 節(jié)
點(diǎn)上按照封裝好的鏡像創(chuàng)建一個(gè)容器,供用戶進(jìn)行開發(fā),當(dāng) CPU、內(nèi)存資源不充足或需要使
用 GPU 資源時(shí),SecXOps 會(huì)將該鏡像 push 到專為 SecXOps 平臺(tái)搭建的 Harbor 服務(wù)中,隨
后按照一定的策略挑選一個(gè) Node 節(jié)點(diǎn),將鏡像從 Harbor 中拉取下來(lái)并創(chuàng)建 Pod。該 Pod
在啟動(dòng)時(shí)掛載數(shù)據(jù)和代碼對(duì)應(yīng)的 PVC,實(shí)現(xiàn)一鍵式的數(shù)據(jù)、代碼以及開發(fā)環(huán)境的環(huán)境遷移。

參考資料
友情鏈接
GB-T 25067-2020 信息技術(shù) 安全技術(shù) 信息安全管理體系審核和認(rèn)證機(jī)構(gòu)要求