ragflow k8s摆设详细过程

[复制链接]
发表于 2025-9-18 15:44:06 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
一、概述

  ragflow官方提供的安装方式是docker-compose方式摆设的,单机运行。
  k8s摆设方式,暂未提供。
  不外我们可以通过工具,连合docker-compose.yaml,来推演出对应服务的yaml举行摆设。
  过程有点曲折,结果很精美。
  接下来,本文将使用ragflow-0.18.0,来举行演示详细摆设过程。
  二、预备工作

  条件条件

  硬件

  CPU :至少 4 核。
  内存 :至少 16GB。
  磁盘 :至少 50GB。
  操纵体系:保举 Ubuntu 22.04+ 
  软件

  k8s,自行搭建,大概使用云厂商提供的k8s,都可以。
    Harbor,参考文章:       如果有现成的私有堆栈,可以忽略     NFS,参考文章:       如果有现成的NFS,可以忽略   符合以上条件,就可以摆设了
  镜像推送

  下载镜像

   
  1. docker pull elasticsearch:8.11.3
  2. docker pull quay.io/minio/minio:RELEASE.2023-12-20T01-00-02Z
  3. docker pull mysql:8.0.39
  4. docker pull valkey/valkey:8
  5. docker pull infiniflow/ragflow:v0.18.0-slim
复制代码
  推送镜像
  这里使用shell脚本完成
   
  1. #!/bin/bash
  2. images="elasticsearch:8.11.3
  3. quay.io/minio/minio:RELEASE.2023-12-20T01-00-02Z
  4. mysql:8.0.39
  5. valkey/valkey:8
  6. infiniflow/ragflow:v0.18.0-slim"
  7. # 遍历镜像列表,并推送到harbor
  8. for line in $images; do
  9.     #echo "$line"
  10.     docker tag $line harbor.qq.cn:8083/ragflow/$line
  11.     docker push harbor.qq.cn:8083/ragflow/$line
  12. done
复制代码
     注意修改harbor的的地址为实际访问地址
    登录到harbor,查看镜像
  

  创建定名空间以及密钥

  创建定名空间ragflow
   
  1. kubectl create namespace  ragflow
复制代码
  创建拉取镜像必要的密钥
   
  1. 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,地址:https://github.com/987334176/ragflow-k8s
  下载项目后,进入文件夹0.18.0
  目次布局
   
  1. env --> 全局环境变量
  2. pvc --> 所有组件,统一使用一个pvc来进行持久化存储
  3. databases --> 数据库相关:mysql,redis
  4. middleware --> 中间件相关:elasticsearch,minio
  5. services --> 服务相关:ragflow
复制代码
  三、创建全局情况变量

  这里有30个多个变量,直接一键运行
   
  1. kubectl apply -f env/env.yaml
复制代码
  四、创建pv和pvc

  创建storageClass,由于pv和pvc必须是同一个storageClass才气绑定乐成
   
  1. 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,请根据现真相况修改
   
  1. kubectl apply -f pvc/pv.yaml
  2. kubectl apply -f pvc/pvc.yaml
复制代码
  查看pvc状态,注意:请确保pvc状态为Bound
   
  1. # kubectl -n ragflow get pvc
  2. NAME       STATUS   VOLUME   CAPACITY   ACCESS MODES   STORAGECLASS   VOLUMEATTRIBUTESCLASS   AGE
  3. ragflow-pvc   Bound    ragflow     10Gi       RWX            nfs-storage    <unset>                 12m
复制代码
  服务器已经挂载好了NFS,进入到NFS根目次
   
  1. cd /mnt/nfs_share
复制代码
  创建ragflow相关长期化文件,并设置权限
   
  1. mkdir -p ragflow/volumes/elasticsearch/data
  2. mkdir -p ragflow/volumes/minio/data
  3. mkdir -p ragflow/volumes/mysql/data
  4. mkdir -p ragflow/volumes/redis/data
  5. mkdir -p ragflow/volumes/ragflow/logs
  6. chmod 777 -R ragflow
复制代码
  五、数据库相关

  MySQL

  MySQL 是一个广泛使用的开源关系型数据库管理体系(RDBMS),它使用 SQL(布局化查询语言)作为与数据库交互的尺度语言。
  修改文件mysql-StatefulSet.yaml
   
  1. vi databases/mysql/mysql-StatefulSet.yaml
