[CELEBORN-1528][HELM] Use volume claim template to support various storage backend

### What changes were proposed in this pull request?

- Add support for configuring volumeClaimTemplates by adding new values `master.volumeClaimTemplates` and `worker.volumeClaimTemplates`.

### Why are the changes needed?

Use volume claim template to support various storage backend.

### Does this PR introduce _any_ user-facing change?

Yes. New Helm values `master.volumeClaimTemplates` and `worker.volumeClaimTemplates` are added.

### How was this patch tested?

```bash
helm unittest charts/celeborn --file "tests/**/*_test.yaml" --strict --debug
```

Closes #3277 from ChenYi015/helm/volume-claim-templates.

Authored-by: Yi Chen <github@chenyicn.net>
Signed-off-by: Wang, Fei <fwang12@ebay.com>
This commit is contained in:
Yi Chen 2025-05-27 16:32:46 -07:00 committed by Wang, Fei
parent 612464c69d
commit c83d498d99
6 changed files with 220 additions and 63 deletions

View File

@ -28,16 +28,6 @@ image:
# -- Image pull policy
pullPolicy: IfNotPresent
service:
# -- Specifies service type
type: ClusterIP
# -- Specifies service port
port: 9097
cluster:
# -- Specifies Kubernetes cluster name
name: cluster
celeborn:
celeborn.metrics.enabled: false
celeborn.worker.storage.dirs: /mnt/disk1:disktype=SSD:capacity=1Gi,/mnt/disk2:disktype=SSD:capacity=1Gi
@ -134,26 +124,10 @@ worker:
podMonitor:
# -- Specifies whether to enable creating pod monitors for Celeborn pods
enable: false
# -- Specifies pod metrics endpoint
podMetricsEndpoint:
# Specifies scheme
scheme: http
# Specifies scrape interval
interval: 5s
# Specifies port name
portName: metrics
serviceAccount:
# -- Specifies whether to create a service account for Celeborn
create: false
# -- Specifies the name of the service account
name: default
rbac:
create: false
roleName: default
roleBindingName: default
rules:
- apiGroups: [""]
resources: ["pods"]
verbs: ["create", "list", "delete"]

View File

@ -23,10 +23,14 @@ metadata:
{{- include "celeborn.master.labels" . | nindent 4 }}
spec:
replicas: {{ .Values.master.replicas }}
serviceName: {{ include "celeborn.master.service.name" . }}
selector:
matchLabels:
{{- include "celeborn.master.selectorLabels" . | nindent 6 }}
{{- with .Values.master.volumeClaimTemplates }}
volumeClaimTemplates:
{{- toYaml . | nindent 2 }}
{{- end }}
serviceName: {{ include "celeborn.master.service.name" . }}
template:
metadata:
labels:
@ -37,7 +41,18 @@ spec:
{{- toYaml . | nindent 8 }}
{{- end }}
spec:
serviceAccountName: {{ include "celeborn.serviceAccountName" . }}
{{- /* Add an init container to chown mount paths of Celeborn master volumes if necessary. */}}
{{- $paths := list }}
{{- range $volumeMount := .Values.master.volumeMounts }}
{{- range $volume := $.Values.master.volumes }}
{{- if eq $volume.name $volumeMount.name }}
{{- if or $volume.hostPath $volume.emptyDir }}
{{- $paths = append $paths $volumeMount.mountPath }}
{{- end }}
{{- end }}
{{- end }}
{{- end }}
{{- if $paths }}
initContainers:
- name: chown-celeborn-master-volume
image: {{ include "celeborn.image" . }}
@ -48,14 +63,8 @@ spec:
- chown
- -R
- {{ .Values.master.podSecurityContext.runAsUser | default 10006 }}:{{ .Values.master.podSecurityContext.runAsGroup | default 10006 }}
{{- range $volumeMount := .Values.master.volumeMounts }}
{{- range $volume := $.Values.master.volumes }}
{{- if eq $volume.name $volumeMount.name }}
{{- if or $volume.hostPath $volume.emptyDir }}
- {{ $volumeMount.mountPath }}
{{- end }}
{{- end }}
{{- end }}
{{- range $path := $paths }}
- {{ $path }}
{{- end }}
{{- with .Values.master.volumeMounts }}
volumeMounts:
@ -67,6 +76,7 @@ spec:
{{- end }}
securityContext:
runAsUser: 0
{{- end }}
containers:
- name: {{ .Chart.Name }}
image: {{ include "celeborn.image" . }}
@ -161,8 +171,10 @@ spec:
{{- with .Values.master.hostNetwork }}
hostNetwork: {{ . }}
{{- end }}
serviceAccountName: {{ include "celeborn.serviceAccountName" . }}
{{- with .Values.master.podSecurityContext }}
securityContext:
{{- toYaml . | nindent 8 }}
{{- end }}
terminationGracePeriodSeconds: 30

