ragflow k8s部署详细过程

一、概述

ragflow官方提供的安装方式是docker-compose方式部署的,单机运行。

k8s部署方式,暂未提供。

不过我们可以通过工具,结合docker-compose.yaml,来推演出对应服务的yaml进行部署。

过程有点曲折,结果很美好。

接下来,本文将使用ragflow-0.18.0,来进行演示详细部署过程。

二、准备工作

前提条件

硬件

CPU :至少 4 核。

内存 :至少 16GB。

磁盘 :至少 50GB。

操作系统:推荐 Ubuntu 22.04+ 

软件

k8s,自行搭建,或者使用云厂商提供的k8s,都可以。

Harbor,参考文章:ubuntu 22.04安装harbor

如果有现成的私有仓库,可以忽略

NFS,参考文章:ubuntu 22.04安装NFS

如果有现成的NFS,可以忽略

符合以上条件,就可以部署了

镜像推送

下载镜像

docker pull elasticsearch:8.11.3
docker pull quay.io/minio/minio:RELEASE.2023-12-20T01-00-02Z
docker pull mysql:8.0.39
docker pull valkey/valkey:8
docker pull infiniflow/ragflow:v0.18.0-slim

推送镜像

这里使用shell脚本完成

#!/bin/bash

images="elasticsearch:8.11.3
quay.io/minio/minio:RELEASE.2023-12-20T01-00-02Z
mysql:8.0.39
valkey/valkey:8
infiniflow/ragflow:v0.18.0-slim"

# 遍历镜像列表,并推送到harbor
for line in $images; do
    #echo "$line"
    docker tag $line harbor.qq.cn:8083/ragflow/$line
    docker push harbor.qq.cn:8083/ragflow/$line
done

注意修改harbor的的地址为实际访问地址

登录到harbor,查看镜像

创建命名空间以及密钥

创建命名空间ragflow

kubectl create namespace  ragflow

创建拉取镜像需要的密钥

kubectl create secret docker-registry harbor-key --docker-server=harbor.qq.com:8083 --docker-username=devops --docker-password=1sB5r9UShgK5 --namespace=ragflow

注意:修改harbor地址,用户名,密码。

下载部署yaml

yaml已经写好了,推送到我个人的github,地址:GitHub - 987334176/ragflow-k8s: ragflow k8s部署

下载项目后,进入文件夹0.18.0

目录结构

env --> 全局环境变量
pvc --> 所有组件,统一使用一个pvc来进行持久化存储
databases --> 数据库相关:mysql,redis
middleware --> 中间件相关:elasticsearch,minio
services --> 服务相关:ragflow

三、创建全局环境变量

这里有30个多个变量,直接一键运行

kubectl apply -f env/env.yaml

四、创建pv和pvc

创建storageClass,因为pv和pvc必须是同一个storageClass才能绑定成功

kubectl apply -f pvc/storageClass.yaml

注意:修改NFS 服务端的共享路径,provisioner必须指定为nfs-client

nfs-client是一个外部的动态存储供给器(Provisioner),用于在 Kubernetes 集群中动态创建和管理基于 NFS(Network File System)的 PersistentVolumes(PV)。它是 Kubernetes 社区提供的一个解决方案,用于支持 NFS 存储的动态供给。

创建pv,pvc。注意:这里的pv是自建的NFS,请根据实际情况修改

kubectl apply -f pvc/pv.yaml
kubectl apply -f pvc/pvc.yaml

查看pvc状态,注意:请确保pvc状态为Bound

# kubectl -n ragflow get pvc
NAME       STATUS   VOLUME   CAPACITY   ACCESS MODES   STORAGECLASS   VOLUMEATTRIBUTESCLASS   AGE
ragflow-pvc   Bound    ragflow     10Gi       RWX            nfs-storage    <unset>                 12m

服务器已经挂载好了NFS,进入到NFS根目录

cd /mnt/nfs_share

创建ragflow相关持久化文件,并设置权限

mkdir -p ragflow/volumes/elasticsearch/data
mkdir -p ragflow/volumes/minio/data
mkdir -p ragflow/volumes/mysql/data
mkdir -p ragflow/volumes/redis/data
mkdir -p ragflow/volumes/ragflow/logs
chmod 777 -R ragflow

五、数据库相关

MySQL

MySQL 是一个广泛使用的开源关系型数据库管理系统(RDBMS),它使用 SQL(结构化查询语言)作为与数据库交互的标准语言。

修改文件mysql-StatefulSet.yaml

