Harbor升级到2.1之后,就可以比较方便的统一管理docker, helm charts及AI model文件了。我们以一个个具体的示例demo,来演示如何进行这三类文件的管理。
更改docker配置文件,让其支持内部harbor仓库
Insecure Registries:
harbor.demo.com.cn
127.0.0.0/8
Registry Mirrors:
https://docker.mirrors.ustc.edu.cn/
一,docker镜像
1,先在harbor里建立project项目(istio)
2,从外网下载镜像
docker pull istio/proxyv2:1.8.1
如果不能直接从外网拉取镜像,也可以从其它地方拉取镜像之后,通过save和reload命令,导入镜像。
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
如果项目是私有的,可能还需要使用docker login命令,先登陆harbor服务器。
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,镜像导出
docker save harbor.demo.com.cn/istio/pilot:1.8.1 -o pilot-1.8.1
会在当前目录下,生成一个名为pilot-1.8.1压缩文件,此文件可通过cp等方法,在服务器之间转移。
7,镜像导入
docker load -i pilot-1.8.1
如果当前目录下,存在pilot-1.8.1这个镜像压缩文件,此命令可以将之导入docker的本地缓存,以供docker run,docker tag,docker push等命令使用。
二, helm charts
Kubernetes提供了统一模式的API,能以YAML格式的文件定义Kubernetes集群内的资源。这些资源的种类繁多,例如无状态应用的部署 Deployment、有状态应用的部署StatefulSet、配置项ConfigMap等。
在这个基于YAML文件的软件交付体系不断完善过程中,云原生社区衍生了一个更高维度的概念及其实现工具,即Chart和Helm。
Chart是一系列Kubernetes集群内资源描述文件的组合,一个Chart可以是一个WordPress和MySQL的组合,也可以是一个etcd集群的组合。
Helm是一个命令行程序,用于管理这些Chart,以及其运行态Release。
1, Harbor里新建一个项目(helm-repo)
2, 定位应用的helm charts目录
这里以seldon-core-1.5.1项目为例,下载这个项目的源代码目录,然后进入到helm-charts子目录,此目录即为seldon-core项目提供的helm charts文件。SeldonIO/seldon-core这里以seldon-core-1.5.1项目为例,下载这个项目的源代码目录,然后进入到helm-charts子目录,此目录即为seldon-core项目提供的helm charts文件。
当然,如果能直接连外网,甚至在更好的网络条件下,我们是直接可以使用helm install或是helm pull命令,操作互联网上的charts文件。
https://github.com/SeldonIO/seldon-coregithub.com
3, 安装配置helm
A,安装helm
就一个helm可执行文件,放到合适的目录即可。我使用的是3.4.2。
https://github.com/helm/helmgithub.com
B,安装插件
Helm要能推送charts到harbor仓库,还得安装一个helm-push插件。这里不考虑联网条件,直接下载压缩包,使用如下命令安装。
helm plugin install helm-push_0.9.0_linux_amd64.tar.gz
如果这样有问题,也可以直接把这个文件解压到helm的插件目录。
https://github.com/chartmuseum/helm-pushgithub.com
C,配置helm仓库
使用如下命令,为helm增加一个chart repo仓库。
helm repo add harbor-test-helm-repo
--username=xxx
--password=xxx
http://harbor.demo.com.cn/chartrepo/helm-repo
这个harbor设置比较魔幻,chartrepo这个目录不知如何界定的,反正就是行。
之后,就可以通过如下命令,查看我们增加过哪些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应用charts
helm pull harbor-test-helm-repo/seldon-mab
- harbor-test-helm-repo表示harbor chart repo
- seldon-mab表示这个repo里的具体的charts
- 此命令将会在当前目录下,生成一个seldon-mab-0.2.0.tgz文件。
(我怀疑helm pull生成的文件和helm package文件是一样的,一个从远程,一个从本地)
G,打包charts文件夹
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
- 有时为了能在没联网的情况,在不同的环境和服务器之间,传递helm charts。可以使用helm package命令,将charts的目录全部打包成一个tgz文件。
- 有了这个文件,就可以使用正常的文件传输工具进行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应用
A, 从远程harbor charts repo安装
helm install seldon-mab harbor-test-helm-repo/seldon-mab
- seldon-mab这是命名,必须的,要不然要自动产生名字--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之后的参数,对应的是部署名称,
- 最后一个参数,对应的是本地目录或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应用
helm uninstall seldon-core -n seldon-system
三,AI model
ORMB的名称源自 OCI-Based Registry for ML/DL Model Bundle,它能够将模型和模型的元数据利用已有的镜像仓库进行分发。通过镜像仓库来分发模型,可以帮助用户更好的管理他们的机器学习/深度学习模型。通过ORMB,模型能更易于创建、版本化、共享以及发布。
字节跳动将于近日完成对容器平台才云科技(Caicloud)的全资收购,收购完成后,才云科技的团队及业务,将加入字节跳动火山引擎。
ORMB 是 Klever 下的一个命令行管理工具子项目,可以像 Docker 管理镜像一样管理模型。它支持 OCI 标准,可以对模型文件和模型属性进行分层存储管理。
Ormb的命令比较简单,和docker操作harbor的命令类似,对照起来学习更快。这里演示的AI MODEL模型,是以ormb项目的examples里的文件列表为素材的。
1, ormb下载安装
https://github.com/kleveross/ormbgithub.com
将下载得到的ormb_0.0.10_Linux_x86_64.tar.gz解压,放于linux可执行目录即可。通过如下命令,输出ormb的版本信息
ormb version
Version: 0.0.10
Git SHA: cd8d7163ecbdb4dfa91b422846140286c780443a
Repo Root: [email protected]:simon-cj/ormb.git
Go Version: go1.15.6
Go OS/Arch: linux/amd64
(压缩包里还有另一个ormb-storage-initializer文件,此文件在部署klever时有用,暂且不表。)
2, ormb登陆harbor
同docker一样,如何harbor里的项目是私有的话,在上传下载model时,需要先登陆
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
因为没有使用Https登陆,所以会有安全提示。
3, 将当前目录下的模型文件存储到本地缓存中
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
- 如果有一天,发现后现的ormb push命令老是报错,不要怀疑自己的实力,有时,就是单纯的tag不准使用大写字母等缘故。
5, 将存储在本地缓存中的模型推送到远端仓库中
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, 将存储在远端仓库的模型拉取到本地缓存中
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, 将存储在缓存中的模型导出到当前目录
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命令相反,会在当前目录下,展开解压成model本来的文件。
总之一句话,harbor越来越强大!