Harbor升級到2.1之后允蜈,就可以比較方便的統(tǒng)一管理docker, helm charts及AI model文件了磷箕。我們以一個(gè)個(gè)具體的示例demo选酗,來演示如何進(jìn)行這三類文件的管理。
更改docker配置文件岳枷,讓其支持內(nèi)部harbor倉庫
Insecure Registries:
harbor.demo.com.cn
127.0.0.0/8
Registry Mirrors:
https://docker.mirrors.ustc.edu.cn/
一芒填,docker鏡像
1,先在harbor里建立project項(xiàng)目(istio)
2空繁,從外網(wǎng)下載鏡像
docker pull istio/proxyv2:1.8.1
如果不能直接從外網(wǎng)拉取鏡像殿衰,也可以從其它地方拉取鏡像之后,通過save和reload命令盛泡,導(dǎo)入鏡像闷祥。
3,更改鏡像tag
docker tag istio/proxyv2:1.8.1 harbor.demo.com.cn/istio/proxyv2:1.8.1
4傲诵,上傳鏡像
docker push harbor.demo.com.cn/istio/proxyv2:1.8.1
如果項(xiàng)目是私有的凯砍,可能還需要使用docker login命令,先登陸harbor服務(wù)器拴竹。
5悟衩,拉取harbor鏡像到本地緩存
docker pull harbor.demo.com.cn/istio/pilot:1.8.1
1.8.1: Pulling from istio/pilot
Digest: sha256:2fe9f9cd22bcfb724c706124feadaaa18dfc11c1a434aad21c2b7ec5c52ccca2
Status: Image is up to date for harbor.demo.com.cn/istio/pilot:1.8.1
6,鏡像導(dǎo)出
docker save harbor.demo.com.cn/istio/pilot:1.8.1 -o pilot-1.8.1
會在當(dāng)前目錄下栓拜,生成一個(gè)名為pilot-1.8.1壓縮文件座泳,此文件可通過cp等方法斑响,在服務(wù)器之間轉(zhuǎn)移。
7钳榨,鏡像導(dǎo)入
docker load -i pilot-1.8.1
如果當(dāng)前目錄下,存在pilot-1.8.1這個(gè)鏡像壓縮文件纽门,此命令可以將之導(dǎo)入docker的本地緩存薛耻,以供docker run,docker tag赏陵,docker push等命令使用饼齿。
二, helm charts
Kubernetes提供了統(tǒng)一模式的API蝙搔,能以YAML格式的文件定義Kubernetes集群內(nèi)的資源缕溉。這些資源的種類繁多,例如無狀態(tài)應(yīng)用的部署 Deployment吃型、有狀態(tài)應(yīng)用的部署StatefulSet证鸥、配置項(xiàng)ConfigMap等。
在這個(gè)基于YAML文件的軟件交付體系不斷完善過程中勤晚,云原生社區(qū)衍生了一個(gè)更高維度的概念及其實(shí)現(xiàn)工具枉层,即Chart和Helm。
Chart是一系列Kubernetes集群內(nèi)資源描述文件的組合赐写,一個(gè)Chart可以是一個(gè)WordPress和MySQL的組合鸟蜡,也可以是一個(gè)etcd集群的組合。
Helm是一個(gè)命令行程序挺邀,用于管理這些Chart揉忘,以及其運(yùn)行態(tài)Release。
1端铛, Harbor里新建一個(gè)項(xiàng)目(helm-repo)
2泣矛, 定位應(yīng)用的helm charts目錄
這里以seldon-core-1.5.1項(xiàng)目為例,下載這個(gè)項(xiàng)目的源代碼目錄沦补,然后進(jìn)入到helm-charts子目錄乳蓄,此目錄即為seldon-core項(xiàng)目提供的helm charts文件。SeldonIO/seldon-core這里以seldon-core-1.5.1項(xiàng)目為例夕膀,下載這個(gè)項(xiàng)目的源代碼目錄虚倒,然后進(jìn)入到helm-charts子目錄,此目錄即為seldon-core項(xiàng)目提供的helm charts文件产舞。
當(dāng)然魂奥,如果能直接連外網(wǎng),甚至在更好的網(wǎng)絡(luò)條件下易猫,我們是直接可以使用helm install或是helm pull命令耻煤,操作互聯(lián)網(wǎng)上的charts文件。
https://github.com/SeldonIO/seldon-core?github.com
3, 安裝配置helm
A,安裝helm
就一個(gè)helm可執(zhí)行文件哈蝇,放到合適的目錄即可棺妓。我使用的是3.4.2。
https://github.com/helm/helm?github.com
B炮赦,安裝插件
Helm要能推送charts到harbor倉庫怜跑,還得安裝一個(gè)helm-push插件。這里不考慮聯(lián)網(wǎng)條件吠勘,直接下載壓縮包性芬,使用如下命令安裝。
helm plugin install helm-push_0.9.0_linux_amd64.tar.gz
如果這樣有問題剧防,也可以直接把這個(gè)文件解壓到helm的插件目錄植锉。
https://github.com/chartmuseum/helm-push?github.com
C,配置helm倉庫
使用如下命令峭拘,為helm增加一個(gè)chart repo倉庫俊庇。
helm repo add harbor-test-helm-repo
--username=xxx
--password=xxx
http://harbor.demo.com.cn/chartrepo/helm-repo
這個(gè)harbor設(shè)置比較魔幻,chartrepo這個(gè)目錄不知如何界定的鸡挠,反正就是行暇赤。
之后,就可以通過如下命令宵凌,查看我們增加過哪些chart repo倉庫鞋囊。
helm repo list
NAME URL
harbor-test-helm-repo http://harbor.demo.com.cn/chartrepo/helm-repo
D,更新本地charts緩存瞎惫,更新之后溜腐,才可以使用search命令搜索helm charts.
helm repo update
Hang tight while we grab the latest from your chart repositories...
...Successfully got an update from the "harbor-test-helm-repo" chart repository
Update Complete. ?Happy Helming!?
E,搜索charts倉庫里的文件
helm search repo seldom
F瓜喇,下載helm應(yīng)用charts
helm pull harbor-test-helm-repo/seldon-mab
- harbor-test-helm-repo表示harbor chart repo
- seldon-mab表示這個(gè)repo里的具體的charts
- 此命令將會在當(dāng)前目錄下挺益,生成一個(gè)seldon-mab-0.2.0.tgz文件。
(我懷疑helm pull生成的文件和helm package文件是一樣的乘寒,一個(gè)從遠(yuǎn)程望众,一個(gè)從本地)
G,打包c(diǎn)harts文件夾
helm package seldon-core-operator/
Successfully packaged chart and saved it to: /opt/seldon-core-1.5.1/helm-charts/seldon-core-operator-1.5.1.tgz
- 有時(shí)為了能在沒聯(lián)網(wǎng)的情況伞辛,在不同的環(huán)境和服務(wù)器之間烂翰,傳遞helm charts≡槭希可以使用helm package命令甘耿,將charts的目錄全部打包成一個(gè)tgz文件。
- 有了這個(gè)文件竿滨,就可以使用正常的文件傳輸工具進(jìn)行cp和install部署了佳恬。
4捏境, 上傳helm charts到harbor倉庫
A,一種方式是直接上傳charts文件夾
helm push seldon-mab harbor-test-helm
- seldon-mab是charts目錄
- harbor-test-helm是harbor charts repo名稱
B毁葱,另一種是將charts package文件包push
helm push seldon-core-operator-1.5.1.tgz harbor-test-helm
Pushing seldon-mab-0.2.0.tgz to harbor-test-helm...
Done.
Pushing seldon-core-operator-1.5.1.tgz to harbor-test-helm...
Done.
C垫言,如果一切正常,在harbor里就可以看到這些charts的信息了倾剿。
5骏掀, 安裝helm charts應(yīng)用
A, 從遠(yuǎn)程harbor charts repo安裝
helm install seldon-mab harbor-test-helm-repo/seldon-mab
- seldon-mab這是命名,必須的柱告,要不然要自動產(chǎn)生名字--generate-name
B, 從本地目錄或壓縮文件安裝
kubectl create namespace seldon-system
helm install seldon-core \
--namespace seldon-system
--set usageMetrics.enabled=true
--set istio.enabled=true
seldon-core-operator
- install之后的參數(shù),對應(yīng)的是部署名稱笑陈,
- 最后一個(gè)參數(shù)际度,對應(yīng)的是本地目錄或charts壓縮文件名。
NAME: seldon-core
LAST DEPLOYED: Fri Jan 24 18:04:29 2021
NAMESPACE: seldon-system
STATUS: deployed
REVISION: 1
TEST SUITE: None
C, 查看已安裝charts
helm list -n seldon-system
6涵妥, 刪除helm charts應(yīng)用
helm uninstall seldon-core -n seldon-system
三乖菱,AI model
ORMB的名稱源自 OCI-Based Registry for ML/DL Model Bundle,它能夠?qū)⒛P秃湍P偷脑獢?shù)據(jù)利用已有的鏡像倉庫進(jìn)行分發(fā)蓬网。通過鏡像倉庫來分發(fā)模型窒所,可以幫助用戶更好的管理他們的機(jī)器學(xué)習(xí)/深度學(xué)習(xí)模型。通過ORMB帆锋,模型能更易于創(chuàng)建吵取、版本化、共享以及發(fā)布锯厢。
<u style="text-decoration: none; border-bottom: 1px dashed grey;">字節(jié)跳動將于近日完成對容器平臺才云科技(Caicloud)的全資收購皮官,收購?fù)瓿珊螅旁瓶萍嫉膱F(tuán)隊(duì)及業(yè)務(wù)实辑,將加入字節(jié)跳動火山引擎捺氢。</u>
ORMB 是 Klever 下的一個(gè)命令行管理工具子項(xiàng)目,可以像 Docker 管理鏡像一樣管理模型剪撬。它支持 OCI 標(biāo)準(zhǔn)摄乒,可以對模型文件和模型屬性進(jìn)行分層存儲管理。
Ormb的命令比較簡單残黑,和docker操作harbor的命令類似馍佑,對照起來學(xué)習(xí)更快。這里演示的AI MODEL模型梨水,是以ormb項(xiàng)目的examples里的文件列表為素材的挤茄。
1, ormb下載安裝
https://github.com/kleveross/ormb?github.com
將下載得到的ormb_0.0.10_Linux_x86_64.tar.gz解壓冰木,放于linux可執(zhí)行目錄即可穷劈。通過如下命令笼恰,輸出ormb的版本信息
ormb version
Version: 0.0.10
Git SHA: cd8d7163ecbdb4dfa91b422846140286c780443a
Repo Root: git@github.com:simon-cj/ormb.git
Go Version: go1.15.6
Go OS/Arch: linux/amd64
(壓縮包里還有另一個(gè)ormb-storage-initializer文件,此文件在部署klever時(shí)有用歇终,暫且不表社证。)
2, ormb登陸harbor
同docker一樣评凝,如何harbor里的項(xiàng)目是私有的話追葡,在上傳下載model時(shí),需要先登陸
ormb login --insecure harbor.demo.com.cn
Username: admin
Password:
Login insecurely
INFO[2021-01-18T09:38:42+08:00] Error logging in to v2 endpoint, trying next endpoint: Get "https://harbor.demo.com.cn/v2/": http: server gave HTTP response to HTTPS client
Login succeeded
因?yàn)闆]有使用Https登陸奕短,所以會有安全提示宜肉。
3, 將當(dāng)前目錄下的模型文件存儲到本地緩存中
ormb save PMML-model/ harebor.demo.com.cn/ai-model/PMML-model:v0.1
ref: harbor.demo.com.cn/ai-model/PMML-model:v0.1
digest: 47e6f69c39bf37ccd8bbe162cd208fd0bb9c602672efad04c40deb0721ab86b6
size: 6.1 KiB
format: PMML
v0.1: saved
4翎碑, 更改模型的tag
ormb tag harbor.demo.com.cn/ai-model/PMML-model:v0.1 harbor.demo.com.cn/ai-model/pmml_model:v0.2
harbor.demo.com.cn/ai-model/PMML-model:v0.1: tagged
- 如果有一天谬返,發(fā)現(xiàn)后現(xiàn)的ormb push命令老是報(bào)錯(cuò),不要懷疑自己的實(shí)力日杈,有時(shí)遣铝,就是單純的tag不準(zhǔn)使用大寫字母等緣故。
5莉擒, 將存儲在本地緩存中的模型推送到遠(yuǎn)端倉庫中
ormb push --plain-http harbor.demo.com.cn/ai-model/pmml_model:v0.2
The push refers to repository [harbor.demo.com.cn/ai-model/pmml_model]
ref: harbor.demo.com.cn/ai-model/pmml_model:v0.2
digest: 47e6f69c39bf37ccd8bbe162cd208fd0bb9c602672efad04c40deb0721ab86b6
size: 6.1 KiB
format: PMML
v0.2: pushed to remote (1 layer, 6.1 KiB total)
無圖無真相
6酿炸, 將存儲在遠(yuǎn)端倉庫的模型拉取到本地緩存中
ormb pull --plain-http harbor.demo.com.cn/ai-model/pmml_model:v0.3
v0.3: Pulling from harbor.demo.com.cn/ai-model/pmml_model
ref: harbor.demo.com.cn/ai-model/pmml_model:v0.3
digest: 47e6f69c39bf37ccd8bbe162cd208fd0bb9c602672efad04c40deb0721ab86b6
size: 6.1 KiB
format: PMML
Status: Downloaded newer model for harbor.demo.com.cn/ai-model/pmml_model:v0.3
7, 將存儲在緩存中的模型導(dǎo)出到當(dāng)前目錄
ormb export harbor.demo.com.cn/ai-model/pmml_model:v0.3
ref: harbor.demo.com.cn/ai-model/pmml_model:v0.3
digest: 47e6f69c39bf37ccd8bbe162cd208fd0bb9c602672efad04c40deb0721ab86b6
size: 6.1 KiB
format: PMML
此條命令涨冀,與save命令相反填硕,會在當(dāng)前目錄下,展開解壓成model本來的文件鹿鳖。
總之一句話廷支,harbor越來越強(qiáng)大!