vi databases/mysql/mysql-StatefulSet.yaml

修改红色部分,增加了密钥,改了镜像地址

    spec:
      imagePullSecrets:
        - name: harbor-key
...
          image: harbor.qq.com:8083/ragflow/mysql:8.0.39

发布应用,注意执行顺序,先执行configMap,再执行下面的。

kubectl apply -f databases/mysql/mysql-cm1-configmap.yaml
kubectl apply -f databases/mysql/mysql-StatefulSet.yaml
kubectl apply -f databases/mysql/mysql-Service.yaml

等待1分钟,查看pod,确保是Running状态

# kubectl -n ragflow get pods|grep mysql
mysql-0   1/1     Running   1 (13m ago)   14m

查看mysql日志

# kubectl -n ragflow logs -f mysql-0

...
2025-04-28T02:32:18.925930Z 0 [System] [MY-010931] [Server] /usr/sbin/mysqld: ready for connections. Version: '8.0.39'  socket: '/var/run/mysqld/mysqld.sock'  port: 3306  MySQL Community Server - GPL.
...

出现3306表示mysql启动正常。

测试mysql登录

# kubectl -n ragflow exec -it mysql-0 -- /bin/bash
bash-5.1# mysql -h localhost -u root -pinfini1#raGflow
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.0.39 MySQL Community Server - GPL

Copyright (c) 2000, 2024, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| rag_flow           |
| sys                |
+--------------------+
5 rows in set (0.00 sec)

mysql> 

能正常显示数据库列表,就说明用户登录正常。

注意:mysql8默认是启动了密码复杂性校验的,因为官方给的密码,太简单了。所以在全局变量中修改了root密码,否则mysql启动会失败。

因为这个问题,搞了半天,一直启动失败,要崩溃了。所以后来没办法,直接改了root密码,就正常了。

Valkey

Valkey 是 Redis 的开源替代方案,由 Linux 基金会推出,得到了 AWS、Google Cloud 等公司的支持。

Valkey 是根据 BSD 许可发布的,是一款高性能键 / 值数据存储,支持各种负载,包括缓存、消息队列,也可用作主数据库。Valkey 可以作为独立守护进程或在集群内运行,有复制和高可用性选项。

修改文件redis-StatefulSet.yaml

vi databases/redis/redis-StatefulSet.yaml

修改红色部分,增加了密钥,改了镜像地址

    spec:
      imagePullSecrets:
        - name: harbor-key
...
          image: harbor.qq.com:8083/ragflow/valkey/valkey:8

发布应用

kubectl apply -f databases/redis/redis-StatefulSet.yaml
kubectl apply -f databases/redis/redis-Service.yaml

等待1分钟,查看pod,确保是Running状态

# kubectl -n ragflow get pods|grep redis
redis-0   1/1     Running   0             2m53s

查看redis日志

# kubectl -n ragflow logs -f redis-0
1:C 28 Apr 2025 10:43:41.677 * oO0OoO0OoO0Oo Valkey is starting oO0OoO0OoO0Oo
1:C 28 Apr 2025 10:43:41.677 * Valkey version=8.0.2, bits=64, commit=00000000, modified=0, pid=1, just started
1:C 28 Apr 2025 10:43:41.677 * Configuration loaded
1:M 28 Apr 2025 10:43:41.678 * monotonic clock: POSIX clock_gettime
1:M 28 Apr 2025 10:43:41.678 * Running mode=standalone, port=6379.
1:M 28 Apr 2025 10:43:41.765 * Server initialized
1:M 28 Apr 2025 10:43:41.767 * Ready to accept connections tcp

出现6379表示redis启动正常。

六、中间件相关 

Elasticsearch

Elasticsearch 是一个开源的、基于 Lucene 的分布式全文搜索引擎,提供了强大的搜索和数据分析能力。它采用倒排索引技术,能够快速高效地处理大规模数据的搜索和分析,广泛应用于日志分析、推荐系统、企业级搜索等场景。

修改文件elasticsearch-StatefulSet.yaml

vi middleware/elasticsearch/elasticsearch-StatefulSet.yaml 

修改红色部分,增加了密钥,改了镜像地址

    spec:
      imagePullSecrets:
        - name: harbor-key
...
          image: harbor.qq.com:8083/ragflow/elasticsearch:8.11.3

发布应用

kubectl apply -f middleware/elasticsearch/elasticsearch-StatefulSet.yaml
kubectl apply -f middleware/elasticsearch/elasticsearch-Service.yaml