复制代码
  修改赤色部分,增加了密钥,改了镜像地址
   
  1.     spec:
  2.       imagePullSecrets:
  3.         - name: harbor-key
  4. ...
  5.           image: harbor.qq.com:8083/ragflow/mysql:8.0.39
复制代码
  发布应用,注意实行序次,先实行configMap,再实行下面的。
   
  1. kubectl apply -f databases/mysql/mysql-cm1-configmap.yaml
  2. kubectl apply -f databases/mysql/mysql-StatefulSet.yaml
  3. kubectl apply -f databases/mysql/mysql-Service.yaml
复制代码
  等待1分钟,查看pod,确保是Running状态
   
  1. # kubectl -n ragflow get pods|grep mysql
  2. mysql-0   1/1     Running   1 (13m ago)   14m
复制代码
  查看mysql日志日志
   
  1. # kubectl -n ragflow logs -f mysql-0
  2. ...
  3. 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.
  4. ...
复制代码
  出现3306表现mysql启动正常。
  测试mysql登录
   
  1. # kubectl -n ragflow exec -it mysql-0 -- /bin/bash
  2. bash-5.1# mysql -h localhost -u root -pinfini1#raGflow
  3. mysql: [Warning] Using a password on the command line interface can be insecure.
  4. Welcome to the MySQL monitor.  Commands end with ; or \g.
  5. Your MySQL connection id is 8
  6. Server version: 8.0.39 MySQL Community Server - GPL
  7. Copyright (c) 2000, 2024, Oracle and/or its affiliates.
  8. Oracle is a registered trademark of Oracle Corporation and/or its
  9. affiliates. Other names may be trademarks of their respective
  10. owners.
  11. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
  12. mysql> show databases;
  13. +--------------------+
  14. | Database           |
  15. +--------------------+
  16. | information_schema |
  17. | mysql              |
  18. | performance_schema |
  19. | rag_flow           |
  20. | sys                |
  21. +--------------------+
  22. 5 rows in set (0.00 sec)
  23. mysql>
复制代码
  能正常表现数据库列表,就阐明用户登录正常。
  注意:mysql8默认是启动了暗码复杂性校验的,由于官方给的暗码,太简朴了。以是在全局变量中修改了root暗码,否则mysql启动会失败。
  由于这个标题,搞了半天,不绝启动失败,要瓦解了。以是后来没办法,直接改了root暗码,就正常了。
  Valkey

  Valkey 是 Redis 的开源更换方案,由 Linux 基金会推出,得到了 AWS、Google Cloud 等公司的支持。
  Valkey 是根据 BSD 许可发布的,是一款高性能键 / 值数据存储,支持各种负载,包罗缓存、消息队列,也可用作主数据库。Valkey 可以作为独立守卫进程或在集群内运行,有复制和高可用性选项。
  修改文件redis-StatefulSet.yaml
   
  1. vi databases/redis/redis-StatefulSet.yaml
复制代码
  修改赤色部分,增加了密钥,改了镜像地址
   
  1.     spec:
  2.       imagePullSecrets:
  3.         - name: harbor-key
  4. ...
  5.           image: harbor.qq.com:8083/ragflow/valkey/valkey:8
复制代码
  发布应用
   
  1. kubectl apply -f databases/redis/redis-StatefulSet.yaml
  2. kubectl apply -f databases/redis/redis-Service.yaml
复制代码
  等待1分钟,查看pod,确保是Running状态
   
  1. # kubectl -n ragflow get pods|grep redis
  2. redis-0   1/1     Running   0             2m53s
复制代码
  查看redis日志日志
   
  1. # kubectl -n ragflow logs -f redis-0
  2. 1:C 28 Apr 2025 10:43:41.677 * oO0OoO0OoO0Oo Valkey is starting oO0OoO0OoO0Oo
  3. 1:C 28 Apr 2025 10:43:41.677 * Valkey version=8.0.2, bits=64, commit=00000000, modified=0, pid=1, just started
  4. 1:C 28 Apr 2025 10:43:41.677 * Configuration loaded
  5. 1:M 28 Apr 2025 10:43:41.678 * monotonic clock: POSIX clock_gettime
  6. 1:M 28 Apr 2025 10:43:41.678 * Running mode=standalone, port=6379.
  7. 1:M 28 Apr 2025 10:43:41.765 * Server initialized
  8. 1:M 28 Apr 2025 10:43:41.767 * Ready to accept connections tcp