View File

@ -23,10 +23,14 @@ metadata:
{{- include "celeborn.worker.labels" . | nindent 4 }}
spec:
replicas: {{ .Values.worker.replicas }}
serviceName: {{ include "celeborn.worker.service.name" . }}
selector:
matchLabels:
{{- include "celeborn.worker.selectorLabels" . | nindent 6 }}
{{- with .Values.worker.volumeClaimTemplates }}
volumeClaimTemplates:
{{- toYaml . | nindent 2 }}
{{- end }}
serviceName: {{ include "celeborn.worker.service.name" . }}
template:
metadata:
labels:
@ -37,7 +41,18 @@ spec:
{{- toYaml . | nindent 8 }}
{{- end }}
spec:
serviceAccountName: {{ include "celeborn.serviceAccountName" . }}
{{- /* Add an init container to chown mount paths of Celeborn workers volume if necessary. */}}
{{- $paths := list }}
{{- range $volumeMount := .Values.worker.volumeMounts }}
{{- range $volume := $.Values.worker.volumes }}
{{- if eq $volume.name $volumeMount.name }}
{{- if or $volume.hostPath $volume.emptyDir }}
{{- $paths = append $paths $volumeMount.mountPath }}
{{- end }}
{{- end }}
{{- end }}
{{- end }}
{{- if $paths }}
initContainers:
- name: chown-celeborn-worker-volume
image: {{ include "celeborn.image" . }}
@ -48,14 +63,8 @@ spec:
- chown
- -R
- {{ .Values.worker.podSecurityContext.runAsUser | default 10006 }}:{{ .Values.worker.podSecurityContext.runAsGroup | default 10006 }}
{{- range $volumeMount := .Values.worker.volumeMounts }}
{{- range $volume := $.Values.worker.volumes }}
{{- if eq $volume.name $volumeMount.name }}
{{- if or $volume.hostPath $volume.emptyDir }}
- {{ $volumeMount.mountPath }}
{{- end }}
{{- end }}
{{- end }}
{{- range $path := $paths }}
- {{ $path }}
{{- end }}
{{- with .Values.worker.volumeMounts }}
volumeMounts:
@ -67,6 +76,7 @@ spec:
{{- end }}
securityContext:
runAsUser: 0
{{- end }}
containers:
- name: {{ .Chart.Name }}
image: {{ include "celeborn.image" . }}
@ -160,6 +170,7 @@ spec:
{{- with .Values.worker.hostNetwork }}
hostNetwork: {{ . }}
{{- end }}
serviceAccountName: {{ include "celeborn.serviceAccountName" . }}
{{- with .Values.worker.podSecurityContext }}
securityContext:
{{- toYaml . | nindent 8 }}

View File

@ -376,3 +376,55 @@ tests:
- equal:
path: spec.template.spec.securityContext.fsGroup
value: 3000
- it: Should add volume claim templates if `master.volumeClaimTemplates` is set
set:
master:
volumeClaimTemplates:
- metadata:
name: test-volume-claim-template-1
spec:
accessModes:
- ReadWriteMany
resources:
request:
storage: 100Gi
limits:
storage: 100Gi
- metadata:
name: test-volume-claim-template-2
spec:
accessModes:
- ReadWriteOnce
resources:
request:
storage: 200Gi
limits:
storage: 200Gi
asserts:
- contains:
path: spec.volumeClaimTemplates
content:
metadata:
name: test-volume-claim-template-1
spec:
accessModes:
- ReadWriteMany
resources:
request:
storage: 100Gi
limits:
storage: 100Gi
- contains:
path: spec.volumeClaimTemplates
content:
metadata:
name: test-volume-claim-template-2
spec:
accessModes:
- ReadWriteOnce
resources:
request:
storage: 200Gi
limits:
storage: 200Gi