等待2分钟,查看pod,确保是Running状态

# kubectl -n ragflow get pods|grep es
es01-0    1/1     Running   0             112s

查看es日志

# kubectl -n ragflow logs -f es01-0
...
{"@timestamp":"2025-04-28T02:49:28.858Z", "log.level": "INFO", "message":"publish_address {172.16.0.220:9200}, bound_addresses {[::]:9200}", "ecs.version": "1.2.0","service.name":"ES_ECS","event.dataset":"elasticsearch.server","process.thread.name":"main","log.logger":"org.elasticsearch.http.AbstractHttpServerTransport","elasticsearch.cluster.uuid":"xBJZ-YKRSTSyRMdPZiwltg","elasticsearch.node.id":"mLrauOXtQdWBGROGXIfd2Q","elasticsearch.node.name":"es01","elasticsearch.cluster.name":"docker-cluster"}
...

出现9200表示Elasticsearch启动正常。

只要没有明显的错误就行

MinIO

MinIO 是一个高性能、开源的对象存储服务,兼容亚马逊 S3 云存储服务接口,常用于存储非结构化数据,如图片、视频、日志文件、备份数据等。

修改文件minio-StatefulSet.yaml

vi middleware/minio/minio-StatefulSet.yaml

修改红色部分,增加了密钥,改了镜像地址

    spec:
      imagePullSecrets:
        - name: harbor-key
...
          image: harbor.bzmaster.cn:8083/ragflow/quay.io/minio/minio:RELEASE.2023-12-20T01-00-02Z

发布应用

kubectl apply -f middleware/minio/minio-StatefulSet.yaml
kubectl apply -f middleware/minio/minio-Service.yaml

等待1分钟,查看pod,确保是Running状态

# kubectl -n ragflow get pods|grep minio
minio-0   1/1     Running   0             106s

查看minio日志

# kubectl -n ragflow logs -f minio-0
Formatting 1st pool, 1 set(s), 1 drives per set.
WARNING: Host local has more than 0 drives of set. A host failure will result in data becoming unavailable.

 You are running an older version of MinIO released 1 year before the latest release 
 Update: Run `mc admin update` 


MinIO Object Storage Server
Copyright: 2015-2023 MinIO, Inc.
License: GNU AGPLv3 <https://www.gnu.org/licenses/agpl-3.0.html>
Version: RELEASE.2023-12-20T01-00-02Z (go1.21.5 linux/amd64)

Status:         1 Online, 0 Offline. 
S3-API: http://172.16.0.221:9000  http://127.0.0.1:9000     
Console: http://172.16.0.221:9001 http://127.0.0.1:9001   

Documentation: https://min.io/docs/minio/linux/index.html
Warning: The standard parity is set to 0. This can lead to data loss.

七、服务相关

Ragflow

Ragflow 是一款基于深度文档理解构建的开源 RAG(Retrieval-Augmented Generation)引擎。它旨在为各种规模的企业及个人提供一套精简的 RAG 工作流程,结合大语言模型(LLM)针对用户各类不同的复杂格式数据提供可靠的问答以及有理有据的引用。

修改文件ragflow-Deployment.yaml

vi services/ragflow/ragflow-Deployment.yaml

修改红色部分,增加了密钥,改了镜像地址

    spec:
      imagePullSecrets:
        - name: harbor-key
...
          image: harbor.bzmaster.cn:8083/ragflow/infiniflow/ragflow:v0.18.0-slim

发布应用,注意执行顺序,先执行configMap,再执行下面的。

kubectl apply -f services/ragflow/ragflow-cm1-configmap.yaml
kubectl apply -f services/ragflow/ragflow-cm2-configmap.yaml
kubectl apply -f services/ragflow/ragflow-cm3-configmap.yaml
kubectl apply -f services/ragflow/ragflow-cm5-configmap.yaml
kubectl apply -f services/ragflow/ragflow-Deployment.yaml
kubectl apply -f services/ragflow/ragflow-Service.yaml

等待6分钟,这个镜像特别大,请耐心等待!

查看pod,确保是Running状态

# kubectl -n ragflow get pods|grep ragflow
ragflow-6bddc85f97-6xpkd   1/1     Running   0             6m48s

查看ragflow日志