复制代码
  出现6379表现redis启动正常。
  六、中间件相关 

  Elasticsearch

  Elasticsearch 是一个开源的、基于 Lucene 的分布式全文搜索引擎,提供了强大的搜索和数据分析本领。它采取倒排索引技术,能够快速高效地处理大规模数据的搜索和分析,广泛应用于日志日志分析、保举体系、企业级搜索等场景。
  修改文件elasticsearch-StatefulSet.yaml
   
  1. vi middleware/elasticsearch/elasticsearch-StatefulSet.yaml
复制代码
  修改赤色部分,增加了密钥,改了镜像地址
   
  1.     spec:
  2.       imagePullSecrets:
  3.         - name: harbor-key
  4. ...
  5.           image: harbor.qq.com:8083/ragflow/elasticsearch:8.11.3
复制代码
  发布应用
   
  1. kubectl apply -f middleware/elasticsearch/elasticsearch-StatefulSet.yaml
  2. kubectl apply -f middleware/elasticsearch/elasticsearch-Service.yaml
复制代码
  等待2分钟,查看pod,确保是Running状态
   
  1. # kubectl -n ragflow get pods|grep es
  2. es01-0    1/1     Running   0             112s
复制代码
  查看es日志
   
  1. # kubectl -n ragflow logs -f es01-0
  2. ...
  3. {"@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"}
  4. ...
复制代码
  出现9200表现Elasticsearch启动正常。
  只要没有显着的错误就行
  MinIO

  MinIO 是一个高性能、开源的对象存储服务,兼容亚马逊 S3 云存储服务接口,常用于存储非布局化数据,如图片、视频、日志文件、备份数据等。
  修改文件minio-StatefulSet.yaml
   
  1. vi middleware/minio/minio-StatefulSet.yaml
复制代码
  修改赤色部分,增加了密钥,改了镜像地址
   
  1.     spec:
  2.       imagePullSecrets:
  3.         - name: harbor-key
  4. ...
  5.           image: harbor.bzmaster.cn:8083/ragflow/quay.io/minio/minio:RELEASE.2023-12-20T01-00-02Z
复制代码
  发布应用
   
  1. kubectl apply -f middleware/minio/minio-StatefulSet.yaml
  2. kubectl apply -f middleware/minio/minio-Service.yaml
复制代码
  等待1分钟,查看pod,确保是Running状态
   
  1. # kubectl -n ragflow get pods|grep minio
  2. minio-0   1/1     Running   0             106s
复制代码
  查看minio日志
   
  1. # kubectl -n ragflow logs -f minio-0
  2. Formatting 1st pool, 1 set(s), 1 drives per set.
  3. WARNING: Host local has more than 0 drives of set. A host failure will result in data becoming unavailable.
  4. You are running an older version of MinIO released 1 year before the latest release
  5. Update: Run `mc admin update`
  6. MinIO Object Storage Server
  7. Copyright: 2015-2023 MinIO, Inc.
  8. License: GNU AGPLv3 <https://www.gnu.org/licenses/agpl-3.0.html>
  9. Version: RELEASE.2023-12-20T01-00-02Z (go1.21.5 linux/amd64)
  10. Status:         1 Online, 0 Offline.
  11. S3-API: http://172.16.0.221:9000  http://127.0.0.1:9000     
  12. Console: http://172.16.0.221:9001 http://127.0.0.1:9001   
  13. Documentation: https://min.io/docs/minio/linux/index.html
  14. 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
   
  1. vi services/ragflow/ragflow-Deployment.yaml
复制代码
  修改赤色部分,增加了密钥,改了镜像地址
   
  1.     spec:
  2.       imagePullSecrets:
  3.         - name: harbor-key
  4. ...
  5.           image: harbor.bzmaster.cn:8083/ragflow/infiniflow/ragflow:v0.18.0-slim
复制代码
  发布应用,注意实行序次,先实行configMap,再实行下面的。
   
  1. kubectl apply -f services/ragflow/ragflow-cm1-configmap.yaml
  2. kubectl apply -f services/ragflow/ragflow-cm2-configmap.yaml
  3. kubectl apply -f services/ragflow/ragflow-cm3-configmap.yaml
  4. kubectl apply -f services/ragflow/ragflow-cm5-configmap.yaml
  5. kubectl apply -f services/ragflow/ragflow-Deployment.yaml
  6. kubectl apply -f services/ragflow/ragflow-Service.yaml
