You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
114 lines
3.9 KiB
114 lines
3.9 KiB
{{- if and .Values.volume.enabled .Values.volume.resizeHook.enabled }}
|
|
{{- $seaweedfsName := include "seaweedfs.name" $ }}
|
|
{{- $replicas := int .Values.volume.replicas -}}
|
|
{{- $statefulsetName := printf "%s-volume" $seaweedfsName -}}
|
|
{{- $statefulset := (lookup "apps/v1" "StatefulSet" .Release.Namespace $statefulsetName) -}}
|
|
|
|
{{/* Check for changes in volumeClaimTemplates */}}
|
|
{{- $templateChangesRequired := false -}}
|
|
{{- if $statefulset -}}
|
|
{{- range $dir := .Values.volume.dataDirs -}}
|
|
{{- if eq .type "persistentVolumeClaim" -}}
|
|
{{- $desiredSize := .size -}}
|
|
{{- range $statefulset.spec.volumeClaimTemplates -}}
|
|
{{- if and (eq .metadata.name $dir.name) (ne .spec.resources.requests.storage $desiredSize) -}}
|
|
{{- $templateChangesRequired = true -}}
|
|
{{- end -}}
|
|
{{- end -}}
|
|
{{- end -}}
|
|
{{- end -}}
|
|
{{- end -}}
|
|
|
|
{{/* Check for the need for patching existing PVCs */}}
|
|
{{- $pvcChangesRequired := false -}}
|
|
{{- range $dir := .Values.volume.dataDirs -}}
|
|
{{- if eq .type "persistentVolumeClaim" -}}
|
|
{{- $desiredSize := .size -}}
|
|
{{- range $i, $e := until $replicas }}
|
|
{{- $pvcName := printf "%s-%s-volume-%d" $dir.name $seaweedfsName $e -}}
|
|
{{- $currentPVC := (lookup "v1" "PersistentVolumeClaim" $.Release.Namespace $pvcName) -}}
|
|
{{- if and $currentPVC (ne ($currentPVC.spec.resources.requests.storage | toString) $desiredSize) -}}
|
|
{{- $pvcChangesRequired = true -}}
|
|
{{- end -}}
|
|
{{- end -}}
|
|
{{- end -}}
|
|
{{- end -}}
|
|
|
|
{{- if or $templateChangesRequired $pvcChangesRequired }}
|
|
apiVersion: batch/v1
|
|
kind: Job
|
|
metadata:
|
|
name: "{{ $seaweedfsName }}-volume-resize-hook"
|
|
annotations:
|
|
helm.sh/hook: pre-install,pre-upgrade
|
|
helm.sh/hook-weight: "0"
|
|
helm.sh/hook-delete-policy: hook-succeeded,before-hook-creation
|
|
spec:
|
|
template:
|
|
spec:
|
|
serviceAccountName: {{ $seaweedfsName }}-volume-resize-hook
|
|
restartPolicy: Never
|
|
backoffLimit: 1
|
|
containers:
|
|
- name: resize
|
|
image: {{ .Values.volume.resizeHook.image }}
|
|
command: ["sh", "-xec"]
|
|
args:
|
|
- |
|
|
{{- if $pvcChangesRequired -}}
|
|
{{- range $dir := .Values.volume.dataDirs -}}
|
|
{{- if eq .type "persistentVolumeClaim" -}}
|
|
{{- $desiredSize := .size -}}
|
|
{{- range $i, $e := until $replicas }}
|
|
kubectl patch pvc {{ printf "%s-%s-volume-%d" $dir.name $seaweedfsName $e }} -p '{"spec":{"resources":{"requests":{"storage":"{{ $desiredSize }}"}}}}'
|
|
{{- end }}
|
|
{{- end }}
|
|
{{- end }}
|
|
{{- end -}}
|
|
|
|
{{- if $templateChangesRequired }}
|
|
kubectl delete statefulset {{ $statefulsetName }} --cascade=orphan
|
|
{{- end }}
|
|
{{- end }}
|
|
---
|
|
apiVersion: v1
|
|
kind: ServiceAccount
|
|
metadata:
|
|
name: {{ $seaweedfsName }}-volume-resize-hook
|
|
annotations:
|
|
helm.sh/hook: pre-install,pre-upgrade
|
|
helm.sh/hook-weight: "-5"
|
|
helm.sh/hook-delete-policy: before-hook-creation
|
|
---
|
|
apiVersion: rbac.authorization.k8s.io/v1
|
|
kind: Role
|
|
metadata:
|
|
name: {{ $seaweedfsName }}-volume-resize-hook
|
|
annotations:
|
|
helm.sh/hook: pre-install,pre-upgrade
|
|
helm.sh/hook-weight: "-5"
|
|
helm.sh/hook-delete-policy: before-hook-creation
|
|
rules:
|
|
- apiGroups: ["apps"]
|
|
resources: ["statefulsets"]
|
|
verbs: ["delete", "get", "list", "watch"]
|
|
- apiGroups: [""]
|
|
resources: ["persistentvolumeclaims"]
|
|
verbs: ["patch", "get", "list", "watch"]
|
|
---
|
|
apiVersion: rbac.authorization.k8s.io/v1
|
|
kind: RoleBinding
|
|
metadata:
|
|
name: {{ $seaweedfsName }}-volume-resize-hook
|
|
annotations:
|
|
helm.sh/hook: pre-install,pre-upgrade
|
|
helm.sh/hook-weight: "-5"
|
|
helm.sh/hook-delete-policy: before-hook-creation
|
|
subjects:
|
|
- kind: ServiceAccount
|
|
name: {{ $seaweedfsName }}-volume-resize-hook
|
|
roleRef:
|
|
kind: Role
|
|
name: {{ $seaweedfsName }}-volume-resize-hook
|
|
apiGroup: rbac.authorization.k8s.io
|
|
{{- end }}
|