Skip to content

Commit 5d4cc6b

Browse files
authored
[SeaweedFS] Migrate from MinIO to SeaweedFS as the S3-compatible storage backend (#245)
1 parent 3ac5a6f commit 5d4cc6b

23 files changed

+434
-134
lines changed

README.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,17 @@
22

33
This repo contains the Helm charts for the MLRun Community Edition (CE) - a full open source MLOps stack.
44

5-
The Open source MLRun ce chart includes the following stack:
5+
The Open source MLRun CE chart includes the following stack:
66

77
* Nuclio - https://github.com/nuclio/nuclio
88
* MLRun - https://github.com/mlrun/mlrun
99
* Jupyter - https://github.com/jupyter/notebook (+MLRun integrated)
1010
* MPI Operator - https://github.com/kubeflow/mpi-operator
11-
* Minio - https://github.com/minio/minio/tree/master/helm/minio
11+
* SeaweedFS - https://github.com/seaweedfs/seaweedfs (S3-compatible storage)
1212
* Spark Operator - https://github.com/GoogleCloudPlatform/spark-on-k8s-operator
1313
* Pipelines - https://github.com/kubeflow/pipelines
1414
* Prometheus stack - https://github.com/prometheus-community/helm-charts
1515

16+
## Installation
1617

17-
## Installation
18-
Refer to the installation instructions in the [README](charts/mlrun-ce/README.md) of the `mlrun-ce` chart.
18+
Refer to the installation instructions in the [README](charts/mlrun-ce/README.md) of the `mlrun-ce` chart.

charts/mlrun-ce/Chart.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
apiVersion: v1
22
name: mlrun-ce
3-
version: 0.11.0-rc8
3+
version: 0.11.0-rc9
44
description: MLRun Open Source Stack
55
home: https://iguazio.com
66
icon: https://www.iguazio.com/wp-content/uploads/2019/10/Iguazio-Logo.png

charts/mlrun-ce/README.md

Lines changed: 18 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ The Open source MLRun ce chart includes the following stack:
1010
* MLRun - https://github.com/mlrun/mlrun
1111
* Jupyter - https://github.com/jupyter/notebook (+MLRun integrated)
1212
* MPI Operator - https://github.com/kubeflow/mpi-operator
13-
* Minio - https://github.com/minio/minio/tree/master/helm/minio
13+
* SeaweedFS - https://github.com/seaweedfs/seaweedfs (S3-compatible storage)
1414
* Spark Operator - https://github.com/GoogleCloudPlatform/spark-on-k8s-operator
1515
* Pipelines - https://github.com/kubeflow/pipelines
1616
* Prometheus stack - https://github.com/prometheus-community/helm-charts
@@ -162,9 +162,9 @@ helm --namespace mlrun \
162162
--wait \
163163
... other overrides ... \
164164
--set global.registry.url=${AWS_ACCOUNT}.dkr.ecr.${AWS_REGION}.amazonaws.com \
165+
--set global.registry.secretName=ecr-registry-credentials \
165166
--set nuclio.dashboard.kaniko.registryProviderSecretName=aws-credentials \
166167
--set mlrun.defaultDockerRegistrySecretName=aws-credentials \
167-
--set global.registry.secretName=ecr-registry-credentials \
168168
mlrun/mlrun-ce
169169
```
170170

@@ -173,19 +173,23 @@ helm --namespace mlrun \
173173
## Usage
174174

175175
Your applications are now available in your local browser:
176-
- jupyter-notebook - http://nodeipaddress:30040
177-
- nuclio - http://nodeipaddress:30050
178-
- mlrun UI - http://nodeipaddress:30060
179-
- mlrun API (external) - http://nodeipaddress:30070
180-
- minio API - http://nodeipaddress:30080
181-
- minio UI - http://nodeipaddress:30090
182-
- pipeline UI - http://nodeipaddress:30100
183-
- grafana UI - http://nodeipaddress:30110
184-
176+
- Jupyter Notebook - http://nodeipaddress:30040
177+
- Nuclio - http://nodeipaddress:30050
178+
- MLRun UI - http://nodeipaddress:30060
179+
- MLRun API (external) - http://nodeipaddress:30070
180+
- SeaweedFS Admin UI (user/policy management) - http://nodeipaddress:30093
181+
- Pipeline UI - http://nodeipaddress:30100
182+
- Grafana UI - http://nodeipaddress:30010
183+
- Prometheus UI - http://nodeipaddress:30020
184+
185+
**With Ingress enabled**, the UI is available at:
186+
- `https://seaweedfs-admin.<namespace>.<cluster>.lab.iguazeng.com`
185187

186188
> **Note:**
187189
> The above links assume your Kubernetes cluster is exposed on localhost.
188190
> If that's not the case, the different components will be available on `externalHostAddress`
191+
>
192+
> For production deployments, consider enabling ingress for each service instead of using NodePorts.
189193
190194
## Start Working
191195

@@ -278,6 +282,6 @@ Refer to the [**Kubeflow documentation**](https://www.kubeflow.org/docs/started/
278282

279283
This table shows the versions of the main components in the MLRun CE chart:
280284

281-
| MLRun CE | MLRun | Nuclio | Jupyter lab | MPI Operator | Minio | Spark Operator | Pipelines | Kube-Prometheus-Stack | Prometheus | Grafana |
282-
|------------|--------|----------|-------------|--------------|------------------------------|----------------|-----------|-----------------------|------------|---------|
283-
| **0.10.0** | 1.10.0 | 1.15.9 | 4.5.0 | 0.2.3 | RELEASE.2024-04-18T19-09-19Z | 2.1.0 | 2.14.3 | 0.82.0 | 3.3.1 | 11.6.1 |
285+
| MLRun CE | MLRun | Nuclio | Jupyter | MPI Operator | SeaweedFS | Spark Operator | Pipelines | Kube-Prometheus-Stack |
286+
|------------|--------|--------|---------|--------------|-----------|----------------|-----------|-----------------------|
287+
| **0.11.0** | 1.11.0 | 1.15.9 | 4.5.0 | 0.2.3 | 4.0.407 | 2.1.0 | 2.14.3 | 72.1.1 |

charts/mlrun-ce/admin_installation_values.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ mpi-operator:
3636
deployment:
3737
create: false
3838

39-
minio:
39+
seaweedfs:
4040
enabled: false
4141

4242
spark-operator:

charts/mlrun-ce/non_admin_cluster_ip_installation_values.yaml

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -35,17 +35,8 @@ mpi-operator:
3535
clusterResources:
3636
create: false
3737

38-
minio:
39-
service:
40-
type: ClusterIP
41-
port: 9000
42-
nodePort: ""
43-
consoleService:
44-
type: ClusterIP
45-
port: 9001
46-
nodePort: ""
47-
mode: standalone
48-
replicas: 1
38+
seaweedfs:
39+
enabled: true
4940

5041
timescaledb:
5142
service:

charts/mlrun-ce/non_admin_installation_values.yaml

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -34,17 +34,8 @@ mpi-operator:
3434
clusterResources:
3535
create: false
3636

37-
minio:
38-
service:
39-
type: NodePort
40-
port: 9000
41-
nodePort: 30080
42-
consoleService:
43-
type: NodePort
44-
port: 9001
45-
nodePort: 30090
46-
mode: standalone
47-
replicas: 1
37+
seaweedfs:
38+
enabled: true
4839

4940
spark-operator:
5041
enabled: false

charts/mlrun-ce/requirements.lock

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,9 @@ dependencies:
88
- name: mpi-operator
99
repository: https://v3io.github.io/helm-charts/stable
1010
version: 0.6.0
11-
- name: minio
12-
repository: https://charts.min.io/
13-
version: 5.2.0
11+
- name: seaweedfs
12+
repository: https://seaweedfs.github.io/seaweedfs/helm
13+
version: 4.0.407
1414
- name: spark-operator
1515
repository: https://kubeflow.github.io/spark-operator
1616
version: 2.1.0
@@ -20,5 +20,5 @@ dependencies:
2020
- name: strimzi-kafka-operator
2121
repository: https://strimzi.io/charts/
2222
version: 0.48.0
23-
digest: sha256:542955b13f2da791768eebe8e25092a8977fba987259ebe6ad85e4b977a7963b
24-
generated: "2026-01-14T13:52:54.335415+02:00"
23+
digest: sha256:f87ec580f73178cfc897d57e26f5d7b049900f1b7ef75bfe198ca327eb2ed06d
24+
generated: "2026-02-12T23:52:46.490844+02:00"

charts/mlrun-ce/requirements.yaml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,10 @@ dependencies:
99
- name: mpi-operator
1010
version: "0.6.0"
1111
repository: "https://v3io.github.io/helm-charts/stable"
12-
- name: minio
13-
repository: "https://charts.min.io/"
14-
version: "5.2.0"
15-
condition: minio.enabled
12+
- name: seaweedfs
13+
repository: "https://seaweedfs.github.io/seaweedfs/helm"
14+
version: "4.0.407"
15+
condition: seaweedfs.enabled
1616
- name: spark-operator
1717
repository: "https://kubeflow.github.io/spark-operator"
1818
version: "2.1.0"

charts/mlrun-ce/templates/NOTES.txt

Lines changed: 15 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,10 @@
1-
{{- if or (.Values.jupyterNotebook.enabled) (.Values.mlrun.enabled) (.Values.minio.enabled) (.Values.pipelines.enabled) (index .Values "kube-prometheus-stack" "enabled") }}
1+
{{- if or (.Values.jupyterNotebook.enabled) (.Values.mlrun.enabled) (.Values.seaweedfs.enabled) (.Values.pipelines.enabled) (index .Values "kube-prometheus-stack" "enabled") }}
22
You're up and running!
3+
{{- if and .Values.pipelines.enabled (not .Values.seaweedfs.enabled) }}
4+
⚠️ WARNING: seaweedfs.enabled must be set to true when using pipelines
5+
for storing pipeline artifacts. Pipelines may not work correctly
6+
without an S3-compatible storage backend!
7+
{{- end }}
38

49
{{- if .Values.jupyterNotebook.enabled }}
510
{{- "\n" }}
@@ -57,41 +62,29 @@ mlrun-api.{{ .Values.global.externalHostAddress }}
5762
{{- end }}
5863
{{- end }}
5964

60-
{{- if .Values.minio.enabled }}
61-
{{- if ne .Values.global.infrastructure.kind "aws" }}
62-
{{- "\n" }}
63-
Minio UI is available at:
64-
{{- if .Values.minio.ingress.enabled }}
65-
{{ (index .Values.minio.consoleIngress.hosts 0) }}
66-
{{- else }}
67-
{{ .Values.global.externalHostAddress }}:{{ .Values.minio.consoleService.nodePort }}
68-
{{- end }}
69-
- username: {{ .Values.minio.rootUser }}
70-
- password: {{ .Values.minio.rootPassword }}
71-
{{- end }}
72-
{{- end }}
7365

74-
{{- if .Values.minio.enabled }}
66+
{{- if .Values.seaweedfs.enabled }}
7567
{{- if ne .Values.global.infrastructure.kind "aws" }}
68+
{{- if and .Values.seaweedfs.admin .Values.seaweedfs.admin.enabled }}
7669
{{- "\n" }}
77-
Minio API is available at:
78-
{{- if .Values.minio.ingress.enabled }}
79-
{{ (index .Values.minio.ingress.hosts 0) }}
70+
SeaweedFS Admin UI is available at:
71+
{{- if and .Values.seaweedfs.adminService .Values.seaweedfs.adminService.ingress .Values.seaweedfs.adminService.ingress.enabled }}
72+
{{ .Values.seaweedfs.adminService.ingress.host }}
8073
{{- else }}
81-
{{ .Values.global.externalHostAddress }}:{{ .Values.minio.service.nodePort }}
74+
{{ .Values.global.externalHostAddress }}:{{ .Values.seaweedfs.adminService.nodePort | default 30093 }}
75+
{{- end }}
76+
- S3 credentials: minio / minio123
8277
{{- end }}
8378
{{- end }}
8479
{{- end }}
8580

86-
{{- if and .Values.pipelines.enabled .Values.pipelines.ui.enabled -}} }}
81+
{{- if and .Values.pipelines.enabled .Values.pipelines.ui.enabled }}
8782
{{- if ne .Values.global.infrastructure.kind "aws" }}
88-
{{- if not .Values.minio.ingress.enabled }}
8983
{{- "\n" }}
9084
Pipelines UI is available at:
9185
{{ .Values.global.externalHostAddress }}:{{ .Values.pipelines.service.nodePort }}
9286
{{- end }}
9387
{{- end }}
94-
{{- end }}
9588

