Kubernetes 与 Helm 部署
Kubernetes 和 Helm 部署
相关源文件
本章引用的主要源码文件:
.github/workflows/release.yml.github/workflows/tests.ymlDockerfileDockerfile.depsdocker/docker-compose-base.ymldocker/infinity_conf.tomldownload_deps.pyhelm/.helmignorehelm/Chart.yamlhelm/README.mdhelm/templates/_helpers.tplhelm/templates/elasticsearch-config.yamlhelm/templates/elasticsearch.yamlhelm/templates/env.yamlhelm/templates/infinity.yamlhelm/templates/ingress.yamlhelm/templates/minio.yamlhelm/templates/mysql-config.yamlhelm/templates/mysql.yamlhelm/templates/opensearch-config.yamlhelm/templates/opensearch.yamlhelm/templates/ragflow.yamlhelm/templates/ragflow_config.yamlhelm/templates/redis.yamlhelm/templates/tests/test-connection.yamlhelm/values.yamlpyproject.tomlsdk/python/pyproject.tomlsdk/python/uv.lockuv.lock
RAGFlow Helm Chart 提供了一种生产就绪的编排机制,用于将完整的 RAG 引擎部署到 Kubernetes 集群上。它通过 values.yaml 提供统一的配置接口,抽象了管理多个异构持久化层(MySQL、Redis、MinIO)和文档检索引擎(Infinity、Elasticsearch 或 OpenSearch)的复杂性。
部署架构
Helm 部署镜像了 RAGFlow 的多层架构,将容器服务转换为 Kubernetes 工作负载。主要的应用逻辑位于 ragflow 部署中,它与一组有状态服务通信,这些服务通常部署为 StatefulSets,以确保数据持久性和稳定的网络标识符。
代码到系统的映射
下图将 Kubernetes 资源定义映射到核心系统组件及其对应的容器配置。
图:Kubernetes 资源到代码实体的映射
来源: helm/values.yaml:13-123, helm/templates/ragflow.yaml:1-100, helm/templates/ragflow.yaml:67-71
Helm Chart 结构
该 Chart 被组织成多个模板,用于处理核心 RAGFlow 应用及其强制依赖项。
| 组件 | 资源类型 | 用途 |
|---|---|---|
| RAGFlow | Deployment | 主应用服务器和任务执行器。包含 Nginx 边车逻辑和可选的 Admin Server helm/templates/ragflow.yaml:2-56。 |
| Infinity | StatefulSet | 用于向量和全文搜索的 AI 原生数据库。默认文档引擎 helm/values.yaml:20-20, helm/values.yaml:124-138。 |
| MySQL | StatefulSet | 元数据的关系型存储。使用 mysql:8.0.39 helm/values.yaml:209-214。 |
| Redis | StatefulSet | 使用 valkey/valkey:8 进行任务排队(Redis Streams)和缓存 helm/values.yaml:225-231。 |
| MinIO | StatefulSet | 用于原始文档的 S3 兼容对象存储 helm/values.yaml:193-208。 |
| Elasticsearch | StatefulSet | 备选文档引擎(版本 8.11.3)helm/values.yaml:139-165。 |
数据流与服务交互
该部署确保 Python 后端和任务执行器能够通过从 env-config 密钥注入的环境变量,一致地访问存储层 helm/templates/ragflow.yaml:77-79。
图:Helm 服务互联
来源: helm/templates/ragflow.yaml:92-149, helm/values.yaml:13-60, docker/docker-compose-base.yml:1-230
配置与自定义
values.yaml 接口
values.yaml 文件充当主要配置源,直接映射到 RAGFlow 容器所需的环境变量 helm/values.yaml:1-12。关键配置区域包括:
- 文档引擎选择:用户可以通过设置
env.DOC_ENGINE在infinity、elasticsearch或opensearch之间切换helm/values.yaml:13-21。 - 服务覆盖:
ragflow.service_conf块允许用户为容器内部的local.service_conf.yaml提供 YAML 格式的覆盖配置helm/values.yaml:87-92。 - 大语言模型(LLM)工厂:可以通过覆盖
llm_factories块来注册自定义的大语言模型(LLM)提供商,该块会被挂载到/ragflow/conf/llm_factories.jsonhelm/templates/ragflow.yaml:72-76。
存储与持久化
持久化通过 PersistentVolumeClaims 进行管理。该 Chart 支持为每个后端服务设置特定的 storageClassName 和 capacity helm/values.yaml:130-132。对于 Redis,如果使用 Kubernetes 1.32+ 版本,可以配置 PVC 的 retentionPolicy helm/values.yaml:237-241。
Ingress 与网络
ingress.yaml 模板提供了标准路由。请注意,Ingress 控制器中的 client_max_body_size 应与 MAX_CONTENT_LENGTH(默认 128M)匹配,以支持大文件上传 helm/values.yaml:66-70。ragflow 部署暴露了三个端口:
80(http):主 Web 界面。9380(http-api):后端 API。9381(admin):管理服务(通过--enable-adminserver参数启用)helm/templates/ragflow.yaml:44-56。
资源管理
该 Chart 允许对资源请求和限制进行精细控制。为生产环境中的重负载组件提供了默认配置:
- Elasticsearch/OpenSearch:默认请求 4 个 CPU 和 16Gi 内存
helm/values.yaml:160-162,helm/values.yaml:187-189。 - Redis/Valkey:配置了
maxmemory限制为 128mb 和allkeys-lru逐出策略helm/templates/redis.yaml:63-63。 - Infinity:默认存储容量设置为 5Gi
helm/values.yaml:132-132。
构建与依赖集成
Kubernetes 部署依赖于通过项目 Dockerfile Dockerfile:1-152 构建的镜像。构建过程利用 uv 进行高性能的 Python 依赖管理 Dockerfile:68-81,并包含预下载的资源,例如 nltk_data 和来自 HuggingFace 的特定模型快照 Dockerfile:10-23。
来源:
helm/values.yaml:1-266helm/templates/ragflow.yaml:1-150helm/templates/redis.yaml:1-135docker/docker-compose-base.yml:1-230Dockerfile:1-152