Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
33 commits
Select commit Hold shift + click to select a range
3e26ccb
first commit
GiladShapira94 Apr 15, 2026
91aa535
fix
GiladShapira94 Apr 15, 2026
355728a
fix run issue
GiladShapira94 Apr 16, 2026
ba88c03
fix run issue
GiladShapira94 Apr 16, 2026
5ed1f83
fix run issue
GiladShapira94 Apr 16, 2026
9640e9c
remove label
GiladShapira94 Apr 16, 2026
cbe71fc
fix after review
GiladShapira94 Apr 20, 2026
6264877
Merge remote-tracking branch 'upstream/development' into ce-worfklows
GiladShapira94 Apr 26, 2026
3413976
fix after review
GiladShapira94 Apr 26, 2026
8ec1302
Merge remote-tracking branch 'upstream/development' into ce-worfklows
GiladShapira94 Apr 26, 2026
5364f3c
first commit
GiladShapira94 Apr 27, 2026
61988fb
fix installation issue
GiladShapira94 Apr 27, 2026
ae6842e
Merge pull request #1 from GiladShapira94/ce-worfklows
GiladShapira94 Apr 27, 2026
3ac86b3
Update release.yml
GiladShapira94 Apr 27, 2026
9618888
change chart version
GiladShapira94 Apr 28, 2026
c95a662
Update pr-validation.yml
GiladShapira94 Apr 28, 2026
59655d2
Update pr-validation.yml
GiladShapira94 Apr 28, 2026
e945709
Merge pull request #3 from GiladShapira94/CEML-696
GiladShapira94 Apr 28, 2026
55691a6
Update release.yml
GiladShapira94 Apr 28, 2026
efa5752
[Fix] testing fix
GiladShapira94 Apr 28, 2026
a3dbc06
Merge remote-tracking branch 'origin/development' into development
GiladShapira94 Apr 28, 2026
252af2c
print the release rc
GiladShapira94 Apr 28, 2026
c6b4d1f
Merge remote-tracking branch 'upstream/development' into development
GiladShapira94 May 3, 2026
58fb414
Merge remote-tracking branch 'upstream/development' into development
GiladShapira94 May 12, 2026
0f1e167
first commit
GiladShapira94 May 12, 2026
f923147
add local mode
GiladShapira94 May 19, 2026
61566c6
fix small issues
GiladShapira94 May 19, 2026
c8b21ff
fix small issues
GiladShapira94 May 19, 2026
061dcfc
fix small issues
GiladShapira94 May 26, 2026
53027c7
revert pipelines changes
GiladShapira94 May 26, 2026
889767b
small fix
GiladShapira94 May 26, 2026
a167681
Merge remote-tracking branch 'upstream/development' into separate-dat…
GiladShapira94 Jun 3, 2026
24515cc
fix after reveiw
GiladShapira94 Jun 3, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion charts/mlrun-ce/Chart.yaml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
apiVersion: v1
name: mlrun-ce
version: 0.11.0
version: 0.12.0-rc.1
description: MLRun Open Source Stack
home: https://iguazio.com
icon: https://www.iguazio.com/wp-content/uploads/2019/10/Iguazio-Logo.png
Expand Down
2 changes: 1 addition & 1 deletion charts/mlrun-ce/templates/NOTES.txt
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@ SeaweedFS Admin UI is available at:
{{ .Values.global.externalHostAddress }}:{{ .Values.seaweedfs.adminService.nodePort | default 30093 }}
{{- end }}
{{- end }}
- S3 credentials: {{ .Values.storage.s3.accessKey }} / {{ .Values.storage.s3.secretKey }}
- S3 credentials: {{ .Values.storage.local.accessKey }} / {{ .Values.storage.local.secretKey }}
{{- end }}
{{- end }}

Expand Down
101 changes: 92 additions & 9 deletions charts/mlrun-ce/templates/_helpers.tpl
Original file line number Diff line number Diff line change
Expand Up @@ -151,24 +151,107 @@ S3 Service Port - returns the port for pipeline config
{{- end -}}

