From a2b0682aaf1b066fffae65053dfb3a8191127795 Mon Sep 17 00:00:00 2001 From: wbsong111 Date: Wed, 13 Aug 2025 17:41:45 +0900 Subject: [PATCH] Update ragflow --- charts/ragflow/CUSTOM-README.md | 80 ++++++++++- charts/ragflow/custom-values.yaml | 78 ++++++++--- .../templates/elasticsearch-config.yaml | 4 + charts/ragflow/templates/elasticsearch.yaml | 2 +- charts/ragflow/templates/env.yaml | 15 +-- charts/ragflow/templates/infinity.yaml | 2 +- charts/ragflow/templates/minio.yaml | 4 +- charts/ragflow/templates/mysql.yaml | 2 +- .../ragflow/templates/opensearch-config.yaml | 18 +++ charts/ragflow/templates/opensearch.yaml | 117 ++++++++++++++++ charts/ragflow/templates/ragflow.yaml | 16 ++- charts/ragflow/templates/ragflow_config.yaml | 127 ++---------------- charts/ragflow/templates/redis.yaml | 13 +- charts/ragflow/values.yaml | 76 +++++++++-- 14 files changed, 380 insertions(+), 174 deletions(-) create mode 100644 charts/ragflow/templates/opensearch-config.yaml create mode 100644 charts/ragflow/templates/opensearch.yaml diff --git a/charts/ragflow/CUSTOM-README.md b/charts/ragflow/CUSTOM-README.md index 5a41532..eb28ded 100644 --- a/charts/ragflow/CUSTOM-README.md +++ b/charts/ragflow/CUSTOM-README.md @@ -20,16 +20,19 @@ | Name | 설명 | 기본값 | | ---------------------- | ------------------------------------------------------------ | ------ | -| `env.DOC_ENGINE` | 문서 엔진 타입 설정. `elasticsearch` 또는 `infinity` 선택 가능 | `infinity` | +| `env.DOC_ENGINE` | 문서 엔진 타입 설정. `elasticsearch`, `infinity`, `opensearch` 선택 가능 | `infinity` | | `env.STACK_VERSION` | Elasticsearch 버전 설정 | `"8.11.3"` | | `env.ELASTIC_PASSWORD` | Elasticsearch 비밀번호 | `infini_rag_flow_helm` | +| `env.OPENSEARCH_PASSWORD` | OpenSearch 비밀번호 (대소문자, 숫자, 특수문자 포함 필요) | `infini_rag_flow_OS_01` | | `env.MYSQL_PASSWORD` | MySQL 비밀번호 | `infini_rag_flow_helm` | | `env.MYSQL_DBNAME` | MySQL 데이터베이스 이름 | `rag_flow` | | `env.MINIO_ROOT_USER` | MinIO 사용자명 | `rag_flow` | | `env.MINIO_PASSWORD` | MinIO 비밀번호 | `infini_rag_flow_helm` | | `env.REDIS_PASSWORD` | Redis 비밀번호 | `infini_rag_flow_helm` | -| `env.RAGFLOW_IMAGE` | RAGFlow Docker 이미지 | `infiniflow/ragflow:v0.19.0-slim` | -| `env.TIMEZONE` | 로컬 시간대 설정 | `"Asia/Shanghai"` | +| `env.RAGFLOW_IMAGE` | RAGFlow Docker 이미지 | `infiniflow/ragflow:v0.20.1-slim` | +| `env.TIMEZONE` | 로컬 시간대 설정 | `"Asia/Seoul"` | +| `env.DOC_BULK_SIZE` | 문서 파싱 시 단일 배치에서 처리되는 문서 청크 수 | `4` | +| `env.EMBEDDING_BATCH_SIZE` | 임베딩 벡터화 시 단일 배치에서 처리되는 텍스트 청크 수 | `16` | @@ -43,6 +46,39 @@ | `ragflow.api.service.type` | API 서비스 타입 설정 | `ClusterIP` | | `ragflow.deployment.strategy` | 배포 전략 설정 | `` | | `ragflow.deployment.resources` | 리소스 제한 설정 | `` | +| `ragflow.service_conf.oauth.oidc` | OIDC 인증 설정 | 설정 예시 참조 | +| `ragflow.llm_factories` | LLM 팩토리 설정 | 설정 예시 참조 | + +#### 2.1) OIDC 인증 설정 예시 +```yaml +ragflow: + service_conf: + oauth: + oidc: + display_name: "OIDC" + client_id: "ragflow" + client_secret: "your-client-secret" + issuer: "https://your-keycloak-domain/realms/your-realm" + scope: "openid email profile" + redirect_uri: "https://your-ragflow-domain/v1/user/oauth/callback/oidc" +``` + +#### 2.2) LLM 팩토리 설정 예시 +```yaml +ragflow: + llm_factories: + factory_llm_infos: + - name: OpenAI-API-Compatible + logo: "" + tags: "LLM,TEXT EMBEDDING,SPEECH2TEXT,MODERATION" + status: "1" + llm: + - llm_name: my-custom-llm + tags: "LLM,CHAT," + max_tokens: 100000 + model_type: chat + is_tools: false +``` @@ -52,9 +88,11 @@ | Name | 설명 | 기본값 | | --------------------------- | ------------------------------------------------------------ | ----------------------- | | `infinity.image.repository` | Infinity 이미지 저장소 | `infiniflow/infinity` | -| `infinity.image.tag` | Infinity 이미지 태그 | `v0.6.0-dev3` | +| `infinity.image.tag` | Infinity 이미지 태그 | `v0.6.0-dev5` | | `infinity.storage.className` | 스토리지 클래스 이름 | `` | | `infinity.storage.capacity` | 스토리지 용량 | `5Gi` | +| `infinity.deployment.strategy` | 배포 전략 설정 | `` | +| `infinity.deployment.resources` | 리소스 제한 설정 | `` | | `infinity.service.type` | 서비스 타입 | `ClusterIP` | @@ -151,17 +189,28 @@ cert-manager.io/cluster-issuer: "selfsigned-issuer" cert-manager.io/duration: 8760h cert-manager.io/renew-before: 720h + konghq.com/https-redirect-status-code: '301' + konghq.com/protocols: https hosts: - host: ragflow.example.org paths: - path: / pathType: ImplementationSpecific - tls: + tls: - hosts: - ragflow.example.org secretName: ragflow-tls ``` +#### 8.4) Kong 관련 어노테이션 + +- Kong Ingress Controller 사용 시 추가 설정 옵션들: + +| Name | 설명 | 기본값 | +| --------------------------------------- | ---------------------------------- | --------- | +| `konghq.com/https-redirect-status-code` | HTTPS 리다이렉트 상태 코드 | `'301'` | +| `konghq.com/protocols` | 허용할 프로토콜 | `https` | + ## 3. 주요 설정 가이드 @@ -169,6 +218,7 @@ - `env.DOC_ENGINE`을 통해 문서 엔진을 선택할 수 있습니다. - `elasticsearch`: 안정적이고 검증된 검색 엔진 - `infinity`: 고성능 벡터 검색 엔진 (권장) + - `opensearch`: Elasticsearch의 오픈소스 대안 ### 3.2) 리소스 설정 - 각 서비스별로 `deployment.resources`에서 CPU/메모리 리소스를 설정할 수 있습니다. @@ -180,4 +230,22 @@ ### 3.4) 보안 설정 - 모든 비밀번호는 기본값에서 변경하여 사용하세요. -- OIDC를 통한 외부 인증 시스템 연동이 가능합니다. \ No newline at end of file +- OIDC를 통한 외부 인증 시스템 연동이 가능합니다. + +### 3.5) 성능 튜닝 설정 +- 문서 처리 및 임베딩 성능을 조정할 수 있는 설정들입니다. + +| Name | 설명 | 기본값 | +| --------------------------- | ------------------------------------------------------------ | ----------------------- | +| `env.DOC_BULK_SIZE` | 문서 파싱 시 단일 배치에서 처리되는 문서 청크 수 | `4` | +| `env.EMBEDDING_BATCH_SIZE` | 임베딩 벡터화 시 단일 배치에서 처리되는 텍스트 청크 수 | `16` | + +### 3.6) 추가 환경 설정 +- 기타 선택적 환경 설정들입니다. + +| Name | 설명 | 기본값 | +| --------------------------- | ------------------------------------------------------------ | ----------------------- | +| `env.HF_ENDPOINT` | Hugging Face 엔드포인트 (접근 제한 시 미러 사용) | 설정하지 않음 | +| `env.MAX_CONTENT_LENGTH` | 업로드 파일 최대 크기 (바이트) | `134217728` (128MB) | + +**참고**: `MAX_CONTENT_LENGTH` 변경 시 nginx 설정의 `client_max_body_size`도 함께 수정해야 합니다. \ No newline at end of file diff --git a/charts/ragflow/custom-values.yaml b/charts/ragflow/custom-values.yaml index 3cb4481..a86cd97 100644 --- a/charts/ragflow/custom-values.yaml +++ b/charts/ragflow/custom-values.yaml @@ -4,8 +4,10 @@ env: # Available options: # - `elasticsearch` (default) # - `infinity` (https://github.com/infiniflow/infinity) + # - `opensearch` (https://github.com/opensearch-project/OpenSearch) # DOC_ENGINE: elasticsearch DOC_ENGINE: infinity + # DOC_ENGINE: opensearch # The version of Elasticsearch. STACK_VERSION: "8.11.3" @@ -13,6 +15,10 @@ env: # The password for Elasticsearch ELASTIC_PASSWORD: infini_rag_flow_helm + # The password for OpenSearch. + # At least one uppercase letter, one lowercase letter, one digit, and one special character + OPENSEARCH_PASSWORD: infini_rag_flow_OS_01 + # The password for MySQL MYSQL_PASSWORD: infini_rag_flow_helm # The database of the MySQL service to use @@ -27,13 +33,13 @@ env: REDIS_PASSWORD: infini_rag_flow_helm # The RAGFlow Docker image to download. - # Defaults to the v0.19.0-slim edition, which is the RAGFlow Docker image without embedding models. - RAGFLOW_IMAGE: infiniflow/ragflow:v0.19.0-slim + # Defaults to the v0.20.1-slim edition, which is the RAGFlow Docker image without embedding models. + RAGFLOW_IMAGE: infiniflow/ragflow:v0.20.1-slim # # To download the RAGFlow Docker image with embedding models, uncomment the following line instead: - # RAGFLOW_IMAGE: infiniflow/ragflow:v0.19.0 + # RAGFLOW_IMAGE: infiniflow/ragflow:v0.20.1 # - # The Docker image of the v0.19.0 edition includes: + # The Docker image of the v0.20.1 edition includes: # - Built-in embedding models: # - BAAI/bge-large-zh-v1.5 # - BAAI/bge-reranker-v2-m3 @@ -52,7 +58,7 @@ env: # # The local time zone. - TIMEZONE: "Asia/Shanghai" + TIMEZONE: "Asia/Seoul" # Uncomment the following line if you have limited access to huggingface.co: # HF_ENDPOINT: https://hf-mirror.com @@ -62,7 +68,45 @@ env: # MAX_CONTENT_LENGTH: "134217728" # After making the change, ensure you update `client_max_body_size` in nginx/nginx.conf correspondingly. + # The number of document chunks processed in a single batch during document parsing. + DOC_BULK_SIZE: 4 + + # The number of text chunks processed in a single batch during embedding vectorization. + EMBEDDING_BATCH_SIZE: 16 + ragflow: + + # Optional service configuration overrides + # to be written to local.service_conf.yaml + # inside the RAGFlow container + # https://ragflow.io/docs/dev/configurations#service-configuration + service_conf: + oauth: + oidc: + display_name: "OIDC" + client_id: "Client ID" + client_secret: "Client Secret" + issuer: "https://keycloak_domain/realms/paasup" + scope: "openid email profile" + redirect_uri: "https://ragflow_domain/v1/user/oauth/callback/oidc" + + # Optional yaml formatted override for the + # llm_factories.json file inside the RAGFlow + # container. + llm_factories: + # factory_llm_infos: + # - name: OpenAI-API-Compatible + # logo: "" + # tags: "LLM,TEXT EMBEDDING,SPEECH2TEXT,MODERATION" + # status: "1" + # llm: + # - llm_name: my-custom-llm + # tags: "LLM,CHAT," + # max_tokens: 100000 + # model_type: chat + # is_tools: false + + # Kubernetes configuration deployment: strategy: resources: @@ -77,7 +121,7 @@ ragflow: infinity: image: repository: infiniflow/infinity - tag: v0.6.0-dev3 + tag: v0.6.0-dev5 storage: className: capacity: 5Gi @@ -87,19 +131,6 @@ infinity: service: type: ClusterIP -elasticsearch: - storage: - className: - capacity: 20Gi - deployment: - strategy: - resources: - requests: - cpu: "4" - memory: "16Gi" - service: - type: ClusterIP - minio: image: repository: quay.io/minio/minio @@ -135,6 +166,11 @@ redis: capacity: 5Gi persistence: enabled: true + # Set's the retention policy for the persistent storage (only available in k8s 1.32 or later) + # https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/#persistentvolumeclaim-retention + # retentionPolicy: + # whenDeleted: Delete + # whenScaled: Delete deployment: strategy: resources: @@ -154,11 +190,11 @@ ingress: konghq.com/https-redirect-status-code: '301' konghq.com/protocols: https hosts: - - host: ragflow.gke.paasup.io + - host: ragflow.example.org paths: - path: / pathType: ImplementationSpecific tls: - secretName: ragflow-tls hosts: - - ragflow.gke.paasup.io + - ragflow.example.org diff --git a/charts/ragflow/templates/elasticsearch-config.yaml b/charts/ragflow/templates/elasticsearch-config.yaml index a43eabe..e2c03fc 100644 --- a/charts/ragflow/templates/elasticsearch-config.yaml +++ b/charts/ragflow/templates/elasticsearch-config.yaml @@ -10,4 +10,8 @@ data: xpack.security.enabled: "true" xpack.security.http.ssl.enabled: "false" xpack.security.transport.ssl.enabled: "false" + cluster.routing.allocation.disk.watermark.low: 5gb + cluster.routing.allocation.disk.watermark.high: 3gb + cluster.routing.allocation.disk.watermark.flood_stage: 2gb + TZ: {{ .Values.env.TIMEZONE }} {{- end -}} diff --git a/charts/ragflow/templates/elasticsearch.yaml b/charts/ragflow/templates/elasticsearch.yaml index 9db9c9a..02e0645 100644 --- a/charts/ragflow/templates/elasticsearch.yaml +++ b/charts/ragflow/templates/elasticsearch.yaml @@ -19,7 +19,7 @@ spec: storage: {{ .Values.elasticsearch.storage.capacity }} --- apiVersion: apps/v1 -kind: Deployment +kind: StatefulSet metadata: name: {{ include "ragflow.fullname" . }}-es labels: diff --git a/charts/ragflow/templates/env.yaml b/charts/ragflow/templates/env.yaml index be0144f..bcee9fd 100644 --- a/charts/ragflow/templates/env.yaml +++ b/charts/ragflow/templates/env.yaml @@ -43,14 +43,11 @@ stringData: ELASTIC_PASSWORD: {{ .Values.env.ELASTIC_PASSWORD | required "ELASTIC_PASSWORD is required" }} {{- else if eq .Values.env.DOC_ENGINE "infinity" }} INFINITY_HOST: {{ printf "%s-infinity.%s.svc" (include "ragflow.fullname" .) .Release.Namespace }} + {{- else if eq .Values.env.DOC_ENGINE "opensearch" }} + OS_HOST: {{ printf "%s-opensearch.%s.svc" (include "ragflow.fullname" .) .Release.Namespace }} + OS_PORT: "9201" + OPENSEARCH_PASSWORD: {{ .Values.env.OPENSEARCH_PASSWORD | required "OPENSEARCH_PASSWORD is required" }} + OPENSEARCH_INITIAL_ADMIN_PASSWORD: {{ .Values.env.OPENSEARCH_PASSWORD | required "OPENSEARCH_PASSWORD is required" }} {{- else }} - {{ fail "env.DOC_ENGINE must be either 'elasticsearch' or 'infinity'" }} - {{- end }} - {{- if .Values.oidc.enable }} - DISPLAY_NAME: {{ .Values.oidc.display_name }} - CLIENT_ID: {{ .Values.oidc.client_id }} - CLIENT_SECRETS: {{ .Values.oidc.client_secret }} - ISSUER: {{ .Values.oidc.issuer }} - SCOPE: {{ .Values.oidc.scope }} - REDIRECT_URI: {{ .Values.oidc.redirect_uri }} + {{ fail "env.DOC_ENGINE must be either 'elasticsearch', 'opensearch' or 'infinity'" }} {{- end }} diff --git a/charts/ragflow/templates/infinity.yaml b/charts/ragflow/templates/infinity.yaml index 6ccdff0..3821a31 100644 --- a/charts/ragflow/templates/infinity.yaml +++ b/charts/ragflow/templates/infinity.yaml @@ -19,7 +19,7 @@ spec: storage: {{ .Values.infinity.storage.capacity }} --- apiVersion: apps/v1 -kind: Deployment +kind: StatefulSet metadata: name: {{ include "ragflow.fullname" . }}-infinity labels: diff --git a/charts/ragflow/templates/minio.yaml b/charts/ragflow/templates/minio.yaml index 7a5cb1a..f01062c 100644 --- a/charts/ragflow/templates/minio.yaml +++ b/charts/ragflow/templates/minio.yaml @@ -19,9 +19,9 @@ spec: storage: {{ .Values.minio.storage.capacity }} --- apiVersion: apps/v1 -kind: Deployment +kind: StatefulSet metadata: - name: ragflow-minio-deployment + name: {{ include "ragflow.fullname" . }}-minio labels: {{- include "ragflow.labels" . | nindent 4 }} app.kubernetes.io/component: minio diff --git a/charts/ragflow/templates/mysql.yaml b/charts/ragflow/templates/mysql.yaml index 2ec6dcd..f6a3e80 100644 --- a/charts/ragflow/templates/mysql.yaml +++ b/charts/ragflow/templates/mysql.yaml @@ -19,7 +19,7 @@ spec: storage: {{ .Values.mysql.storage.capacity }} --- apiVersion: apps/v1 -kind: Deployment +kind: StatefulSet metadata: name: {{ include "ragflow.fullname" . }}-mysql labels: diff --git a/charts/ragflow/templates/opensearch-config.yaml b/charts/ragflow/templates/opensearch-config.yaml new file mode 100644 index 0000000..64147af --- /dev/null +++ b/charts/ragflow/templates/opensearch-config.yaml @@ -0,0 +1,18 @@ +{{- if eq .Values.env.DOC_ENGINE "opensearch" -}} +apiVersion: v1 +kind: ConfigMap +metadata: + name: {{ include "ragflow.fullname" . }}-opensearch-config +data: + node.name: opensearch01 + bootstrap.memory_lock: "false" + discovery.type: single-node + plugins.security.disabled: "false" + plugins.security.ssl.http.enabled: "false" + plugins.security.ssl.transport.enabled: "true" + cluster.routing.allocation.disk.watermark.low: 5gb + cluster.routing.allocation.disk.watermark.high: 3gb + cluster.routing.allocation.disk.watermark.flood_stage: 2gb + TZ: {{ .Values.env.TIMEZONE }} + http.port: "9201" +{{- end -}} diff --git a/charts/ragflow/templates/opensearch.yaml b/charts/ragflow/templates/opensearch.yaml new file mode 100644 index 0000000..cb721e0 --- /dev/null +++ b/charts/ragflow/templates/opensearch.yaml @@ -0,0 +1,117 @@ +{{- if eq .Values.env.DOC_ENGINE "opensearch" -}} +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: {{ include "ragflow.fullname" . }}-opensearch-data + annotations: + "helm.sh/resource-policy": keep + labels: + {{- include "ragflow.labels" . | nindent 4 }} + app.kubernetes.io/component: opensearch +spec: + {{- with .Values.opensearch.storage.className }} + storageClassName: {{ . }} + {{- end }} + accessModes: + - ReadWriteOnce + resources: + requests: + storage: {{ .Values.opensearch.storage.capacity }} +--- +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: {{ include "ragflow.fullname" . }}-opensearch + labels: + {{- include "ragflow.labels" . | nindent 4 }} + app.kubernetes.io/component: opensearch +spec: + replicas: 1 + selector: + matchLabels: + {{- include "ragflow.selectorLabels" . | nindent 6 }} + app.kubernetes.io/component: opensearch + {{- with .Values.opensearch.deployment.strategy }} + strategy: + {{- . | toYaml | nindent 4 }} + {{- end }} + template: + metadata: + labels: + {{- include "ragflow.labels" . | nindent 8 }} + app.kubernetes.io/component: opensearch + annotations: + checksum/config-opensearch: {{ include (print $.Template.BasePath "/opensearch-config.yaml") . | sha256sum }} + checksum/config-env: {{ include (print $.Template.BasePath "/env.yaml") . | sha256sum }} + spec: + initContainers: + - name: fix-data-volume-permissions + image: alpine + command: + - sh + - -c + - "chown -R 1000:0 /usr/share/opensearch/data" + volumeMounts: + - mountPath: /usr/share/opensearch/data + name: opensearch-data + - name: sysctl + image: busybox + securityContext: + privileged: true + runAsUser: 0 + command: ["sysctl", "-w", "vm.max_map_count=262144"] + containers: + - name: opensearch + image: {{ .Values.opensearch.image.repository }}:{{ .Values.opensearch.image.tag }} + envFrom: + - secretRef: + name: {{ include "ragflow.fullname" . }}-env-config + - configMapRef: + name: {{ include "ragflow.fullname" . }}-opensearch-config + ports: + - containerPort: 9201 + name: http + volumeMounts: + - mountPath: /usr/share/opensearch/data + name: opensearch-data + {{- with .Values.opensearch.deployment.resources }} + resources: + {{- . | toYaml | nindent 10 }} + {{- end }} + securityContext: + capabilities: + add: + - "IPC_LOCK" + runAsUser: 1000 + allowPrivilegeEscalation: false + livenessProbe: + exec: + command: + - sh + - -c + - curl -u admin:$OPENSEARCH_PASSWORD localhost:9201 + initialDelaySeconds: 30 + periodSeconds: 10 + failureThreshold: 6 + volumes: + - name: opensearch-data + persistentVolumeClaim: + claimName: {{ include "ragflow.fullname" . }}-opensearch-data +--- +apiVersion: v1 +kind: Service +metadata: + name: {{ include "ragflow.fullname" . }}-opensearch + labels: + {{- include "ragflow.labels" . | nindent 4 }} + app.kubernetes.io/component: opensearch +spec: + selector: + {{- include "ragflow.selectorLabels" . | nindent 4 }} + app.kubernetes.io/component: opensearch + ports: + - protocol: TCP + port: 9201 + targetPort: http + type: {{ .Values.opensearch.service.type }} +{{- end -}} diff --git a/charts/ragflow/templates/ragflow.yaml b/charts/ragflow/templates/ragflow.yaml index 5818d61..57a5d22 100644 --- a/charts/ragflow/templates/ragflow.yaml +++ b/charts/ragflow/templates/ragflow.yaml @@ -43,10 +43,15 @@ spec: - mountPath: /etc/nginx/nginx.conf subPath: nginx.conf name: nginx-config-volume - {{- if .Values.oidc.enable }} - - mountPath: /ragflow/conf/service_conf.yaml.template - subPath: service_conf.yaml.template - name: nginx-config-volume + {{- with .Values.ragflow.service_conf }} + - mountPath: /ragflow/conf/local.service_conf.yaml + subPath: local.service_conf.yaml + name: service-conf-volume + {{- end }} + {{- with .Values.ragflow.llm_factories }} + - mountPath: /ragflow/conf/llm_factories.json + subPath: llm_factories.json + name: service-conf-volume {{- end }} envFrom: - secretRef: @@ -59,6 +64,9 @@ spec: - name: nginx-config-volume configMap: name: nginx-config + - name: service-conf-volume + configMap: + name: ragflow-service-config --- apiVersion: v1 kind: Service diff --git a/charts/ragflow/templates/ragflow_config.yaml b/charts/ragflow/templates/ragflow_config.yaml index ace32c9..533bd3d 100644 --- a/charts/ragflow/templates/ragflow_config.yaml +++ b/charts/ragflow/templates/ragflow_config.yaml @@ -1,6 +1,20 @@ --- apiVersion: v1 kind: ConfigMap +metadata: + name: ragflow-service-config +data: + {{- with .Values.ragflow.service_conf }} + local.service_conf.yaml: | + {{- . | toYaml | nindent 4 }} + {{- end }} + {{- with .Values.ragflow.llm_factories }} + llm_factories.json: | + {{- . | toPrettyJson | nindent 4 }} + {{- end }} +--- +apiVersion: v1 +kind: ConfigMap metadata: name: nginx-config data: @@ -73,116 +87,3 @@ data: include /etc/nginx/conf.d/ragflow.conf; } - {{- if .Values.oidc.enable }} - service_conf.yaml.template: | - ragflow: - host: ${RAGFLOW_HOST:-0.0.0.0} - http_port: 9380 - mysql: - name: '${MYSQL_DBNAME:-rag_flow}' - user: '${MYSQL_USER:-root}' - password: '${MYSQL_PASSWORD:-infini_rag_flow}' - host: '${MYSQL_HOST:-mysql}' - port: 3306 - max_connections: 900 - stale_timeout: 300 - minio: - user: '${MINIO_USER:-rag_flow}' - password: '${MINIO_PASSWORD:-infini_rag_flow}' - host: '${MINIO_HOST:-minio}:9000' - es: - hosts: 'http://${ES_HOST:-es01}:9200' - username: '${ES_USER:-elastic}' - password: '${ELASTIC_PASSWORD:-infini_rag_flow}' - os: - hosts: 'http://${OS_HOST:-opensearch01}:9201' - username: '${OS_USER:-admin}' - password: '${OPENSEARCH_PASSWORD:-infini_rag_flow_OS_01}' - infinity: - uri: '${INFINITY_HOST:-infinity}:23817' - db_name: 'default_db' - redis: - db: 1 - password: '${REDIS_PASSWORD:-infini_rag_flow}' - host: '${REDIS_HOST:-redis}:6379' - - # postgres: - # name: '${POSTGRES_DBNAME:-rag_flow}' - # user: '${POSTGRES_USER:-rag_flow}' - # password: '${POSTGRES_PASSWORD:-infini_rag_flow}' - # host: '${POSTGRES_HOST:-postgres}' - # port: 5432 - # max_connections: 100 - # stale_timeout: 30 - # s3: - # access_key: 'access_key' - # secret_key: 'secret_key' - # region: 'region' - # endpoint_url: 'endpoint_url' - # bucket: 'bucket' - # prefix_path: 'prefix_path' - # signature_version: 'v4' - # addressing_style: 'path' - # oss: - # access_key: '${ACCESS_KEY}' - # secret_key: '${SECRET_KEY}' - # endpoint_url: '${ENDPOINT}' - # region: '${REGION}' - # bucket: '${BUCKET}' - # prefix_path: '${OSS_PREFIX_PATH}' - # azure: - # auth_type: 'sas' - # container_url: 'container_url' - # sas_token: 'sas_token' - # azure: - # auth_type: 'spn' - # account_url: 'account_url' - # client_id: 'client_id' - # secret: 'secret' - # tenant_id: 'tenant_id' - # container_name: 'container_name' - # user_default_llm: - # factory: 'Tongyi-Qianwen' - # api_key: 'sk-xxxxxxxxxxxxx' - # base_url: '' - # default_models: - # chat_model: 'qwen-plus' - # embedding_model: 'BAAI/bge-large-zh-v1.5@BAAI' - # rerank_model: '' - # asr_model: '' - # image2text_model: '' - oauth: - # oauth2: - # display_name: "OAuth2" - # client_id: "your_client_id" - # client_secret: "your_client_secret" - # authorization_url: "https://your-oauth-provider.com/oauth/authorize" - # token_url: "https://your-oauth-provider.com/oauth/token" - # userinfo_url: "https://your-oauth-provider.com/oauth/userinfo" - # redirect_uri: "https://your-app.com/v1/user/oauth/callback/oauth2" - oidc: - display_name: '${DISPLAY_NAME}' - client_id: '${CLIENT_ID}' - client_secret: '${CLIENT_SECRETS}' - issuer: '${ISSUER}' - scope: '${SCOPE:openid}' - redirect_uri: '${REDIRECT_URI}' - # github: - # type: "github" - # icon: "github" - # display_name: "Github" - # client_id: "your_client_id" - # client_secret: "your_client_secret" - # redirect_uri: "https://your-app.com/v1/user/oauth/callback/github" - # authentication: - # client: - # switch: false - # http_app_key: - # http_secret_key: - # site: - # switch: false - # permission: - # switch: false - # component: false - # dataset: false - {{- end }} diff --git a/charts/ragflow/templates/redis.yaml b/charts/ragflow/templates/redis.yaml index 53e7a67..4bd37a1 100644 --- a/charts/ragflow/templates/redis.yaml +++ b/charts/ragflow/templates/redis.yaml @@ -64,11 +64,20 @@ spec: {{- . | toYaml | nindent 12 }} {{- end }} {{- if .Values.redis.persistence.enabled }} + {{- with .Values.redis.persistence.retentionPolicy }} + persistentVolumeClaimRetentionPolicy: + {{- with .whenDeleted }} + whenDeleted: {{ . }} + {{- end }} + {{- with .whenScaled }} + whenScaled: {{ . }} + {{- end }} + {{- end }} volumeClaimTemplates: - metadata: name: redis-data labels: - {{- include "ragflow.labels" . | nindent 10 }} + {{- include "ragflow.selectorLabels" . | nindent 10 }} app.kubernetes.io/component: redis spec: accessModes: @@ -109,4 +118,4 @@ spec: selector: matchLabels: {{- include "ragflow.selectorLabels" . | nindent 6 }} - app.kubernetes.io/component: redis \ No newline at end of file + app.kubernetes.io/component: redis diff --git a/charts/ragflow/values.yaml b/charts/ragflow/values.yaml index f6f223c..2cfcdb4 100644 --- a/charts/ragflow/values.yaml +++ b/charts/ragflow/values.yaml @@ -4,8 +4,10 @@ env: # Available options: # - `elasticsearch` (default) # - `infinity` (https://github.com/infiniflow/infinity) + # - `opensearch` (https://github.com/opensearch-project/OpenSearch) # DOC_ENGINE: elasticsearch DOC_ENGINE: infinity + # DOC_ENGINE: opensearch # The version of Elasticsearch. STACK_VERSION: "8.11.3" @@ -13,6 +15,10 @@ env: # The password for Elasticsearch ELASTIC_PASSWORD: infini_rag_flow_helm + # The password for OpenSearch. + # At least one uppercase letter, one lowercase letter, one digit, and one special character + OPENSEARCH_PASSWORD: infini_rag_flow_OS_01 + # The password for MySQL MYSQL_PASSWORD: infini_rag_flow_helm # The database of the MySQL service to use @@ -27,13 +33,13 @@ env: REDIS_PASSWORD: infini_rag_flow_helm # The RAGFlow Docker image to download. - # Defaults to the v0.19.0-slim edition, which is the RAGFlow Docker image without embedding models. - RAGFLOW_IMAGE: infiniflow/ragflow:v0.19.0-slim + # Defaults to the v0.20.1-slim edition, which is the RAGFlow Docker image without embedding models. + RAGFLOW_IMAGE: infiniflow/ragflow:v0.20.1-slim # # To download the RAGFlow Docker image with embedding models, uncomment the following line instead: - # RAGFLOW_IMAGE: infiniflow/ragflow:v0.19.0 + # RAGFLOW_IMAGE: infiniflow/ragflow:v0.20.1 # - # The Docker image of the v0.19.0 edition includes: + # The Docker image of the v0.20.1 edition includes: # - Built-in embedding models: # - BAAI/bge-large-zh-v1.5 # - BAAI/bge-reranker-v2-m3 @@ -62,7 +68,37 @@ env: # MAX_CONTENT_LENGTH: "134217728" # After making the change, ensure you update `client_max_body_size` in nginx/nginx.conf correspondingly. + # The number of document chunks processed in a single batch during document parsing. + DOC_BULK_SIZE: 4 + + # The number of text chunks processed in a single batch during embedding vectorization. + EMBEDDING_BATCH_SIZE: 16 + ragflow: + + # Optional service configuration overrides + # to be written to local.service_conf.yaml + # inside the RAGFlow container + # https://ragflow.io/docs/dev/configurations#service-configuration + service_conf: + + # Optional yaml formatted override for the + # llm_factories.json file inside the RAGFlow + # container. + llm_factories: + # factory_llm_infos: + # - name: OpenAI-API-Compatible + # logo: "" + # tags: "LLM,TEXT EMBEDDING,SPEECH2TEXT,MODERATION" + # status: "1" + # llm: + # - llm_name: my-custom-llm + # tags: "LLM,CHAT," + # max_tokens: 100000 + # model_type: chat + # is_tools: false + + # Kubernetes configuration deployment: strategy: resources: @@ -77,7 +113,7 @@ ragflow: infinity: image: repository: infiniflow/infinity - tag: v0.6.0-dev3 + tag: v0.6.0-dev5 storage: className: capacity: 5Gi @@ -100,6 +136,22 @@ elasticsearch: service: type: ClusterIP +opensearch: + image: + repository: opensearchproject/opensearch + tag: 2.19.1 + storage: + className: + capacity: 20Gi + deployment: + strategy: + resources: + requests: + cpu: "4" + memory: "16Gi" + service: + type: ClusterIP + minio: image: repository: quay.io/minio/minio @@ -135,6 +187,11 @@ redis: capacity: 5Gi persistence: enabled: true + # Set's the retention policy for the persistent storage (only available in k8s 1.32 or later) + # https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/#persistentvolumeclaim-retention + # retentionPolicy: + # whenDeleted: Delete + # whenScaled: Delete deployment: strategy: resources: @@ -159,12 +216,3 @@ ingress: # - secretName: chart-example-tls # hosts: # - chart-example.local -oidc: - enable: false - display_name: "OAuth2" - client_id: "your_client_id" - client_secret: "your_client_secret" - authorization_url: "https://your-oauth-provider.com/oauth/authorize" - token_url: "https://your-oauth-provider.com/oauth/token" - userinfo_url: "https://your-oauth-provider.com/oauth/userinfo" - redirect_uri: "https://your-app.com/v1/user/oauth/callback/oauth2"