9689
{{- if index .Values "kube-prometheus-stack" "enabled" }}
9790
{{- "\n" }}

charts/mlrun-ce/templates/_helpers.tpl

Lines changed: 54 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -123,25 +123,75 @@ Create chart name and version as used by the chart label.
123123
{{- end -}}
124124

125125
{{/*
126-
Minio Service URL
126+
=============================================================================
127+
S3 Storage Backend Helpers
128+
Supports both MinIO and SeaweedFS as S3-compatible storage backends
129+
=============================================================================
130+
*/}}
131+
132+
{{/*
133+
S3 Service URL - returns the endpoint URL for SeaweedFS
134+
*/}}
135+
{{- define "mlrun-ce.s3.service.url" -}}
136+
http://seaweedfs-s3.{{.Release.Namespace}}.svc.cluster.local:{{ .Values.seaweedfs.s3.port }}
137+
{{- end -}}
138+
139+
{{/*
140+
S3 Service Host - returns just the hostname for pipeline config
141+
*/}}
142+
{{- define "mlrun-ce.s3.service.host" -}}
143+
seaweedfs-s3.{{.Release.Namespace}}.svc.cluster.local
144+
{{- end -}}
145+
146+
{{/*
147+
S3 Service Port - returns the port for pipeline config
148+
*/}}
149+
{{- define "mlrun-ce.s3.service.port" -}}
150+
{{- .Values.seaweedfs.s3.port | toString -}}
151+
{{- end -}}
152+
153+
{{/*
154+
S3 Access Key - uses top-level s3.accessKey for all components (MLRun, Jupyter, Pipelines)
155+
*/}}
156+
{{- define "mlrun-ce.s3.accessKey" -}}
157+
{{- .Values.s3.accessKey -}}
158+
{{- end -}}
159+
160+
{{/*
161+
S3 Secret Key - uses top-level s3.secretKey for all components (MLRun, Jupyter, Pipelines)
162+
*/}}
163+
{{- define "mlrun-ce.s3.secretKey" -}}
164+
{{- .Values.s3.secretKey -}}
165+
{{- end -}}
166+
167+
{{/*
168+
S3 Bucket - uses top-level s3.bucket for all components
169+
*/}}
170+
{{- define "mlrun-ce.s3.bucket" -}}
171+
{{- .Values.s3.bucket -}}
172+
{{- end -}}
173+
174+
{{/*
175+
Legacy Minio Service URL - kept for backward compatibility
127176
*/}}
128177
{{- define "mlrun-ce.minio.service.url" -}}
129-
http://minio.{{.Release.Namespace}}.svc.cluster.local:{{ .Values.minio.service.port }}
178+
{{ include "mlrun-ce.s3.service.url" . }}
130179
{{- end -}}
131180
{{- define "mlrun-ce.minio-pipeline.service.url" -}}
132-
minio.{{.Release.Namespace}}.svc.cluster.local
181+
{{ include "mlrun-ce.s3.service.host" . }}
133182
{{- end -}}
134183

135184
{{/*
136185
MLRun storage auto mount params
137186
Global toggle is for fast toggling between on-prem/standalone and s3 cases
138187
Can be overriden if params are explicitly specified
188+
Uses SeaweedFS as the storage backend
139189
*/}}
140190
{{- define "mlrun.storage.auto.mount.params" -}}
141191
{{- if hasKey .Values.mlrun "storageAutoMountParams" -}}
142192
{{ .Values.mlrun.storageAutoMountParams }}
143193
{{- else if not .Values.global.infrastructure.aws.s3NonAnonymous -}}
144-
"aws_access_key={{ .Values.minio.rootUser }},aws_secret_key={{ .Values.minio.rootPassword }},endpoint_url={{ include "mlrun-ce.minio.service.url" . }}"
194+
"aws_access_key={{ include "mlrun-ce.s3.accessKey" . }},aws_secret_key={{ include "mlrun-ce.s3.secretKey" . }},endpoint_url={{ include "mlrun-ce.s3.service.url" . }}"
145195
{{- else -}}
146196
"non_anonymous=True"
147197
{{- end -}}

0 commit comments

Comments
 (0)