Skip to content

Commit 9b2368b

Browse files
committed
feat: delete statefulsets if volumeClaimTemplates changes
1 parent 24bcd88 commit 9b2368b

File tree

5 files changed

+132
-0
lines changed

5 files changed

+132
-0
lines changed

charts/tempo-distributed/templates/_helpers.tpl

Lines changed: 124 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -298,3 +298,127 @@ Cluster name that shows up in dashboard metrics
298298
{{- define "tempo.clusterName" -}}
299299
{{ (include "tempo.calculatedConfig" . | fromYaml).cluster_name | default .Release.Name }}
300300
{{- end -}}
301+
302+
{{- define "tempo.statefulset.recreateOnSizeChangeHook" -}}
303+
{{- $renderedStatefulSets := list -}}
304+
{{- range $renderedStatefulSet := include (print .context.Template.BasePath .pathToStatefulsetTemplate) .context | splitList "---" -}}
305+
{{- with $renderedStatefulSet | fromYaml -}}
306+
{{- $renderedStatefulSets = append $renderedStatefulSets . -}}
307+
{{- end }}
308+
{{- end -}}
309+
{{- if $renderedStatefulSets }}
310+
{{- range $newStatefulSet := $renderedStatefulSets -}}
311+
{{- if $newStatefulSet.spec.volumeClaimTemplates }}
312+
{{- $currentStatefulset := lookup $newStatefulSet.apiVersion $newStatefulSet.kind $newStatefulSet.metadata.namespace $newStatefulSet.metadata.name -}}
313+
{{- $needsRecreation := false -}}
314+
{{- if $currentStatefulset -}}
315+
{{- if ne (len $newStatefulSet.spec.volumeClaimTemplates) (len $currentStatefulset.spec.volumeClaimTemplates) -}}
316+
{{- $needsRecreation = true -}}
317+
{{- else -}}
318+
{{- range $index, $newVolumeClaimTemplate := $newStatefulSet.spec.volumeClaimTemplates -}}
319+
{{- $currentVolumeClaimTemplateSpec := dict -}}
320+
{{- range $oldVolumeClaimTemplate := $currentStatefulset.spec.volumeClaimTemplates -}}
321+
{{- if eq $oldVolumeClaimTemplate.metadata.name $newVolumeClaimTemplate.metadata.name -}}
322+
{{- $currentVolumeClaimTemplateSpec = $oldVolumeClaimTemplate.spec -}}
323+
{{- end -}}
324+
{{- end }}
325+
{{- if or (not $currentVolumeClaimTemplateSpec) (ne $newVolumeClaimTemplate.spec.resources.requests.storage $currentVolumeClaimTemplateSpec.resources.requests.storage) -}}
326+
{{- $needsRecreation = true -}}
327+
{{- end -}}
328+
{{- end -}}
329+
{{- end -}}
330+
{{- end -}}
331+
{{- if $needsRecreation }}
332+
apiVersion: batch/v1
333+
kind: Job
334+
metadata:
335+
name: {{ $newStatefulSet.metadata.name }}-recreate
336+
namespace: {{ $newStatefulSet.metadata.namespace }}
337+
labels:
338+
{{- $newStatefulSet.metadata.labels | toYaml | nindent 4 }}
339+
app.kubernetes.io/component: statefulset-recreate-job
340+
annotations:
341+
"helm.sh/hook": pre-upgrade
342+
"helm.sh/hook-weight": "-5"
343+
"helm.sh/hook-delete-policy": before-hook-creation,hook-succeeded
344+
spec:
345+
ttlSecondsAfterFinished: 300
346+
template:
347+
metadata:
348+
name: {{ $newStatefulSet.metadata.name }}-recreate
349+
labels:
350+
{{- $newStatefulSet.metadata.labels | toYaml | nindent 8 }}
351+
spec:
352+
serviceAccountName: {{ $newStatefulSet.metadata.name }}-recreate
353+
restartPolicy: OnFailure
354+
containers:
355+
- name: recreate
356+
image: {{ printf "%s/rancher/kubectl:%s" (coalesce $.context.Values.global.image.registry "docker.io") $.context.Capabilities.KubeVersion.Version }}
357+
command:
358+
- kubectl
359+
- delete
360+
- statefulset
361+
- {{ $newStatefulSet.metadata.name }}
362+
- --cascade=orphan
363+
---
364+
apiVersion: v1
365+
kind: ServiceAccount
366+
metadata:
367+
name: {{ $newStatefulSet.metadata.name }}-recreate
368+
namespace: {{ $newStatefulSet.metadata.namespace }}
369+
labels:
370+
{{- $newStatefulSet.metadata.labels | toYaml | nindent 4 }}
371+
app.kubernetes.io/component: statefulset-recreate-job
372+
annotations:
373+
"helm.sh/hook": pre-upgrade
374+
"helm.sh/hook-weight": "-10"
375+
"helm.sh/hook-delete-policy": before-hook-creation,hook-succeeded
376+
---
377+
apiVersion: rbac.authorization.k8s.io/v1
378+
kind: Role
379+
metadata:
380+
name: {{ $newStatefulSet.metadata.name }}-recreate
381+
namespace: {{ $newStatefulSet.metadata.namespace }}
382+
labels:
383+
{{- $newStatefulSet.metadata.labels | toYaml | nindent 4 }}
384+
app.kubernetes.io/component: statefulset-recreate-job
385+
annotations:
386+
"helm.sh/hook": pre-upgrade
387+
"helm.sh/hook-weight": "-10"
388+
"helm.sh/hook-delete-policy": before-hook-creation,hook-succeeded
389+
rules:
390+
- apiGroups:
391+
- apps
392+
resources:
393+
- statefulsets
394+
resourceNames:
395+
- {{ $newStatefulSet.metadata.name }}
396+
verbs:
397+
- delete
398+
---
399+
apiVersion: rbac.authorization.k8s.io/v1
400+
kind: RoleBinding
401+
metadata:
402+
name: {{ $newStatefulSet.metadata.name }}-recreate
403+
namespace: {{ $newStatefulSet.metadata.namespace }}
404+
labels:
405+
{{- $newStatefulSet.metadata.labels | toYaml | nindent 4 }}
406+
app.kubernetes.io/component: statefulset-recreate-job
407+
annotations:
408+
"helm.sh/hook": pre-upgrade
409+
"helm.sh/hook-weight": "-10"
410+
"helm.sh/hook-delete-policy": before-hook-creation,hook-succeeded
411+
subjects:
412+
- kind: ServiceAccount
413+
name: {{ $newStatefulSet.metadata.name }}-recreate
414+
namespace: {{ $newStatefulSet.metadata.namespace }}
415+
roleRef:
416+
kind: Role
417+
name: {{ $newStatefulSet.metadata.name }}-recreate
418+
apiGroup: rbac.authorization.k8s.io
419+
---
420+
{{- end }}
421+
{{ end }}
422+
{{ end }}
423+
{{ end }}
424+
{{- end -}}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
{{- include "tempo.statefulset.recreateOnSizeChangeHook" (dict "context" . "pathToStatefulsetTemplate" "/ingester/statefulset-ingester.yaml") -}}

