Files
HetznerTerra/infrastructure/charts/loki/templates/single-binary/statefulset-recreate-job.yaml
T
micqdf a04b8ad865
Deploy Cluster / Terraform (push) Waiting to run
Deploy Cluster / Ansible (push) Blocked by required conditions
fix: vendor observability charts
2026-05-04 10:49:46 +00:00

148 lines
5.9 KiB
YAML

{{- if and .Values.singleBinary.persistence.enabled .Values.singleBinary.persistence.enableStatefulSetRecreationForSizeChange -}}
{{- $newStatefulSet := include (print $.Template.BasePath "/single-binary/statefulset.yaml") . | fromYaml -}}
{{- $currentStatefulset := dict -}}
{{- if $newStatefulSet -}}
{{- $currentStatefulset = lookup $newStatefulSet.apiVersion $newStatefulSet.kind $newStatefulSet.metadata.namespace $newStatefulSet.metadata.name -}}
{{- $needsRecreation := false -}}
{{- $templates := dict -}}
{{- if $currentStatefulset -}}
{{- if ne (len $newStatefulSet.spec.volumeClaimTemplates) (len $currentStatefulset.spec.volumeClaimTemplates) -}}
{{- $needsRecreation = true -}}
{{- end -}}
{{- range $index, $newVolumeClaimTemplate := $newStatefulSet.spec.volumeClaimTemplates -}}
{{- $currentVolumeClaimTemplateSpec := dict -}}
{{- range $oldVolumeClaimTemplate := $currentStatefulset.spec.volumeClaimTemplates -}}
{{- if eq $oldVolumeClaimTemplate.metadata.name $newVolumeClaimTemplate.metadata.name -}}
{{- $currentVolumeClaimTemplateSpec = $oldVolumeClaimTemplate.spec -}}
{{- end -}}
{{- end -}}
{{- $newVolumeClaimTemplateStorageSize := $newVolumeClaimTemplate.spec.resources.requests.storage -}}
{{- if not $currentVolumeClaimTemplateSpec -}}
{{- $needsRecreation = true -}}
{{- else -}}
{{- if ne $newVolumeClaimTemplateStorageSize $currentVolumeClaimTemplateSpec.resources.requests.storage -}}
{{- $needsRecreation = true -}}
{{- $templates = set $templates $newVolumeClaimTemplate.metadata.name $newVolumeClaimTemplateStorageSize -}}
{{- end -}}
{{- end -}}
{{- end -}}
{{- end -}}
{{- if $needsRecreation -}}
apiVersion: batch/v1
kind: Job
metadata:
name: {{ $newStatefulSet.metadata.name }}-recreate
namespace: {{ $newStatefulSet.metadata.namespace }}
labels:
{{- include "loki.singleBinaryLabels" . | nindent 4 }}
app.kubernetes.io/component: statefulset-recreate-job
annotations:
"helm.sh/hook": pre-upgrade
"helm.sh/hook-weight": "-5"
"helm.sh/hook-delete-policy": before-hook-creation,hook-succeeded
spec:
ttlSecondsAfterFinished: 300
template:
metadata:
labels:
{{- include "loki.singleBinarySelectorLabels" . | nindent 8 }}
app.kubernetes.io/component: statefulset-recreate-job
spec:
restartPolicy: Never
serviceAccountName: {{ $newStatefulSet.metadata.name }}-recreate
containers:
- name: recreate-statefulset
image: {{ include "loki.baseImage" (dict "service" (dict "registry" "docker.io" "repository" "rancher/kubectl" "tag" (.Capabilities.KubeVersion.Version | default "v1.33.0")) "global" .Values.global.image) }}
command:
- delete
- statefulset
- --namespace={{ $newStatefulSet.metadata.namespace }}
- --cascade=orphan
- {{ $newStatefulSet.metadata.name }}
{{- range $index := until (int $currentStatefulset.spec.replicas) }}
{{- range $template, $size := $templates }}
- name: patch-pvc-{{ $template }}-{{ $index }}
image: {{ include "loki.baseImage" (dict "service" (dict "registry" "docker.io" "repository" "rancher/kubectl" "tag" ($.Capabilities.KubeVersion.Version | default "v1.33.0")) "global" $.Values.global.image) }}
command:
- patch
- pvc
- --namespace={{ $newStatefulSet.metadata.namespace }}
- {{ printf "%s-%s-%d" $template $newStatefulSet.metadata.name $index }}
- --type='json'
- '-p=[{"op": "replace", "path": "/spec/resources/requests/storage", "value": "{{ $size }}"}]'
{{- end }}
{{- end }}
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: {{ $newStatefulSet.metadata.name }}-recreate
namespace: {{ $newStatefulSet.metadata.namespace }}
labels:
{{- include "loki.singleBinaryLabels" . | nindent 4 }}
app.kubernetes.io/component: statefulset-recreate-job
annotations:
"helm.sh/hook": pre-upgrade
"helm.sh/hook-weight": "-10"
"helm.sh/hook-delete-policy": before-hook-creation,hook-succeeded
---
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
name: {{ $newStatefulSet.metadata.name }}-recreate
namespace: {{ $newStatefulSet.metadata.namespace }}
labels:
{{- include "loki.singleBinaryLabels" . | nindent 4 }}
app.kubernetes.io/component: statefulset-recreate-job
annotations:
"helm.sh/hook": pre-upgrade
"helm.sh/hook-weight": "-10"
"helm.sh/hook-delete-policy": before-hook-creation,hook-succeeded
rules:
- apiGroups:
- apps
resources:
- statefulsets
resourceNames:
- {{ $newStatefulSet.metadata.name }}
verbs:
- delete
{{- if $templates }}
- apiGroups:
- v1
resources:
- persistentvolumeclaims
resourceNames:
{{- range $index := until (int $currentStatefulset.spec.replicas) }}
{{- range $template := $templates | keys }}
- {{ printf "%s-%s-%d" $template $newStatefulSet.metadata.name $index }}
{{- end }}
{{- end }}
verbs:
- patch
{{- end }}
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: {{ $newStatefulSet.metadata.name }}-recreate
namespace: {{ $newStatefulSet.metadata.namespace }}
labels:
{{- include "loki.singleBinaryLabels" . | nindent 4 }}
app.kubernetes.io/component: statefulset-recreate-job
annotations:
"helm.sh/hook": pre-upgrade
"helm.sh/hook-weight": "-10"
"helm.sh/hook-delete-policy": before-hook-creation,hook-succeeded
subjects:
- kind: ServiceAccount
name: {{ $newStatefulSet.metadata.name }}-recreate
namespace: {{ $newStatefulSet.metadata.namespace }}
roleRef:
kind: Role
name: {{ $newStatefulSet.metadata.name }}-recreate
apiGroup: rbac.authorization.k8s.io
{{- end -}}
{{- end -}}
{{- end -}}