| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117 |
- {{- $seaweedfsName := include "seaweedfs.name" $ }}
- {{- $volumes := deepCopy .Values.volumes | mergeOverwrite (dict "" .Values.volume) }}
- {{- if .Values.volume.resizeHook.enabled }}
- {{- $commands := list }}
- {{- range $vname, $volume := $volumes }}
- {{- $volumeName := trimSuffix "-" (printf "volume-%s" $vname) }}
- {{- $volume := mergeOverwrite (deepCopy $.Values.volume) (dict "enabled" true) $volume }}
- {{- if $volume.enabled }}
- {{- $replicas := int $volume.replicas -}}
- {{- $statefulsetName := printf "%s-%s" $seaweedfsName $volumeName -}}
- {{- $statefulset := (lookup "apps/v1" "StatefulSet" $.Release.Namespace $statefulsetName) -}}
- {{/* Check for changes in volumeClaimTemplates */}}
- {{- if $statefulset }}
- {{- range $dir := $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) }}
- {{- $commands = append $commands (printf "kubectl delete statefulset %s --cascade=orphan" $statefulsetName) }}
- {{- end }}
- {{- end }}
- {{- end }}
- {{- end }}
- {{- end }}
- {{/* Check for the need for patching existing PVCs */}}
- {{- range $dir := $volume.dataDirs }}
- {{- if eq .type "persistentVolumeClaim" }}
- {{- $desiredSize := .size }}
- {{- range $i, $e := until $replicas }}
- {{- $pvcName := printf "%s-%s-%s-%d" $dir.name $seaweedfsName $volumeName $e }}
- {{- $currentPVC := (lookup "v1" "PersistentVolumeClaim" $.Release.Namespace $pvcName) }}
- {{- if and $currentPVC }}
- {{- $oldSize := include "common.resource-quantity" $currentPVC.spec.resources.requests.storage }}
- {{- $newSize := include "common.resource-quantity" $desiredSize }}
- {{- if gt $newSize $oldSize }}
- {{- $commands = append $commands (printf "kubectl patch pvc %s-%s-%s-%d -p '{\"spec\":{\"resources\":{\"requests\":{\"storage\":\"%s\"}}}}'" $dir.name $seaweedfsName $volumeName $e $desiredSize) }}
- {{- end }}
- {{- end }}
- {{- end }}
- {{- end }}
- {{- end }}
- {{- end }}
- {{- end }}
- {{- if $commands }}
- 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:
- - |
- {{- range $commands }}
- {{ . }}
- {{- 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 }}
- {{- end }}
|