# kubectl -n ragflow logs -f ragflow-6bddc85f97-6xpkd
...
2025-04-28 15:06:23,972 INFO     15 
        ____   ___    ______ ______ __               
       / __ \ /   |  / ____// ____// /____  _      __
      / /_/ // /| | / / __ / /_   / // __ \| | /| / /
     / _, _// ___ |/ /_/ // __/  / // /_/ /| |/ |/ / 
    /_/ |_|/_/  |_|\____//_/    /_/ \____/ |__/|__/                             

    
2025-04-28 15:06:24,063 INFO     15 RAGFlow version: v0.18.0 slim
2025-04-28 15:06:24,068 INFO     15 project base: /ragflow
2025-04-28 15:06:24,085 INFO     15 Current configs, from /ragflow/conf/service_conf.yaml:
    ragflow: {'host': '0.0.0.0', 'http_port': 9380}
    mysql: {'name': 'rag_flow', 'user': 'root', 'password': '********', 'host': 'mysql', 'port': 3306, 'max_connections': 100, 'stale_timeout': 30}
    minio: {'user': 'rag_flow', 'password': '********', 'host': 'minio:9000'}
    es: {'hosts': 'http://es01:9200', 'username': 'elastic', 'password': '********'}
    infinity: {'uri': 'infinity:23817', 'db_name': 'default_db'}
    redis: {'db': 1, 'password': '********', 'host': 'redis:6379'}
2025-04-28 15:06:24,164 INFO     15 Use Elasticsearch http://es01:9200 as the doc engine.
2025-04-28 15:06:24,364 INFO     15 GET http://es01:9200/ [status:200 duration:0.195s]
2025-04-28 15:06:24,453 INFO     15 HEAD http://es01:9200/ [status:200 duration:0.076s]
2025-04-28 15:06:24,478 INFO     15 Elasticsearch http://es01:9200 is healthy.
2025-04-28 15:06:24,557 WARNING  15 Load term.freq FAIL!
2025-04-28 15:06:24,656 WARNING  15 Realtime synonym is disabled, since no redis connection.
2025-04-28 15:06:24,678 WARNING  15 Load term.freq FAIL!
2025-04-28 15:06:24,757 WARNING  15 Realtime synonym is disabled, since no redis connection.
2025-04-28 15:06:24,769 INFO     15 MAX_CONTENT_LENGTH: 134217728
2025-04-28 15:06:24,853 INFO     15 MAX_FILE_COUNT_PER_USER: 0
2025-04-28 15:07:23,080 INFO     15 init web data success:33.099204301834106
2025-04-28 15:07:23,163 INFO     15 update_progress lock_value: 054d89b4-835e-415a-b2e3-aa6bd0d64e95
2025-04-28 15:07:23,163 INFO     15 RAGFlow HTTP server start...
2025-04-28 15:07:23,265 INFO     15 WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.
 * Running on all addresses (0.0.0.0)
 * Running on http://127.0.0.1:9380
 * Running on http://172.16.0.227:9380
...

没有明显报错就可以了

之后日志会一直出现RedisDB.queue_info相关信息,日志会刷屏,这个不用管,应该是定时任务。

八、访问ragflow

如果是生产环境,最好是域名访问,则需要添加一条ingress规则,指向到ragflow的svc,端口是80,并做DNS解析,指向到ingress的公网ip。

这里直接使用ragflow的nodeport端口访问

# kubectl -n ragflow get svc|grep ragflow
ragflow   NodePort    192.168.34.159   <none>        9380:31078/TCP,80:31930/TCP,443:31213/TCP,5678:31082/TCP,5679:32741/TCP,9382:30421/TCP   23m

可以看到nodeport对应的端口是31930

查看node节点

# kubectl get node -o wide
NAME       STATUS   ROLES                  AGE   VERSION        INTERNAL-IP   EXTERNAL-IP   OS-IMAGE           KERNEL-VERSION       CONTAINER-RUNTIME
ubuntu-1   Ready    control-plane,master   17h   v1.32.3+k3s1   10.0.2.15     <none>        Ubuntu 22.04 LTS   5.15.0-136-generic   docker://28.0.4

可以看到node节点ip是,10.0.2.15

访问页面:

http://10.0.2.15:31930

点击注册

输入邮箱地址,名称,密码

创建账号成功之后,重新登录

登录成功之后,切换到中文,效果如下:

九、测试ragflow

点击右上角头像-->模型提供商,设置通义千问

 添加成功后,设置系统默认模型

创建知识库

 上传excel文件,设置切片方法

 勾选表格转HTML

 点击解析

解析成功后,点击文件

 就可以看到数据了

 文件上传是保存在minio里面的,登录minio后台就可以看到了。