{{/*
S3 Access Key - uses top-level s3.storage.accessKey for all components (MLRun, Jupyter, Pipelines)
S3 Access Key - for MLRun and Jupyter.
In "local" mode uses the internal SeaweedFS credential (storage.local.accessKey).
In "s3" mode uses the external AWS credential (storage.s3.accessKey).
*/}}
{{- define "mlrun-ce.s3.accessKey" -}}
{{- if eq .Values.storage.mode "local" -}}
{{- .Values.storage.local.accessKey -}}
{{- else -}}
{{- .Values.storage.s3.accessKey -}}
{{- end -}}
{{- end -}}

{{/*
S3 Secret Key - uses top-level s3.storage.secretKey for all components (MLRun, Jupyter, Pipelines)
S3 Secret Key - for MLRun and Jupyter.
*/}}
{{- define "mlrun-ce.s3.secretKey" -}}
{{- if eq .Values.storage.mode "local" -}}
{{- .Values.storage.local.secretKey -}}
{{- else -}}
{{- .Values.storage.s3.secretKey -}}
{{- end -}}
{{- end -}}

{{/*
S3 Bucket - uses top-level s3.storage.bucket for all components
S3 Bucket - for MLRun and Jupyter.
*/}}
{{- define "mlrun-ce.s3.bucket" -}}
{{- .Values.storage.s3.bucket -}}
{{- if eq .Values.storage.mode "local" -}}
{{- .Values.storage.local.bucket -}}
{{- else -}}
{{- coalesce .Values.global.infrastructure.aws.bucketName .Values.storage.s3.bucket "mlrun" -}}
Comment thread
GiladShapira94 marked this conversation as resolved.
{{- end -}}
{{- end -}}

{{/*
Used by: SeaweedFS IAM config, bucket-init job, and KFP Pipelines.
Always points at the in-cluster SeaweedFS regardless of storage.mode.
*/}}
{{- define "mlrun-ce.seaweedfs.s3.accessKey" -}}
{{- .Values.storage.local.accessKey -}}
{{- end -}}

{{/*
SeaweedFS S3 Secret Key - sourced from storage.local.secretKey.
*/}}
{{- define "mlrun-ce.seaweedfs.s3.secretKey" -}}
{{- .Values.storage.local.secretKey -}}
{{- end -}}

{{/*
SeaweedFS S3 Bucket - sourced from storage.local.bucket.
*/}}
{{- define "mlrun-ce.seaweedfs.s3.bucket" -}}
{{- .Values.storage.local.bucket -}}
{{- end -}}

{{/*
Pipelines S3 Access Key - always uses the in-cluster SeaweedFS credentials.
KFP always uses SeaweedFS regardless of storage.mode.
*/}}
{{- define "mlrun-ce.pipelines.s3.accessKey" -}}
{{- include "mlrun-ce.seaweedfs.s3.accessKey" . -}}
{{- end -}}

{{/*
Pipelines S3 Secret Key - always uses the in-cluster SeaweedFS credentials.
*/}}
{{- define "mlrun-ce.pipelines.s3.secretKey" -}}
{{- include "mlrun-ce.seaweedfs.s3.secretKey" . -}}
{{- end -}}

{{/*
Pipelines S3 Bucket - always uses the SeaweedFS bucket.
*/}}
{{- define "mlrun-ce.pipelines.s3.bucket" -}}
{{- include "mlrun-ce.seaweedfs.s3.bucket" . -}}
{{- end -}}

{{/*
Pipelines S3 Host - always in-cluster SeaweedFS.
*/}}
{{- define "mlrun-ce.pipelines.s3.host" -}}
{{- include "mlrun-ce.s3.service.host" . -}}
{{- end -}}

{{/*
Pipelines S3 Port - always SeaweedFS port.
*/}}
{{- define "mlrun-ce.pipelines.s3.port" -}}
{{- include "mlrun-ce.s3.service.port" . -}}
{{- end -}}

