title: 基于KubeSphere平台快速搭建单节点向量数据库Milvus🔥 date: 2025-6-10 categories: - Milvus tags: - Milvus - KubeSphere sticky: 1
KubeSphere是什么
KubeSphere 是一个在 Kubernetes 之上构建的、以应用为中心的多租户容器平台,完全开源,由社区驱动与开发124。它提供全栈的 IT 自动化运维能力,旨在简化企业的 DevOps 工作流,并帮助企业快速构建强大且功能丰富的容器云平台。功能强大、易用性高的开源 Kubernetes 容器云 PaaS 平台,能够帮助企业快速构建、管理和运维云原生应用,提升 DevOps 效率,降低运维复杂度,适用于各类规模的企业和团队。
如何快速通过可视化界面搭建项目数据库Milvus
采用K8s平台,可以通过镜像网站: https://docker.aityp.com/ 下载必须的镜像,etcd、milvus、minio。使用时需要确定下载镜像对应宿主机处理器的版本进行下载不然无法成功运行镜像容器。
本次搭建的宿主机处理器为amd架构因此下载时需要筛选对应的架构版本镜像下载
部署etcd中间件
本次采用etcd国内镜像地址:swr.cn-north-4.myhuaweicloud.com/ddn-k8s/registry.k8s.io/etcd:3.5.5-0
需要对启动命令进行专门配置:
/usr/local/bin/etcd,--name=etcd-0,--data-dir=/var/lib/etcd,--listen-client-urls=http://0.0.0.0:2379,--advertise-client-urls=http://dev-etcd-shanghai.dev-shanghai.svc.cluster.local:2379
对上述指令进行详细解释:
-
/usr/local/bin/etcd
<ul style="margin-left:0; margin-right:0"> <li> <p style="margin-left:.5rem; margin-right:0"><span>这是 etcd 可执行程序的路径,表示启动 etcd 服务。</span> </li> </ul> </li> <li> <p style="margin-left:.5rem; margin-right:0"><span><strong style="color:#dedede"><span>--name=etcd-0</span></strong></span> <ul style="margin-left:0; margin-right:0"> <li> <p style="margin-left:.5rem; margin-right:0"><span>为当前 etcd 节点指定一个名称,集群内唯一,便于管理和识别节点</span><span><a href="https://monchickey.com/post/2023/09/24/etcd-cluster-installation/"><span>2</span></a></span><span><a href="https://www.kancloud.cn/pshizhsysu/middleware/2794721"><span>3</span></a></span><span>。</span> </li> </ul> </li> <li> <p style="margin-left:.5rem; margin-right:0"><span><strong style="color:#dedede"><span>--data-dir=/var/lib/etcd</span></strong></span> <ul style="margin-left:0; margin-right:0"> <li> <p style="margin-left:.5rem; margin-right:0"><span>指定 etcd 数据存储的目录,所有键值数据、集群状态和元数据都保存在这里</span><span><a href="https://monchickey.com/post/2023/09/24/etcd-cluster-installation/"><span>2</span></a></span><span><a href="https://www.kancloud.cn/pshizhsysu/middleware/2794721"><span>3</span></a></span><span>。</span> </li> </ul> </li> <li> <p style="margin-left:.5rem; margin-right:0"><span><strong style="color:#dedede"><span>--listen-client-urls=</span><span><a href="http://0.0.0.0:2379/"><span>http://0.0.0.0:2379</span></a></span></strong></span> <ul style="margin-left:0; margin-right:0"> <li> <p style="margin-left:.5rem; margin-right:0"><span>指定 etcd 监听客户端请求的地址和端口,</span><span><code>0.0.0.0</code></span><span> 表示监听所有网络接口,客户端可以通过任意 IP 访问本节点的 2379 端口</span><span><a href="https://www.kancloud.cn/pshizhsysu/middleware/2794721"><span>3</span></a></span><span><a href="https://cloud.tencent.com/developer/article/1644574"><span>7</span></a></span><span>。</span> </li> <li> <p style="margin-left:.5rem; margin-right:0"><span>如果不配置,默认只监听本地回环地址 (</span><span><code>127.0.0.1:2379</code></span><span>),外部客户端无法访问。</span> </li> </ul> </li> <li> <p style="margin-left:.5rem; margin-right:0"><span><strong style="color:#dedede"><span>--advertise-client-urls=</span><span><a href="http://dev-etcd-shanghai.dev-shanghai.svc.cluster.local:2379/"><span>http://dev-etcd-shanghai.dev-shanghai.svc.cluster.local:2379</span></a></span></strong></span> <ul style="margin-left:0; margin-right:0"> <li> <p style="margin-left:.5rem; margin-right:0"><span>指定 etcd 向集群其他成员和客户端通告的客户端访问地址,通常使用集群内部域名或固定 IP,便于其他节点和客户端正确连接</span><span><a href="https://cloud.tencent.com/developer/article/1644574"><span>7</span></a></span><span><a href="http://www.zhaowenyu.com/etcd-doc/command/etcd.html"><span>8</span></a></span><span>。</span> </li> <li> <p style="margin-left:.5rem; margin-right:0"><span>如果不配置,客户端和其他节点可能无法正确连接到本节点,导致集群通信异常</span> </li> </ul> </li>
配置完成之后直接等待容器启动即可,etcd服务不需要配置额外的对外暴露
部署minio中间件
采用的国内镜像源地址:swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/minio/minio:RELEASE.2025-04-22T22-12-26Z
直接使用默认的容器镜像端口即可
启动命令的详细概述
命令
/bin/sh,-c
参数
minio server /data --console-address :9090
对上述命令的详细解释:
在 Kubernetes(k8s)中配置 MinIO 时,常见的启动命令形式如下:
command: ["/bin/sh", "-c", "minio server /data --console-address :9090"]
-
/bin/sh, -c 的作用
<ul style="margin-left:0; margin-right:0"> <li> <p style="margin-left:.5rem; margin-right:0"><span>在 Kubernetes YAML 中,</span><span><code>command</code></span><span> 字段默认是直接执行命令,但如果命令比较复杂(如需要环境变量、管道、重定向等),直接写命令字符串会被解析为单个命令参数,导致执行失败。</span> </li> <li> <p style="margin-left:.5rem; margin-right:0"><span>使用 </span><span><code>/bin/sh -c</code></span><span> 可以让 Kubernetes 把后面的字符串整体作为 Shell 脚本执行,支持更多的 Shell 语法和变量替换。</span> </li> </ul> </li> <li> <p style="margin-left:.5rem; margin-right:0"><span><strong style="color:#dedede"><span>minio server /data --console-address :9090</span></strong></span> <ul style="margin-left:0; margin-right:0"> <li> <p style="margin-left:.5rem; margin-right:0"><span><code>/data</code></span><span> 是 MinIO 的数据目录,必须指定。</span> </li> <li> <p style="margin-left:.5rem; margin-right:0"><span><code>--console-address :9090</code></span><span> 显式指定 Console 端口,确保 Web 管理界面可以通过固定端口访问,便于暴露服务和调试.</span> </li> </ul> </li>
部署milvus向量数据库
采用的国内镜像源地址:swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/milvusdb/milvus:v2.5.9
下述两处端口指定时参考官方文档的docker-compose文件,进行配置,尝试过多种镜像都不能出现如上述两个中间件一样的使用默认镜像端口按钮
配置对应的系统名称和环境变量
配置完成需要暴露对外端口
命令
/tini,--
参数
milvus,run,standalone
环境变量k-v值
ETCD_ENDPOINTS | dev-etcd-shanghai.dev-shanghai:2379 |
---|---|
MINIO_ADDRESS | dev-minio-shanghai.dev-shanghai:9000 |
上述命令的详细解释
在 Kubernetes (K8s) 中启动 Milvus 时,命令行中常见的启动命令格式是:
/tini -- milvus run standalone
这里各部分的作用如下:
-
/tini
/tini
是一个小型的 init 进程,常用于容器环境中作为 PID 1 进程,负责正确地处理信号转发和僵尸进程回收,保证容器内的主进程(这里是 Milvus)能优雅启动和退出。它不是 Milvus 自身的命令,而是容器启动时的辅助工具,确保 Milvus 进程管理更稳定。 -
--
这是一个常见的命令行参数分隔符,告诉/tini
后面的参数不是给/tini
本身的,而是传递给后面的程序(即milvus
)的参数。 -
milvus run standalone
这是启动 Milvus 的命令,其中:/usr/local/bin/etcd,--name=etcd-0,--data-dir=/var/lib/etcd,--listen-client-urls=http://0.0.0.0:2379,--advertise-client-urls=http://dev-etcd-shanghai.dev-shanghai.svc.cluster.local:23790
根据 Milvus 源码和启动逻辑分析,milvus run standalone
命令会触发 Milvus 启动所有核心组件,适合开发测试或资源有限的场景。如果不配置或不使用该命令,Milvus 将不会启动任何服务组件,容器内 Milvus 进程不会运行,服务不可用2。
如果省略 /tini
,容器内进程可能无法正确处理信号和回收子进程,导致容器退出时不能优雅关闭 Milvus,可能出现僵尸进程或信号处理异常。
如果不加 run standalone
参数,Milvus 不知道要启动哪个组件或以何种模式启动,默认不会启动服务,或者会打印帮助信息并退出。
配置环境变量不用多说就是需要指定好中间件地址,不然访问不了。为什么配置上述的url前缀,我已etcd为例进行解释:
完成上述配置就基本完成,最后部署一个Milvus可视化管理工具
部署attu
部署这个没啥特别需要说明的直接配置镜像然后暴露对外服务进行访问即可
部署完成效果展示
总结
-
上述配置没有配置数据卷挂在因此不适合生产环境使用
-
单点节点配置也不是很规范
还没有评论,来说两句吧...