charts/tempo-distributed/templates/ingester/statefulset-ingester.yaml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,9 @@ spec:
4545
{{- end }}
4646
annotations:
4747
checksum/config: {{ include (print $.Template.BasePath "/configmap-tempo.yaml") . | sha256sum }}
48+
{{- if .Values.ingester.persistence.enabled }}
49+
storage/size: {{ .Values.ingester.persistence.size | quote }}
50+
{{- end }}
4851
{{- with .Values.tempo.podAnnotations }}
4952
{{- toYaml . | nindent 8 }}
5053
{{- end }}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
{{- include "tempo.statefulset.recreateOnSizeChangeHook" (dict "context" . "pathToStatefulsetTemplate" "/metrics-generator/statefulset-metrics-generator.yaml") -}}

charts/tempo-distributed/templates/metrics-generator/statefulset-metrics-generator.yaml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,9 @@ spec:
3636
{{- end }}
3737
annotations:
3838
checksum/config: {{ include (print $.Template.BasePath "/configmap-tempo.yaml") . | sha256sum }}
39+
{{- if .Values.metricsGenerator.persistence.enabled }}
40+
storage/size: {{ .Values.metricsGenerator.persistence.size | quote }}
41+
{{- end }}
3942
{{- with .Values.tempo.podAnnotations }}
4043
{{- toYaml . | nindent 8 }}
4144
{{- end }}

0 commit comments

Comments
 (0)