1. 前言本文中,我们会基于sealos制作一个Milvus集群镜像。 使用这个集群镜像,我们能够在sealos拉起的K8S集群中,一键部署Milvus2.2.0。
参考文档:
2. 前置条件安装sealos4.2.0,拉起K8S 1.24.8集群(同时安装helm),具体方法参考《sealos入门篇》 。
3. 制作cert-manager集群镜像1、准备资源清单
1 2 3 mkdir cert-manager && cd cert-managermkdir manifestswget -O manifests/cert-manager.yaml https://github.com/jetstack/cert-manager/releases/download/v1.5.3/cert-manager.yaml
2、添加镜像列表
1 2 3 cat manifests/* | grep imagemkdir -p images/shim/vim images/shim/cert-manager-images.txt
cert-manager-images.txt 内容为:
1 2 3 quay.io/jetstack/cert-manager-cainjector:v1.5.3 quay.io/jetstack/cert-manager-controller:v1.5.3 quay.io/jetstack/cert-manager-webhook:v1.5.3
3、编写Dockerfile
1 2 3 FROM scratchCOPY ../cert-manager . CMD ["kubectl apply -f manifests" ]
默认安装到 cert-manager 命名空间。
4、构建集群镜像
1 2 sealos build -f Dockerfile -t docker.io/voidking/cert-manager:v1.5.3 . sealos inspect docker.io/voidking/cert-manager:v1.5.3
4. 使用cert-manager集群镜像4.1. 自定义安装安装1 2 3 sealos run docker.io/voidking/cert-manager:v1.5.3 --cmd="kubectl apply -f manifests" kubectl get all -n cert-manager
4.2. 上传集群镜像上传到公共镜像仓库
1 2 3 4 sealos push docker.io/voidking/cert-manager:v1.5.3 sealos tag docker.io/voidking/cert-manager:v1.5.3 hub.sealos.cn/voidking/cert-manager:v1.5.3 sealos login -k config.yml hub.sealos.cn sealos push hub.sealos.cn/voidking/cert-manager:v1.5.3
上传到私有镜像仓库
1 2 3 sealos tag docker.io/voidking/cert-manager:v1.5.3 harbor.voidking.com/sealos/cert-manager:v1.5.3 sealos login harbor.voidking.com sealos push harbor.voidking.com/sealos/cert-manager:v1.5.3
5. 制作Milvus集群镜像1、下载chart
1 2 3 4 mkdir milvus && cd milvushelm repo add milvus https://milvus-io.github.io/milvus-helm/ helm search repo milvus/milvus -l helm fetch milvus/milvus --version 3.3.6
这里下载chart3.3.6,对应milvus版本2.2.0。 下载的文件为:milvus-3.3.6.tgz
2、修改chart
1 2 3 4 tar -xzvf milvus-3.3.6.tgz vim milvus/values.yaml tar -czvf milvus-3.3.6-custom.tgz milvus rm milvus -rf
values.yaml 如下修改:
cluster.enabled 建议修改为false,为 true 时非常消耗资源 service.type 改为 NodePort x.resources 保持默认,按需修改 x.persistence.storageClass 保持默认,使用默认storageclass x.persistence.size 保持默认,按需修改 etcd.replicaCount 改为 1,节省资源 minio.mode 改为 standalone,节省资源 pulsar.enabled 保持 true,pulsar是一个分布式发布订阅消息系统,必须安装 metrics.enabled 保持 true,对外暴露监控数据 metrics.serviceMonitor.enabled 改为 true,使prometheus可以获取到监控数据 milvus开放两个端口,19530是客户端连接端口,9091是http api端口。
注意:milvus不用配置用户名和密码。
3、获取镜像列表
1 2 3 helm template milvus-test milvus-3.3.6-custom.tgz > milvus_manifest.yaml python get_image.py --manifest milvus_manifest.yaml rm milvus_manifest.yaml get_image.py
get_image.py内容为:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 import argparseimport gzipimport osimport yamlfrom nested_lookup import nested_lookupif __name__ == "__main__" : parser = argparse.ArgumentParser( description="Save Docker images" ) parser.add_argument("--manifest" , required=True , help ="Path to the manifest yaml" ) parser.add_argument("--save_path" , type =str , default='images' , help ='Directory to save images to' ) arguments = parser.parse_args() with open (arguments.manifest, 'r' ) as file: template = file.read() images=[] parts = template.split('---' ) for p in parts: y = yaml.safe_load(p) matches = nested_lookup("image" , y) if (len (matches)): images += matches for image_name in set (images): print (image_name)
get_image.py 改写自脚本 save_image.py 。
4、添加镜像列表
1 2 mkdir -p images/shim/vim images/shim/milvus-images.txt
milvus-images.txt 内容为:
1 2 3 4 5 milvusdb/milvus:v2.2.0 docker.io/milvusdb/etcd:3.5.0-r7 minio/minio:RELEASE.2022-03-17T06-34-49Z milvusdb/milvus-config-tool:v0.1.0 apachepulsar/pulsar:2.8.2
5、编写Dockerfile
1 2 3 4 FROM scratchCOPY ../milvus . CMD ["helm install milvus milvus-3.3.6-custom.tgz \ -n milvus --create-namespace" ]
6、构建集群镜像
1 2 sealos build -f Dockerfile -t docker.io/voidking/milvus:v2.2.0 . sealos inspect docker.io/voidking/milvus:v2.2.0
6. 使用Milvus集群镜像6.1. 自定义安装Milvus1 2 3 4 5 6 sealos run docker.io/voidking/milvus:v2.2.0 --cmd="helm install milvus milvus-3.3.6-custom.tgz \ -n milvus --create-namespace \ --set service.type=NodePort \ --set metrics.serviceMonitor.enabled=true" kubectl get all -n milvus
6.2. 上传集群镜像上传到公共镜像仓库
1 2 3 4 sealos push docker.io/voidking/milvus:v2.2.0 sealos tag docker.io/voidking/milvus:v2.2.0 hub.sealos.cn/voidking/milvus:v2.2.0 sealos login -k config.yml hub.sealos.cn sealos push hub.sealos.cn/voidking/milvus:v2.2.0
上传到私有镜像仓库
1 2 3 sealos tag docker.io/voidking/milvus:v2.2.0 harbor.voidking.com/sealos/milvus:v2.2.0 sealos login harbor.voidking.com sealos push harbor.voidking.com/sealos/milvus:v2.2.0