View File

@ -375,3 +375,55 @@ tests:
- equal:
path: spec.template.spec.securityContext.fsGroup
value: 3000
- it: Should add volume claim templates if `worker.volumeClaimTemplates` is set
set:
worker:
volumeClaimTemplates:
- metadata:
name: test-volume-claim-template-1
spec:
accessModes:
- ReadWriteMany
resources:
request:
storage: 100Gi
limits:
storage: 100Gi
- metadata:
name: test-volume-claim-template-2
spec:
accessModes:
- ReadWriteOnce
resources:
request:
storage: 200Gi
limits:
storage: 200Gi
asserts:
- contains:
path: spec.volumeClaimTemplates
content:
metadata:
name: test-volume-claim-template-1
spec:
accessModes:
- ReadWriteMany
resources:
request:
storage: 100Gi
limits:
storage: 100Gi
- contains:
path: spec.volumeClaimTemplates
content:
metadata:
name: test-volume-claim-template-2
spec:
accessModes:
- ReadWriteOnce
resources:
request:
storage: 200Gi
limits:
storage: 200Gi

View File

@ -195,13 +195,13 @@ master:
# -- Tolerations for Celeborn master pods.
tolerations:
# - key: key1
# operator: Equal
# value: value1
# effect: NoSchedule
# - key: key2
# operator: Exists
# effect: NoSchedule
# - key: key1
# operator: Equal
# value: value1
# effect: NoSchedule
# - key: key2
# operator: Exists
# effect: NoSchedule
# Priority class for Celeborn master pods.
priorityClass:
@ -227,6 +227,19 @@ master:
# The group ID to use when modifying the ownership and permissions of the mounted volumes.
fsGroup: 10006
# -- Volume claim templates for Celeborn master statefulset.
volumeClaimTemplates:
# - metadata:
# name: celeborn-ratis
# spec:
# accessModes:
# - ReadWriteOnce
# resources:
# requests:
# storage: 100Gi
# limits:
# storage: 100Gi
worker:
# -- Number of Celeborn worker replicas to deploy, should less than node number.
replicas: 5
@ -328,13 +341,13 @@ worker:
# -- Tolerations for Celeborn worker pods.
tolerations:
# - key: key1
# operator: Equal
# value: value1
# effect: NoSchedule
# - key: key2
# operator: Exists
# effect: NoSchedule
# - key: key1
# operator: Equal
# value: value1
# effect: NoSchedule
# - key: key2
# operator: Exists
# effect: NoSchedule
# Priority class for Celeborn worker pods.
priorityClass:
@ -360,6 +373,49 @@ worker:
# The group ID to use when modifying the ownership and permissions of the mounted volumes.
fsGroup: 10006
# -- Volume claim templates for Celeborn worker pods.
volumeClaimTemplates:
# - metadata:
# name: disk1
# spec:
# accessModes:
# - ReadWriteOnce
# resources:
# requests:
# storage: 100Gi
# limits:
# storage: 100Gi
# - metadata:
# name: disk2
# spec:
# accessModes:
# - ReadWriteOnce
# resources:
# requests:
# storage: 100Gi
# limits:
# storage: 100Gi
# - metadata:
# name: disk3
# spec:
# accessModes:
# - ReadWriteOnce
# resources:
# requests:
# storage: 100Gi
# limits:
# storage: 100Gi
# - metadata:
# name: disk4
# spec:
# accessModes:
# - ReadWriteOnce
# resources:
# requests:
# storage: 100Gi
# limits:
# storage: 100Gi
podMonitor:
# -- Specifies whether to enable creating pod monitors for Celeborn pods
enable: true
@ -383,6 +439,6 @@ rbac:
roleName: default
roleBindingName: default
rules:
- apiGroups: [""]
resources: ["pods"]
verbs: ["create", "list", "delete"]
- apiGroups: [""]
resources: ["pods"]
verbs: ["create", "list", "delete"]