查看nodeport端口

# kubectl -n ragflow get svc|grep minio
minio     NodePort    192.168.90.129   <none>        9000:31911/TCP,9001:30355/TCP                                                            4h23m

可以看到端口是31911

访问页面:

http://10.0.2.15:31911

输入登录信息

用户名:rag_flow

密码:infini_rag_flow

登录之后,点击最大的

这里就可以看到上传的文件了

ragflow k8s搭建过程,到此结束!

 如何系统的去学习大模型LLM ?

大模型时代,火爆出圈的LLM大模型让程序员们开始重新评估自己的本领。 “AI会取代那些行业?”“谁的饭碗又将不保了?”等问题热议不断。

事实上,抢你饭碗的不是AI,而是会利用AI的人。

科大讯飞、阿里、华为等巨头公司发布AI产品后,很多中小企业也陆续进场!超高年薪,挖掘AI大模型人才! 如今大厂老板们,也更倾向于会AI的人,普通程序员,还有应对的机会吗?

与其焦虑……

不如成为「掌握AI工具的技术人」,毕竟AI时代,谁先尝试,谁就能占得先机!

但是LLM相关的内容很多,现在网上的老课程老教材关于LLM又太少。所以现在小白入门就只能靠自学,学习成本和门槛很高。

基于此,我用做产品的心态来打磨这份大模型教程,深挖痛点并持续修改了近70次后,终于把整个AI大模型的学习门槛,降到了最低!

在这个版本当中:

第一您不需要具备任何算法和数学的基础
第二不要求准备高配置的电脑
第三不必懂Python等任何编程语言

您只需要听我讲,跟着我做即可,为了让学习的道路变得更简单,这份大模型教程已经给大家整理并打包,现在将这份 LLM大模型资料 分享出来:包括LLM大模型书籍、640套大模型行业报告、LLM大模型学习视频、LLM大模型学习路线、开源大模型学习教程等, 😝有需要的小伙伴,可以 扫描下方二维码领取🆓↓↓↓

一、LLM大模型经典书籍

AI大模型已经成为了当今科技领域的一大热点,那以下这些大模型书籍就是非常不错的学习资源。

在这里插入图片描述

二、640套LLM大模型报告合集

这套包含640份报告的合集,涵盖了大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。(几乎涵盖所有行业)
在这里插入图片描述

三、LLM大模型系列视频教程

在这里插入图片描述

四、LLM大模型开源教程(LLaLA/Meta/chatglm/chatgpt)

在这里插入图片描述

五、AI产品经理大模型教程

在这里插入图片描述

LLM大模型学习路线 

阶段1:AI大模型时代的基础理解

  • 目标:了解AI大模型的基本概念、发展历程和核心原理。

  • 内容

    • L1.1 人工智能简述与大模型起源
    • L1.2 大模型与通用人工智能
    • L1.3 GPT模型的发展历程
    • L1.4 模型工程
    • L1.4.1 知识大模型
    • L1.4.2 生产大模型
    • L1.4.3 模型工程方法论
    • L1.4.4 模型工程实践
    • L1.5 GPT应用案例

阶段2:AI大模型API应用开发工程

  • 目标:掌握AI大模型API的使用和开发,以及相关的编程技能。

  • 内容

    • L2.1 API接口
    • L2.1.1 OpenAI API接口
    • L2.1.2 Python接口接入
    • L2.1.3 BOT工具类框架
    • L2.1.4 代码示例
    • L2.2 Prompt框架
    • L2.3 流水线工程
    • L2.4 总结与展望

阶段3:AI大模型应用架构实践

  • 目标:深入理解AI大模型的应用架构,并能够进行私有化部署。

  • 内容

    • L3.1 Agent模型框架
    • L3.2 MetaGPT
    • L3.3 ChatGLM
    • L3.4 LLAMA
    • L3.5 其他大模型介绍

阶段4:AI大模型私有化部署

  • 目标:掌握多种AI大模型的私有化部署,包括多模态和特定领域模型。

  • 内容

    • L4.1 模型私有化部署概述
    • L4.2 模型私有化部署的关键技术
    • L4.3 模型私有化部署的实施步骤
    • L4.4 模型私有化部署的应用场景

这份 LLM大模型资料 包括LLM大模型书籍、640套大模型行业报告、LLM大模型学习视频、LLM大模型学习路线、开源大模型学习教程等, 😝有需要的小伙伴,可以 扫描下方二维码领取🆓↓↓↓

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值