{{/*
Pipelines S3 Secure / Insecure - always plain HTTP (in-cluster SeaweedFS).
*/}}
{{- define "mlrun-ce.pipelines.s3.secure" -}}
false
{{- end -}}

{{- define "mlrun-ce.pipelines.s3.insecure" -}}
true
{{- end -}}
Comment thread
GiladShapira94 marked this conversation as resolved.

{{/*
Expand Down Expand Up @@ -197,7 +280,7 @@ s3://
{{- end -}}

{{- define "mlrun-ce.artifactPath" -}}
{{- $bucket := .Values.global.infrastructure.aws.bucketName | default "mlrun" -}}
{{- $bucket := include "mlrun-ce.s3.bucket" . -}}
{{- $container := .Values.storage.azure.containerName | default "" -}}
{{- if eq .Values.storage.mode "azure-blob" -}}
az://{{ $container }}/projects/{{ `{{run.project}}` }}/artifacts
Expand All @@ -207,7 +290,7 @@ s3://{{ $bucket }}/projects/{{ `{{run.project}}` }}/artifacts
{{- end -}}

{{- define "mlrun-ce.featureStore.dataPrefix" -}}
{{- $bucket := .Values.global.infrastructure.aws.bucketName | default "mlrun" -}}
{{- $bucket := include "mlrun-ce.s3.bucket" . -}}
{{- $container := .Values.storage.azure.containerName | default "" -}}
{{- if eq .Values.storage.mode "azure-blob" -}}
az://{{ $container }}/projects/{project}/FeatureStore/{name}/{kind}
Expand All @@ -217,7 +300,7 @@ s3://{{ $bucket }}/projects/{project}/FeatureStore/{name}/{kind}
{{- end -}}

{{- define "mlrun-ce.model-endpoint.monitoring.userSpace" -}}
{{- $bucket := .Values.global.infrastructure.aws.bucketName | default "mlrun" -}}
{{- $bucket := include "mlrun-ce.s3.bucket" . -}}
{{- $container := .Values.storage.azure.containerName | default "" -}}
{{- if eq .Values.storage.mode "azure-blob" -}}
az://{{ $container }}/projects/{{ `{{project}}` }}/model-endpoints/{{ `{{kind}}` }}
Expand All @@ -227,7 +310,7 @@ s3://{{ $bucket }}/projects/{{ `{{project}}` }}/model-endpoints/{{ `{{kind}}` }}
{{- end -}}

{{- define "mlrun-ce.model-endpoint.monitoring.application" -}}
{{- $bucket := .Values.global.infrastructure.aws.bucketName | default "mlrun" -}}
{{- $bucket := include "mlrun-ce.s3.bucket" . -}}
{{- $container := .Values.storage.azure.containerName | default "" -}}
{{- if eq .Values.storage.mode "azure-blob" -}}
az://{{ $container }}/users/pipelines/{{ `{{project}}` }}/monitoring-apps/
Expand All @@ -237,7 +320,7 @@ s3://{{ $bucket }}/users/pipelines/{{ `{{project}}` }}/monitoring-apps/
{{- end -}}

{{- define "mlrun-ce.model-endpoint.monitoring.default" -}}
{{- $bucket := .Values.global.infrastructure.aws.bucketName | default "mlrun" -}}
{{- $bucket := include "mlrun-ce.s3.bucket" . -}}
{{- $container := .Values.storage.azure.containerName | default "" -}}
{{- if eq .Values.storage.mode "azure-blob" -}}
az://{{ $container }}/projects/{{ `{{project}}` }}/model-endpoints/{{ `{{kind}}` }}
Expand Down
2 changes: 1 addition & 1 deletion charts/mlrun-ce/templates/config/mlrun-env-configmap.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ data:
MLRUN_HTTPDB__PROJECTS__LEADER: mlrun
MLRUN_HTTPDB__PROJECTS__FOLLOWERS: nuclio
# Storage credentials are loaded from the 'storage-credentials' Secret
# (AWS_ACCESS_KEY_ID/AWS_SECRET_ACCESS_KEY/AWS_ENDPOINT_URL_S3 for s3, or AZURE_STORAGE_* for azure-blob)
# (local: AWS_ACCESS_KEY_ID/AWS_SECRET_ACCESS_KEY/AWS_ENDPOINT_URL_S3; s3: AWS_ACCESS_KEY_ID/AWS_SECRET_ACCESS_KEY; azure-blob: AZURE_STORAGE_*)
MLRUN_FUNCTION__SPEC__SERVICE_ACCOUNT__DEFAULT: {{ .Values.mlrun.api.functionSpecServiceAccountDefault | default "" | quote }}
MLRUN_HTTPDB__REAL_PATH: {{ include "mlrun-ce.httpdb.realPath" . | quote }}
MLRUN_ARTIFACT_PATH: {{ include "mlrun-ce.artifactPath" . | quote }}
Expand Down
6 changes: 3 additions & 3 deletions charts/mlrun-ce/templates/config/storage-secret.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,7 @@ stringData:
{{- with .Values.storage.azure.tenantId }}
AZURE_STORAGE_TENANT_ID: {{ . }}
{{- end }}
{{- else }}
{{- if not .Values.global.infrastructure.aws.s3NonAnonymous }}
{{- else if not .Values.global.infrastructure.aws.s3NonAnonymous }}
apiVersion: v1
kind: Secret
metadata:
Expand All @@ -37,6 +36,7 @@ type: Opaque
stringData:
AWS_ACCESS_KEY_ID: {{ include "mlrun-ce.s3.accessKey" . }}
AWS_SECRET_ACCESS_KEY: {{ include "mlrun-ce.s3.secretKey" . }}
{{- if eq .Values.storage.mode "local" }}
AWS_ENDPOINT_URL_S3: {{ include "mlrun-ce.s3.service.url" . }}
{{- end }}
{{- end }}
{{- end }}
11 changes: 10 additions & 1 deletion charts/mlrun-ce/templates/config/storage-validation.yaml
Original file line number Diff line number Diff line change
@@ -1,6 +1,15 @@
{{- if and (eq .Values.storage.mode "s3") (not .Values.storage.s3.bucket) }}

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

storage.s3.{accessKey,secretKey} default to empty strings but only bucket is validated. Switching to s3 mode without creds will silently produce an unusable Secret. Please also fail-fast when accessKey/secretKey are empty (unless global.infrastructure.aws.s3NonAnonymous is true).

{{ fail "storage.mode is set to \"s3\" but storage.s3.bucket is not provided. Please set storage.s3.bucket." }}
{{- end }}
{{- if and (eq .Values.storage.mode "s3") (not .Values.global.infrastructure.aws.s3NonAnonymous) (not .Values.storage.s3.accessKey) }}
{{ fail "storage.mode is set to \"s3\" but storage.s3.accessKey is empty. Set storage.s3.accessKey, or set global.infrastructure.aws.s3NonAnonymous=true to use IAM role-based access." }}
{{- end }}
{{- if and (eq .Values.storage.mode "s3") (not .Values.global.infrastructure.aws.s3NonAnonymous) (not .Values.storage.s3.secretKey) }}
{{ fail "storage.mode is set to \"s3\" but storage.s3.secretKey is empty. Set storage.s3.secretKey, or set global.infrastructure.aws.s3NonAnonymous=true to use IAM role-based access." }}
{{- end }}
{{- if and (eq .Values.storage.mode "local") (not .Values.storage.local.bucket) }}
{{ fail "storage.mode is set to \"local\" but storage.local.bucket is not provided. Please set storage.local.bucket." }}
{{- end }}
{{- if and (eq .Values.storage.mode "azure-blob") (not .Values.storage.azure.containerName) }}
{{ fail "storage.mode is set to \"azure-blob\" but storage.azure.containerName is not provided. Please set storage.azure.containerName." }}
{{- end }}
{{- end }}
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
{{- if .Values.pipelines.enabled -}}
apiVersion: v1
data:
objectStoreServiceHost: {{ include "mlrun-ce.s3.service.host" . }}
objectStoreServicePort: {{ include "mlrun-ce.s3.service.port" . | quote }}
objectStoreServiceHost: {{ include "mlrun-ce.pipelines.s3.host" . }}
objectStoreServicePort: {{ include "mlrun-ce.pipelines.s3.port" . | quote }}
ConMaxLifeTime: 120s
appName: pipeline
appVersion: {{ .Values.pipelines.images.apiServer.tag }}
autoUpdatePipelineDefaultVersion: "false"
bucketName: "{{ include "mlrun-ce.s3.bucket" . }}"
bucketName: "{{ include "mlrun-ce.pipelines.s3.bucket" . }}"
cacheDb: cachedb
cacheImage: {{ .Values.pipelines.images.cacheImage.repository }}:{{ .Values.pipelines.images.cacheImage.tag }}
cacheNodeRestrictions: "false"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,9 @@ data:
artifactRepository: |
archiveLogs: {{ .Values.pipelines.archiveLogs }}
s3:
endpoint: "{{ include "mlrun-ce.s3.service.host" . }}:{{ include "mlrun-ce.s3.service.port" . }}"
bucket: "{{ include "mlrun-ce.s3.bucket" . }}"
insecure: true
endpoint: "{{ include "mlrun-ce.pipelines.s3.host" . }}:{{ include "mlrun-ce.pipelines.s3.port" . }}"
bucket: "{{ include "mlrun-ce.pipelines.s3.bucket" . }}"
insecure: {{ include "mlrun-ce.pipelines.s3.insecure" . }}
accessKeySecret:
name: mlpipeline-seaweedfs-artifact
key: accesskey
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,9 +33,9 @@ spec:
- name: VIEWER_TENSORBOARD_POD_TEMPLATE_SPEC_PATH
value: /etc/config/viewer-pod-template.json
- name: MINIO_HOST
value: {{ include "mlrun-ce.s3.service.host" . }}
value: {{ include "mlrun-ce.pipelines.s3.host" . }}
- name: MINIO_PORT
value: {{ include "mlrun-ce.s3.service.port" . | quote }}
value: {{ include "mlrun-ce.pipelines.s3.port" . | quote }}
- name: MINIO_NAMESPACE
# This is required because otherwise the namespace is appended to the MinIO hostname used to fetch artifacts, causing the fetch to fail
value: ""
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@ spec:
name: pipeline-install-config
key: objectStoreServicePort
- name: OBJECTSTORECONFIG_SECURE
value: "false"
value: {{ include "mlrun-ce.pipelines.s3.secure" . | quote }}
- name: OBJECTSTORECONFIG_BUCKETNAME
valueFrom:
configMapKeyRef:
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
{{- if .Values.pipelines.enabled -}}
apiVersion: v1
data:
accesskey: {{ include "mlrun-ce.s3.accessKey" . | b64enc | quote }}
secretkey: {{ include "mlrun-ce.s3.secretKey" . | b64enc | quote }}
accesskey: {{ include "mlrun-ce.pipelines.s3.accessKey" . | b64enc | quote }}
secretkey: {{ include "mlrun-ce.pipelines.s3.secretKey" . | b64enc | quote }}
kind: Secret
metadata:
annotations:
Expand Down
6 changes: 3 additions & 3 deletions charts/mlrun-ce/templates/seaweedfs/s3-bucket-init-job.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -37,13 +37,13 @@ spec:
image: amazon/aws-cli:2.15.0
env:
- name: AWS_ACCESS_KEY_ID
value: {{ include "mlrun-ce.s3.accessKey" . | quote }}
value: {{ include "mlrun-ce.seaweedfs.s3.accessKey" . | quote }}
- name: AWS_SECRET_ACCESS_KEY
value: {{ include "mlrun-ce.s3.secretKey" . | quote }}
value: {{ include "mlrun-ce.seaweedfs.s3.secretKey" . | quote }}
- name: AWS_ENDPOINT_URL
value: {{ include "mlrun-ce.s3.service.url" . | quote }}
- name: BUCKET_NAME
value: {{ include "mlrun-ce.s3.bucket" . | quote }}
value: {{ include "mlrun-ce.seaweedfs.s3.bucket" . | quote }}
command:
- /bin/sh
- -c
Expand Down
4 changes: 2 additions & 2 deletions charts/mlrun-ce/templates/seaweedfs/seaweedfs-s3-config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,8 @@ stringData:
"name": "admin",
"credentials": [
{
"accessKey": "{{ include "mlrun-ce.s3.accessKey" . }}",
"secretKey": "{{ include "mlrun-ce.s3.secretKey" . }}"
"accessKey": "{{ include "mlrun-ce.seaweedfs.s3.accessKey" . }}",
"secretKey": "{{ include "mlrun-ce.seaweedfs.s3.secretKey" . }}"
}
],
"actions": [
Expand Down
33 changes: 26 additions & 7 deletions charts/mlrun-ce/values.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -21,21 +21,39 @@ global:
domainNameCertificate: ~

# =============================================================================
# S3-compatible storage configuration
# These credentials are used by MLRun, Jupyter, and Kubeflow Pipelines
# to access the storage backend.
# S3-compatible storage configuration for MLRun and Jupyter.
# Kubeflow Pipelines always uses the bundled SeaweedFS β€” storage.mode only
# affects MLRun and Jupyter.
# =============================================================================

# storage.mode selects which backend credentials are injected into the 'storage-credentials' Secret.
# Options:
# s3 (default) - uses storage.s3.accessKey/secretKey/bucket with SeaweedFS endpoint
# azure-blob - uses storage.azure.* fields
# local (default) - bundled SeaweedFS; injects AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY,
# and AWS_ENDPOINT_URL_S3 pointing at the in-cluster SeaweedFS S3 service.
# Credentials come from storage.local.accessKey/secretKey; artifact path from
# storage.local.bucket.
# SeaweedFS IAM, bucket-init job, and KFP Pipelines always use storage.local.*
# regardless of storage.mode.
# s3 - external AWS S3; injects AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY only
# into MLRun and Jupyter (no custom endpoint β€” SDK uses the standard AWS endpoint).
# Credentials come from storage.s3.accessKey/secretKey; artifact path from
# storage.s3.bucket (or global.infrastructure.aws.bucketName).
# SeaweedFS and KFP Pipelines continue to use storage.local.* unchanged.
# azure-blob - Azure Blob Storage; injects AZURE_STORAGE_* fields from storage.azure.*
storage:
mode: s3
s3:
mode: local
# Single source of truth for the in-cluster SeaweedFS.
# Always used by: SeaweedFS IAM config, bucket-init job, and KFP Pipelines.
# Also used by MLRun and Jupyter when mode is "local".
local:
accessKey: "seaweed"
secretKey: "seaweed123"
bucket: "mlrun"
# External AWS S3 credentials β€” only applied to MLRun and Jupyter when mode is "s3".
s3:
accessKey: ""
secretKey: ""
bucket: ""
Comment thread
GiladShapira94 marked this conversation as resolved.
azure:
containerName: ""
connectionString: ""
Expand Down Expand Up @@ -357,6 +375,7 @@ seaweedfs:
# S3 auth config - enableAuth gates the seaweedfs-s3-config Secret creation in
# templates/seaweedfs/seaweedfs-s3-config.yaml even though the dedicated s3 pod
# is disabled. The secret is consumed by allInOne.s3.existingConfigSecret below.
# Credentials are sourced from storage.local.* β€” for the in-cluster SeaweedFS.
s3:
port: 8333
enableAuth: true
Expand Down
Loading