From b0f0cd2c1698eddcc1bed07b583165d32408d2067f0a84e0e3862dd3daa43065 Mon Sep 17 00:00:00 2001 From: Andrew Date: Sun, 26 Apr 2026 22:55:32 -0400 Subject: [PATCH] feat(helm): in-cluster Valkey StatefulSet (toggleable) AOF persistence + LRU eviction + optional password. PVC for the queue data so Horizon doesn't lose pending jobs on pod restart. Co-Authored-By: Claude Opus 4.7 (1M context) --- .../templates/statefulset-valkey.yaml | 96 +++++++++++++++++++ 1 file changed, 96 insertions(+) create mode 100644 helm/ezscale-website/templates/statefulset-valkey.yaml diff --git a/helm/ezscale-website/templates/statefulset-valkey.yaml b/helm/ezscale-website/templates/statefulset-valkey.yaml new file mode 100644 index 0000000..0349a05 --- /dev/null +++ b/helm/ezscale-website/templates/statefulset-valkey.yaml @@ -0,0 +1,96 @@ +{{- if .Values.valkey.enabled }} +{{- $secretName := printf "%s-valkey" (include "ezscale-website.fullname" .) }} +{{- if .Values.valkey.password }} +apiVersion: v1 +kind: Secret +metadata: + name: {{ $secretName }} + labels: {{- include "ezscale-website.labels" . | nindent 4 }} + annotations: + helm.sh/resource-policy: keep +type: Opaque +stringData: + password: {{ .Values.valkey.password | quote }} +--- +{{- end }} +apiVersion: v1 +kind: Service +metadata: + name: {{ include "ezscale-website.redisHost" . }} + labels: + {{- include "ezscale-website.labels" . | nindent 4 }} + app.kubernetes.io/component: valkey +spec: + type: ClusterIP + ports: + - port: 6379 + targetPort: redis + name: redis + selector: + {{- include "ezscale-website.selectorLabels" . | nindent 4 }} + app.kubernetes.io/component: valkey +--- +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: {{ include "ezscale-website.redisHost" . }} + labels: + {{- include "ezscale-website.labels" . | nindent 4 }} + app.kubernetes.io/component: valkey +spec: + serviceName: {{ include "ezscale-website.redisHost" . }} + replicas: 1 + selector: + matchLabels: + {{- include "ezscale-website.selectorLabels" . | nindent 6 }} + app.kubernetes.io/component: valkey + template: + metadata: + labels: + {{- include "ezscale-website.selectorLabels" . | nindent 8 }} + app.kubernetes.io/component: valkey + spec: + containers: + - name: valkey + image: {{ .Values.valkey.image }} + command: + - valkey-server + - --appendonly + - "yes" + - --maxmemory + - {{ .Values.valkey.maxmemory | quote }} + - --maxmemory-policy + - allkeys-lru + {{- if .Values.valkey.password }} + - --requirepass + - $(REDIS_PASSWORD) + {{- end }} + {{- if .Values.valkey.password }} + env: + - name: REDIS_PASSWORD + valueFrom: + secretKeyRef: + name: {{ $secretName }} + key: password + {{- end }} + ports: + - name: redis + containerPort: 6379 + volumeMounts: + - name: data + mountPath: /data + livenessProbe: + exec: + command: ["valkey-cli", "ping"] + initialDelaySeconds: 10 + periodSeconds: 10 + volumeClaimTemplates: + - metadata: + name: data + spec: + accessModes: ["ReadWriteOnce"] + storageClassName: {{ .Values.valkey.storage.storageClassName }} + resources: + requests: + storage: {{ .Values.valkey.storage.size }} +{{- end }}