使用Harbor 2 管理docker,helm charts及AI模型文件

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-core​github.com

3, 安装配置helm

A,安装helm

就一个helm可执行文件,放到合适的目录即可。我使用的是3.4.2。

https://github.com/helm/helm​github.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-push​github.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/ormb​github.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越来越强大!

你可能感兴趣的:(使用Harbor 2 管理docker,helm charts及AI模型文件)