基于KubeSphere平台快速搭建单节点向量数据库Milvus

KubeSphere是什么

KubeSphere 是一个在 Kubernetes 之上构建的、以应用为中心的多租户容器平台,完全开源,由社区驱动与开发124。它提供全栈的 IT 自动化运维能力,旨在简化企业的 DevOps 工作流,并帮助企业快速构建强大且功能丰富的容器云平台。功能强大、易用性高的开源 Kubernetes 容器云 PaaS 平台,能够帮助企业快速构建、管理和运维云原生应用,提升 DevOps 效率,降低运维复杂度,适用于各类规模的企业和团队。

如何快速通过可视化界面搭建项目数据库Milvus

采用K8s平台,可以通过镜像网站: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

需要对启动命令进行专门配置:

shell 复制代码
/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
    • 这是 etcd 可执行程序的路径,表示启动 etcd 服务。
  • --name=etcd-0
    • 为当前 etcd 节点指定一个名称,集群内唯一,便于管理和识别节点23
  • --data-dir=/var/lib/etcd
    • 指定 etcd 数据存储的目录,所有键值数据、集群状态和元数据都保存在这里23
  • --listen-client-urls=http://0.0.0.0:2379
    • 指定 etcd 监听客户端请求的地址和端口,0.0.0.0 表示监听所有网络接口,客户端可以通过任意 IP 访问本节点的 2379 端口37
    • 如果不配置,默认只监听本地回环地址 (127.0.0.1:2379),外部客户端无法访问。
  • --advertise-client-urls=dev-etcd-shanghai.dev-shanghai.svc.cluster.local:2379
    • 指定 etcd 向集群其他成员和客户端通告的客户端访问地址,通常使用集群内部域名或固定 IP,便于其他节点和客户端正确连接78
    • 如果不配置,客户端和其他节点可能无法正确连接到本节点,导致集群通信异常

配置完成之后直接等待容器启动即可,etcd服务不需要配置额外的对外暴露

部署minio中间件

采用的国内镜像源地址:swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/minio/minio:RELEASE.2025-04-22T22-12-26Z

直接使用默认的容器镜像端口即可

启动命令的详细概述

命令

shell 复制代码
/bin/sh,-c

参数

shell 复制代码
minio server /data --console-address :9090

对上述命令的详细解释:

在 Kubernetes(k8s)中配置 MinIO 时,常见的启动命令形式如下:

shell 复制代码
command: ["/bin/sh", "-c", "minio server /data --console-address :9090"]
  • /bin/sh, -c 的作用
    • 在 Kubernetes YAML 中,command 字段默认是直接执行命令,但如果命令比较复杂(如需要环境变量、管道、重定向等),直接写命令字符串会被解析为单个命令参数,导致执行失败。
    • 使用 /bin/sh -c 可以让 Kubernetes 把后面的字符串整体作为 Shell 脚本执行,支持更多的 Shell 语法和变量替换。
  • minio server /data --console-address :9090
    • /data 是 MinIO 的数据目录,必须指定。
    • --console-address :9090 显式指定 Console 端口,确保 Web 管理界面可以通过固定端口访问,便于暴露服务和调试.

部署milvus向量数据库

采用的国内镜像源地址:swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/milvusdb/milvus:v2.5.9

下述两处端口指定时参考官方文档的docker-compose文件,进行配置,尝试过多种镜像都不能出现如上述两个中间件一样的使用默认镜像端口按钮

配置对应的系统名称和环境变量

配置完成需要暴露对外端口

命令

shell 复制代码
/tini,--

参数

shell 复制代码
milvus,run,standalone

环境变量k-v值

ETCD_ENDPOINTS dev-etcd-shanghai.dev-shanghai:2379
MINIO_ADDRESS dev-minio-shanghai.dev-shanghai:9000

上述命令的详细解释

在 Kubernetes (K8s) 中启动 Milvus 时,命令行中常见的启动命令格式是:

shell 复制代码
/tini -- milvus run standalone

这里各部分的作用如下:

  1. /tini /tini 是一个小型的 init 进程,常用于容器环境中作为 PID 1 进程,负责正确地处理信号转发和僵尸进程回收,保证容器内的主进程(这里是 Milvus)能优雅启动和退出。它不是 Milvus 自身的命令,而是容器启动时的辅助工具,确保 Milvus 进程管理更稳定。
  2. -- 这是一个常见的命令行参数分隔符,告诉 /tini 后面的参数不是给 /tini 本身的,而是传递给后面的程序(即 milvus)的参数。
  3. milvus run standalone 这是启动 Milvus 的命令,其中:
    • run 是 Milvus 的启动命令,表示启动 Milvus 服务。
    • standalone 是指定启动模式,表示以单机模式启动 Milvus,即所有 Milvus 的组件(rootcoord、datacoord、querycoord、indexcoord、proxy 等)都在一个进程或节点上运行,而不是分布式多节点模式。

根据 Milvus 源码和启动逻辑分析,milvus run standalone 命令会触发 Milvus 启动所有核心组件,适合开发测试或资源有限的场景。如果不配置或不使用该命令,Milvus 将不会启动任何服务组件,容器内 Milvus 进程不会运行,服务不可用2

如果省略 /tini,容器内进程可能无法正确处理信号和回收子进程,导致容器退出时不能优雅关闭 Milvus,可能出现僵尸进程或信号处理异常。

如果不加 run standalone 参数,Milvus 不知道要启动哪个组件或以何种模式启动,默认不会启动服务,或者会打印帮助信息并退出。

配置环境变量不用多说就是需要指定好中间件地址,不然访问不了。为什么配置上述的url前缀,我已etcd为例进行解释:

完成上述配置就基本完成,最后部署一个Milvus可视化管理工具

部署attu

部署这个没啥特别需要说明的直接配置镜像然后暴露对外服务进行访问即可

部署完成效果展示

总结

  1. 上述配置没有配置数据卷挂在因此不适合生产环境使用
  2. 单点节点配置也不是很规范
相关推荐
why技术1 小时前
翻译翻译,什么叫“编程专用”的显示器?
前端·后端
野生技术架构师2 小时前
SpringBoot集成Tess4j :低成本解锁OCR 图片识别能力
spring boot·后端·ocr
天天摸鱼的java工程师2 小时前
要在 Spring IoC 容器构建完毕之后执行一些逻辑,怎么实现
后端
程序猿小D2 小时前
第25节 Node.js 断言测试
后端·node.js·log4j·编辑器·vim·apache·restful
shengjk13 小时前
一文搞懂 TCP TCP/IP 和 TCP/IP网络分层之间的联系和区别
后端
述雾学java4 小时前
Spring Boot + Vue 前后端分离项目解决跨域问题详解
vue.js·spring boot·后端
酷爱码4 小时前
Spring Boot 中实现 HTTPS 加密通信及常见问题排查指南
spring boot·后端·https
寒冰碧海4 小时前
Spring Boot循环依赖全场景解析与终极解决方案
java·spring boot·后端
bing_1584 小时前
Spring Boot 如何自动配置 MongoDB 连接?可以自定义哪些配置?
spring boot·后端·mongodb