复制代码
  等待6分钟,这个镜像特别大,请耐心等待!
  查看pod,确保是Running状态
   
  1. # kubectl -n ragflow get pods|grep ragflow
  2. ragflow-6bddc85f97-6xpkd   1/1     Running   0             6m48s
复制代码
  查看ragflow日志
   
  1. # kubectl -n ragflow logs -f ragflow-6bddc85f97-6xpkd<br />...
  2. 2025-04-28 15:06:23,972 INFO     15
  3.         ____   ___    ______ ______ __               
  4.        / __ \ /   |  / ____// ____// /____  _      __
  5.       / /_/ // /| | / / __ / /_   / // __ \| | /| / /
  6.      / _, _// ___ |/ /_/ // __/  / // /_/ /| |/ |/ /
  7.     /_/ |_|/_/  |_|\____//_/    /_/ \____/ |__/|__/                             
  8.    
  9. 2025-04-28 15:06:24,063 INFO     15 RAGFlow version: v0.18.0 slim
  10. 2025-04-28 15:06:24,068 INFO     15 project base: /ragflow
  11. 2025-04-28 15:06:24,085 INFO     15 Current configs, from /ragflow/conf/service_conf.yaml:
  12.     ragflow: {'host': '0.0.0.0', 'http_port': 9380}
  13.     mysql: {'name': 'rag_flow', 'user': 'root', 'password': '********', 'host': 'mysql', 'port': 3306, 'max_connections': 100, 'stale_timeout': 30}
  14.     minio: {'user': 'rag_flow', 'password': '********', 'host': 'minio:9000'}
  15.     es: {'hosts': 'http://es01:9200', 'username': 'elastic', 'password': '********'}
  16.     infinity: {'uri': 'infinity:23817', 'db_name': 'default_db'}
  17.     redis: {'db': 1, 'password': '********', 'host': 'redis:6379'}
  18. 2025-04-28 15:06:24,164 INFO     15 Use Elasticsearch http://es01:9200 as the doc engine.
  19. 2025-04-28 15:06:24,364 INFO     15 GET http://es01:9200/ [status:200 duration:0.195s]
  20. 2025-04-28 15:06:24,453 INFO     15 HEAD http://es01:9200/ [status:200 duration:0.076s]
  21. 2025-04-28 15:06:24,478 INFO     15 Elasticsearch http://es01:9200 is healthy.
  22. 2025-04-28 15:06:24,557 WARNING  15 Load term.freq FAIL!
  23. 2025-04-28 15:06:24,656 WARNING  15 Realtime synonym is disabled, since no redis connection.
  24. 2025-04-28 15:06:24,678 WARNING  15 Load term.freq FAIL!
  25. 2025-04-28 15:06:24,757 WARNING  15 Realtime synonym is disabled, since no redis connection.
  26. 2025-04-28 15:06:24,769 INFO     15 MAX_CONTENT_LENGTH: 134217728
  27. 2025-04-28 15:06:24,853 INFO     15 MAX_FILE_COUNT_PER_USER: 0
  28. 2025-04-28 15:07:23,080 INFO     15 init web data success:33.099204301834106
  29. 2025-04-28 15:07:23,163 INFO     15 update_progress lock_value: 054d89b4-835e-415a-b2e3-aa6bd0d64e95
  30. 2025-04-28 15:07:23,163 INFO     15 RAGFlow HTTP server start...
  31. 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.
  32. * Running on all addresses (0.0.0.0)
  33. * Running on http://127.0.0.1:9380
  34. * Running on http://172.16.0.227:9380
  35. ...
复制代码
  没有显着报错就可以了
  之后日志会不绝出现RedisDB.queue_info相关信息,日志会刷屏,这个不消管,应该是定时任务。
  八、访问ragflow

  如果是生产情况,最好是域名访问,则必要添加一条ingress规则,指向到ragflow的svc,端口是80,并做DNS分析,指向到ingress的公网ip。
  这里直接使用ragflow的nodeport端口访问
   
  1. # kubectl -n ragflow get svc|grep ragflow
  2. 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节点
   
  1. # kubectl get node -o wide
  2. NAME       STATUS   ROLES                  AGE   VERSION        INTERNAL-IP   EXTERNAL-IP   OS-IMAGE           KERNEL-VERSION       CONTAINER-RUNTIME
  3. 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端口
   
  1. # kubectl -n ragflow get svc|grep minio
  2. 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搭建过程,到此竣事!
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表