Skip to content

Change Redis to be a StatefulSet#1368

Draft
benbz wants to merge 1 commit into
mainfrom
bbz/redis-as-statefulset
Draft

Change Redis to be a StatefulSet#1368
benbz wants to merge 1 commit into
mainfrom
bbz/redis-as-statefulset

Conversation

@benbz
Copy link
Copy Markdown
Member

@benbz benbz commented Jun 1, 2026

Draft as the Service becoming headless requires recreation and so has the same problem as #870 - we need to be able to recreate resources

@github-actions
Copy link
Copy Markdown

github-actions Bot commented Jun 1, 2026

dyff of changes in rendered templates of CI manifests

Full contents of manifests and dyffs are available in https://github.com/element-hq/ess-helm/actions/runs/26820586793/artifacts/7358033404

all-enabled-values.yaml
@@ Deployment/ess-ci/release-name-redis @@
- ---
- # Source: matrix-stack/templates/redis/redis_deployment.yaml
- apiVersion: apps/v1
- kind: Deployment
- metadata:
-   labels:
-     helm.sh/chart: "matrix-stack-26.5.2-dev"
-     app.kubernetes.io/managed-by: Helm
-     app.kubernetes.io/part-of: matrix-stack
-     app.kubernetes.io/component: matrix-pubsub-small-cache
-     app.kubernetes.io/name: redis
-     app.kubernetes.io/instance: release-name-redis
-     app.kubernetes.io/version: "7.4-alpine"
-     k8s.element.io/redis-config-hash: "3034b3cfe78419348e36bb348fad98b46a736334"
-   name: release-name-redis
-   namespace: ess-ci
- spec:
-   replicas: 1
-   selector:
-     matchLabels:
-       app.kubernetes.io/instance: release-name-redis
-   strategy:
-     type: RollingUpdate
-     rollingUpdate:
-       maxSurge: 2
-       maxUnavailable: 0
-   template:
-     metadata:
-       labels:
-         app.kubernetes.io/managed-by: Helm
-         app.kubernetes.io/part-of: matrix-stack
-         app.kubernetes.io/component: matrix-pubsub-small-cache
-         app.kubernetes.io/name: redis
-         app.kubernetes.io/instance: release-name-redis
-         app.kubernetes.io/version: "7.4-alpine"
-         k8s.element.io/redis-config-hash: "3034b3cfe78419348e36bb348fad98b46a736334"
-     spec:
-       automountServiceAccountToken: false
-       serviceAccountName: release-name-redis
-       securityContext:
-         fsGroup: 10002
-         runAsGroup: 10002
-         runAsNonRoot: true
-         runAsUser: 10002
-         seccompProfile:
-           type: RuntimeDefault
-         supplementalGroups: []
-       restartPolicy: Always
-       topologySpreadConstraints:
-         - labelSelector:
-             matchLabels:
-               app.kubernetes.io/instance: release-name-redis
-           matchLabelKeys:
-             - pod-template-hash
-           maxSkew: 1
-           topologyKey: kubernetes.io/hostname
-           whenUnsatisfiable: ScheduleAnyway
-       containers:
-         - name: redis
-           args:
-             - "/config/redis.conf"
-           image: "docker.io/library/redis:7.4-alpine"
-           imagePullPolicy: Always
-           securityContext:
-             allowPrivilegeEscalation: false
-             capabilities:
-               drop:
-                 - ALL
-             readOnlyRootFilesystem: true
-           ports:
-             - containerPort: 6379
-               name: redis
-               protocol: TCP
-           startupProbe:
-             failureThreshold: 5
-             periodSeconds: 10
-             successThreshold: 1
-             timeoutSeconds: 1
-             tcpSocket:
-               port: redis
-           livenessProbe:
-             failureThreshold: 3
-             periodSeconds: 10
-             successThreshold: 1
-             timeoutSeconds: 1
-             tcpSocket:
-               port: redis
-           readinessProbe:
-             failureThreshold: 3
-             periodSeconds: 10
-             successThreshold: 1
-             timeoutSeconds: 1
-             exec:
-               command:
-                 - redis-cli
-                 - ping
-           resources:
-             limits:
-               memory: 50Mi
-             requests:
-               cpu: 50m
-               memory: 50Mi
-           volumeMounts:
-             - mountPath: /config/redis.conf
-               name: config
-               readOnly: true
-               subPath: redis.conf
-         - name: redis-exporter
-           image: "ghcr.io/oliver006/redis_exporter:v1.84.0"
-           imagePullPolicy: Always
-           securityContext:
-             allowPrivilegeEscalation: false
-             capabilities:
-               drop:
-                 - ALL
-             readOnlyRootFilesystem: true
-           ports:
-             - name: metrics
-               containerPort: 9121
-           startupProbe:
-             failureThreshold: 20
-             periodSeconds: 2
-             successThreshold: 1
-             timeoutSeconds: 1
-             httpGet:
-               path: /metrics
-               port: metrics
-           livenessProbe:
-             failureThreshold: 3
-             periodSeconds: 6
-             successThreshold: 1
-             timeoutSeconds: 2
-             httpGet:
-               path: /metrics
-               port: metrics
-           readinessProbe:
-             failureThreshold: 3
-             periodSeconds: 2
-             successThreshold: 2
-             timeoutSeconds: 2
-             httpGet:
-               path: /metrics
-               port: metrics
-           resources:
-             limits:
-               memory: 50Mi
-             requests:
-               cpu: 10m
-               memory: 10Mi
-       volumes:
-         - configMap:
-             name: "release-name-redis"
-             defaultMode: 420
-           name: config



@@ Service/ess-ci/release-name-redis - spec @@
+   clusterIP: None


@@ StatefulSet/ess-ci/release-name-redis @@
+ ---
+ # Source: matrix-stack/templates/redis/redis_statefulset.yaml
+ apiVersion: apps/v1
+ kind: StatefulSet
+ metadata:
+   labels:
+     helm.sh/chart: "matrix-stack-26.5.2-dev"
+     app.kubernetes.io/managed-by: Helm
+     app.kubernetes.io/part-of: matrix-stack
+     app.kubernetes.io/component: matrix-pubsub-small-cache
+     app.kubernetes.io/name: redis
+     app.kubernetes.io/instance: release-name-redis
+     app.kubernetes.io/version: "7.4-alpine"
+     k8s.element.io/redis-config-hash: "3034b3cfe78419348e36bb348fad98b46a736334"
+   name: release-name-redis
+   namespace: ess-ci
+ spec:
+   replicas: 1
+   selector:
+     matchLabels:
+       app.kubernetes.io/instance: release-name-redis
+   serviceName: release-name-redis
+   updateStrategy:
+     type: RollingUpdate
+   # Without this CrashLoopBackoffs due to config failures block pod recreation
+   podManagementPolicy: Parallel
+   template:
+     metadata:
+       labels:
+         app.kubernetes.io/managed-by: Helm
+         app.kubernetes.io/part-of: matrix-stack
+         app.kubernetes.io/component: matrix-pubsub-small-cache
+         app.kubernetes.io/name: redis
+         app.kubernetes.io/instance: release-name-redis
+         app.kubernetes.io/version: "7.4-alpine"
+         k8s.element.io/redis-config-hash: "3034b3cfe78419348e36bb348fad98b46a736334"
+     spec:
+       automountServiceAccountToken: false
+       serviceAccountName: release-name-redis
+       securityContext:
+         fsGroup: 10002
+         runAsGroup: 10002
+         runAsNonRoot: true
+         runAsUser: 10002
+         seccompProfile:
+           type: RuntimeDefault
+         supplementalGroups: []
+       restartPolicy: Always
+       topologySpreadConstraints:
+         - labelSelector:
+             matchLabels:
+               app.kubernetes.io/instance: release-name-redis
+           matchLabelKeys: []
+           maxSkew: 1
+           topologyKey: kubernetes.io/hostname
+           whenUnsatisfiable: ScheduleAnyway
+       containers:
+         - name: redis
+           args:
+             - "/config/redis.conf"
+           image: "docker.io/library/redis:7.4-alpine"
+           imagePullPolicy: Always
+           securityContext:
+             allowPrivilegeEscalation: false
+             capabilities:
+               drop:
+                 - ALL
+             readOnlyRootFilesystem: true
+           ports:
+             - containerPort: 6379
+               name: redis
+               protocol: TCP
+           startupProbe:
+             failureThreshold: 5
+             periodSeconds: 10
+             successThreshold: 1
+             timeoutSeconds: 1
+             tcpSocket:
+               port: redis
+           livenessProbe:
+             failureThreshold: 3
+             periodSeconds: 10
+             successThreshold: 1
+             timeoutSeconds: 1
+             tcpSocket:
+               port: redis
+           readinessProbe:
+             failureThreshold: 3
+             periodSeconds: 10
+             successThreshold: 1
+             timeoutSeconds: 1
+             exec:
+               command:
+                 - redis-cli
+                 - ping
+           resources:
+             limits:
+               memory: 50Mi
+             requests:
+               cpu: 50m
+               memory: 50Mi
+           volumeMounts:
+             - mountPath: /config/redis.conf
+               name: config
+               readOnly: true
+               subPath: redis.conf
+         - name: redis-exporter
+           image: "ghcr.io/oliver006/redis_exporter:v1.84.0"
+           imagePullPolicy: Always
+           securityContext:
+             allowPrivilegeEscalation: false
+             capabilities:
+               drop:
+                 - ALL
+             readOnlyRootFilesystem: true
+           ports:
+             - name: metrics
+               containerPort: 9121
+           startupProbe:
+             failureThreshold: 20
+             periodSeconds: 2
+             successThreshold: 1
+             timeoutSeconds: 1
+             httpGet:
+               path: /metrics
+               port: metrics
+           livenessProbe:
+             failureThreshold: 3
+             periodSeconds: 6
+             successThreshold: 1
+             timeoutSeconds: 2
+             httpGet:
+               path: /metrics
+               port: metrics
+           readinessProbe:
+             failureThreshold: 3
+             periodSeconds: 2
+             successThreshold: 2
+             timeoutSeconds: 2
+             httpGet:
+               path: /metrics
+               port: metrics
+           resources:
+             limits:
+               memory: 50Mi
+             requests:
+               cpu: 10m
+               memory: 10Mi
+       volumes:
+         - configMap:
+             name: "release-name-redis"
+             defaultMode: 420
+           name: config

hookshot-checkov-values.yaml
@@ Deployment/ess-ci/release-name-redis @@
- ---
- # Source: matrix-stack/templates/redis/redis_deployment.yaml
- apiVersion: apps/v1
- kind: Deployment
- metadata:
-   annotations:
-     checkov.io/skip1: CKV_K8S_11=We deliberately don't set CPU limits. Pod is BestEffort not Guaranteed
-     checkov.io/skip2: CKV_K8S_43=No digests
-     checkov.io/skip3: CKV2_K8S_6=No network policy yet
-   labels:
-     helm.sh/chart: "matrix-stack-26.5.2-dev"
-     app.kubernetes.io/managed-by: Helm
-     app.kubernetes.io/part-of: matrix-stack
-     app.kubernetes.io/component: matrix-pubsub-small-cache
-     app.kubernetes.io/name: redis
-     app.kubernetes.io/instance: release-name-redis
-     app.kubernetes.io/version: "7.4-alpine"
-     k8s.element.io/redis-config-hash: "3034b3cfe78419348e36bb348fad98b46a736334"
-   name: release-name-redis
-   namespace: ess-ci
- spec:
-   replicas: 1
-   selector:
-     matchLabels:
-       app.kubernetes.io/instance: release-name-redis
-   strategy:
-     type: RollingUpdate
-     rollingUpdate:
-       maxSurge: 2
-       maxUnavailable: 0
-   template:
-     metadata:
-       labels:
-         app.kubernetes.io/managed-by: Helm
-         app.kubernetes.io/part-of: matrix-stack
-         app.kubernetes.io/component: matrix-pubsub-small-cache
-         app.kubernetes.io/name: redis
-         app.kubernetes.io/instance: release-name-redis
-         app.kubernetes.io/version: "7.4-alpine"
-         k8s.element.io/redis-config-hash: "3034b3cfe78419348e36bb348fad98b46a736334"
-       annotations:
-         checkov.io/skip1: CKV_K8S_11=We deliberately don't set CPU limits. Pod is BestEffort not Guaranteed
-         checkov.io/skip2: CKV_K8S_43=No digests
-         checkov.io/skip3: CKV2_K8S_6=No network policy yet
-     spec:
-       automountServiceAccountToken: false
-       serviceAccountName: release-name-redis
-       securityContext:
-         fsGroup: 10002
-         runAsGroup: 10002
-         runAsNonRoot: true
-         runAsUser: 10002
-         seccompProfile:
-           type: RuntimeDefault
-         supplementalGroups: []
-       restartPolicy: Always
-       topologySpreadConstraints:
-         - labelSelector:
-             matchLabels:
-               app.kubernetes.io/instance: release-name-redis
-           matchLabelKeys:
-             - pod-template-hash
-           maxSkew: 1
-           topologyKey: kubernetes.io/hostname
-           whenUnsatisfiable: ScheduleAnyway
-       containers:
-         - name: redis
-           args:
-             - "/config/redis.conf"
-           image: "docker.io/library/redis:7.4-alpine"
-           imagePullPolicy: Always
-           securityContext:
-             allowPrivilegeEscalation: false
-             capabilities:
-               drop:
-                 - ALL
-             readOnlyRootFilesystem: true
-           ports:
-             - containerPort: 6379
-               name: redis
-               protocol: TCP
-           startupProbe:
-             failureThreshold: 5
-             periodSeconds: 10
-             successThreshold: 1
-             timeoutSeconds: 1
-             tcpSocket:
-               port: redis
-           livenessProbe:
-             failureThreshold: 3
-             periodSeconds: 10
-             successThreshold: 1
-             timeoutSeconds: 1
-             tcpSocket:
-               port: redis
-           readinessProbe:
-             failureThreshold: 3
-             periodSeconds: 10
-             successThreshold: 1
-             timeoutSeconds: 1
-             exec:
-               command:
-                 - redis-cli
-                 - ping
-           resources:
-             limits:
-               memory: 50Mi
-             requests:
-               cpu: 50m
-               memory: 50Mi
-           volumeMounts:
-             - mountPath: /config/redis.conf
-               name: config
-               readOnly: true
-               subPath: redis.conf
-         - name: redis-exporter
-           image: "ghcr.io/oliver006/redis_exporter:v1.84.0"
-           imagePullPolicy: Always
-           securityContext:
-             allowPrivilegeEscalation: false
-             capabilities:
-               drop:
-                 - ALL
-             readOnlyRootFilesystem: true
-           ports:
-             - name: metrics
-               containerPort: 9121
-           startupProbe:
-             failureThreshold: 20
-             periodSeconds: 2
-             successThreshold: 1
-             timeoutSeconds: 1
-             httpGet:
-               path: /metrics
-               port: metrics
-           livenessProbe:
-             failureThreshold: 3
-             periodSeconds: 6
-             successThreshold: 1
-             timeoutSeconds: 2
-             httpGet:
-               path: /metrics
-               port: metrics
-           readinessProbe:
-             failureThreshold: 3
-             periodSeconds: 2
-             successThreshold: 2
-             timeoutSeconds: 2
-             httpGet:
-               path: /metrics
-               port: metrics
-           resources:
-             limits:
-               memory: 50Mi
-             requests:
-               cpu: 10m
-               memory: 10Mi
-       volumes:
-         - configMap:
-             name: "release-name-redis"
-             defaultMode: 420
-           name: config



@@ Service/ess-ci/release-name-redis - spec @@
+   clusterIP: None


@@ StatefulSet/ess-ci/release-name-redis @@
+ ---
+ # Source: matrix-stack/templates/redis/redis_statefulset.yaml
+ apiVersion: apps/v1
+ kind: StatefulSet
+ metadata:
+   annotations:
+     checkov.io/skip1: CKV_K8S_11=We deliberately don't set CPU limits. Pod is BestEffort not Guaranteed
+     checkov.io/skip2: CKV_K8S_43=No digests
+     checkov.io/skip3: CKV2_K8S_6=No network policy yet
+   labels:
+     helm.sh/chart: "matrix-stack-26.5.2-dev"
+     app.kubernetes.io/managed-by: Helm
+     app.kubernetes.io/part-of: matrix-stack
+     app.kubernetes.io/component: matrix-pubsub-small-cache
+     app.kubernetes.io/name: redis
+     app.kubernetes.io/instance: release-name-redis
+     app.kubernetes.io/version: "7.4-alpine"
+     k8s.element.io/redis-config-hash: "3034b3cfe78419348e36bb348fad98b46a736334"
+   name: release-name-redis
+   namespace: ess-ci
+ spec:
+   replicas: 1
+   selector:
+     matchLabels:
+       app.kubernetes.io/instance: release-name-redis
+   serviceName: release-name-redis
+   updateStrategy:
+     type: RollingUpdate
+   # Without this CrashLoopBackoffs due to config failures block pod recreation
+   podManagementPolicy: Parallel
+   template:
+     metadata:
+       labels:
+         app.kubernetes.io/managed-by: Helm
+         app.kubernetes.io/part-of: matrix-stack
+         app.kubernetes.io/component: matrix-pubsub-small-cache
+         app.kubernetes.io/name: redis
+         app.kubernetes.io/instance: release-name-redis
+         app.kubernetes.io/version: "7.4-alpine"
+         k8s.element.io/redis-config-hash: "3034b3cfe78419348e36bb348fad98b46a736334"
+       annotations:
+         checkov.io/skip1: CKV_K8S_11=We deliberately don't set CPU limits. Pod is BestEffort not Guaranteed
+         checkov.io/skip2: CKV_K8S_43=No digests
+         checkov.io/skip3: CKV2_K8S_6=No network policy yet
+     spec:
+       automountServiceAccountToken: false
+       serviceAccountName: release-name-redis
+       securityContext:
+         fsGroup: 10002
+         runAsGroup: 10002
+         runAsNonRoot: true
+         runAsUser: 10002
+         seccompProfile:
+           type: RuntimeDefault
+         supplementalGroups: []
+       restartPolicy: Always
+       topologySpreadConstraints:
+         - labelSelector:
+             matchLabels:
+               app.kubernetes.io/instance: release-name-redis
+           matchLabelKeys: []
+           maxSkew: 1
+           topologyKey: kubernetes.io/hostname
+           whenUnsatisfiable: ScheduleAnyway
+       containers:
+         - name: redis
+           args:
+             - "/config/redis.conf"
+           image: "docker.io/library/redis:7.4-alpine"
+           imagePullPolicy: Always
+           securityContext:
+             allowPrivilegeEscalation: false
+             capabilities:
+               drop:
+                 - ALL
+             readOnlyRootFilesystem: true
+           ports:
+             - containerPort: 6379
+               name: redis
+               protocol: TCP
+           startupProbe:
+             failureThreshold: 5
+             periodSeconds: 10
+             successThreshold: 1
+             timeoutSeconds: 1
+             tcpSocket:
+               port: redis
+           livenessProbe:
+             failureThreshold: 3
+             periodSeconds: 10
+             successThreshold: 1
+             timeoutSeconds: 1
+             tcpSocket:
+               port: redis
+           readinessProbe:
+             failureThreshold: 3
+             periodSeconds: 10
+             successThreshold: 1
+             timeoutSeconds: 1
+             exec:
+               command:
+                 - redis-cli
+                 - ping
+           resources:
+             limits:
+               memory: 50Mi
+             requests:
+               cpu: 50m
+               memory: 50Mi
+           volumeMounts:
+             - mountPath: /config/redis.conf
+               name: config
+               readOnly: true
+               subPath: redis.conf
+         - name: redis-exporter
+           image: "ghcr.io/oliver006/redis_exporter:v1.84.0"
+           imagePullPolicy: Always
+           securityContext:
+             allowPrivilegeEscalation: false
+             capabilities:
+               drop:
+                 - ALL
+             readOnlyRootFilesystem: true
+           ports:
+             - name: metrics
+               containerPort: 9121
+           startupProbe:
+             failureThreshold: 20
+             periodSeconds: 2
+             successThreshold: 1
+             timeoutSeconds: 1
+             httpGet:
+               path: /metrics
+               port: metrics
+           livenessProbe:
+             failureThreshold: 3
+             periodSeconds: 6
+             successThreshold: 1
+             timeoutSeconds: 2
+             httpGet:
+               path: /metrics
+               port: metrics
+           readinessProbe:
+             failureThreshold: 3
+             periodSeconds: 2
+             successThreshold: 2
+             timeoutSeconds: 2
+             httpGet:
+               path: /metrics
+               port: metrics
+           resources:
+             limits:
+               memory: 50Mi
+             requests:
+               cpu: 10m
+               memory: 10Mi
+       volumes:
+         - configMap:
+             name: "release-name-redis"
+             defaultMode: 420
+           name: config

hookshot-encryption-enabled-values.yaml
@@ Deployment/ess-ci/release-name-redis @@
- ---
- # Source: matrix-stack/templates/redis/redis_deployment.yaml
- apiVersion: apps/v1
- kind: Deployment
- metadata:
-   labels:
-     helm.sh/chart: "matrix-stack-26.5.2-dev"
-     app.kubernetes.io/managed-by: Helm
-     app.kubernetes.io/part-of: matrix-stack
-     app.kubernetes.io/component: matrix-pubsub-small-cache
-     app.kubernetes.io/name: redis
-     app.kubernetes.io/instance: release-name-redis
-     app.kubernetes.io/version: "7.4-alpine"
-     k8s.element.io/redis-config-hash: "3034b3cfe78419348e36bb348fad98b46a736334"
-   name: release-name-redis
-   namespace: ess-ci
- spec:
-   replicas: 1
-   selector:
-     matchLabels:
-       app.kubernetes.io/instance: release-name-redis
-   strategy:
-     type: RollingUpdate
-     rollingUpdate:
-       maxSurge: 2
-       maxUnavailable: 0
-   template:
-     metadata:
-       labels:
-         app.kubernetes.io/managed-by: Helm
-         app.kubernetes.io/part-of: matrix-stack
-         app.kubernetes.io/component: matrix-pubsub-small-cache
-         app.kubernetes.io/name: redis
-         app.kubernetes.io/instance: release-name-redis
-         app.kubernetes.io/version: "7.4-alpine"
-         k8s.element.io/redis-config-hash: "3034b3cfe78419348e36bb348fad98b46a736334"
-     spec:
-       automountServiceAccountToken: false
-       serviceAccountName: release-name-redis
-       securityContext:
-         fsGroup: 10002
-         runAsGroup: 10002
-         runAsNonRoot: true
-         runAsUser: 10002
-         seccompProfile:
-           type: RuntimeDefault
-         supplementalGroups: []
-       restartPolicy: Always
-       topologySpreadConstraints:
-         - labelSelector:
-             matchLabels:
-               app.kubernetes.io/instance: release-name-redis
-           matchLabelKeys:
-             - pod-template-hash
-           maxSkew: 1
-           topologyKey: kubernetes.io/hostname
-           whenUnsatisfiable: ScheduleAnyway
-       containers:
-         - name: redis
-           args:
-             - "/config/redis.conf"
-           image: "docker.io/library/redis:7.4-alpine"
-           imagePullPolicy: Always
-           securityContext:
-             allowPrivilegeEscalation: false
-             capabilities:
-               drop:
-                 - ALL
-             readOnlyRootFilesystem: true
-           ports:
-             - containerPort: 6379
-               name: redis
-               protocol: TCP
-           startupProbe:
-             failureThreshold: 5
-             periodSeconds: 10
-             successThreshold: 1
-             timeoutSeconds: 1
-             tcpSocket:
-               port: redis
-           livenessProbe:
-             failureThreshold: 3
-             periodSeconds: 10
-             successThreshold: 1
-             timeoutSeconds: 1
-             tcpSocket:
-               port: redis
-           readinessProbe:
-             failureThreshold: 3
-             periodSeconds: 10
-             successThreshold: 1
-             timeoutSeconds: 1
-             exec:
-               command:
-                 - redis-cli
-                 - ping
-           resources:
-             limits:
-               memory: 50Mi
-             requests:
-               cpu: 50m
-               memory: 50Mi
-           volumeMounts:
-             - mountPath: /config/redis.conf
-               name: config
-               readOnly: true
-               subPath: redis.conf
-         - name: redis-exporter
-           image: "ghcr.io/oliver006/redis_exporter:v1.84.0"
-           imagePullPolicy: Always
-           securityContext:
-             allowPrivilegeEscalation: false
-             capabilities:
-               drop:
-                 - ALL
-             readOnlyRootFilesystem: true
-           ports:
-             - name: metrics
-               containerPort: 9121
-           startupProbe:
-             failureThreshold: 20
-             periodSeconds: 2
-             successThreshold: 1
-             timeoutSeconds: 1
-             httpGet:
-               path: /metrics
-               port: metrics
-           livenessProbe:
-             failureThreshold: 3
-             periodSeconds: 6
-             successThreshold: 1
-             timeoutSeconds: 2
-             httpGet:
-               path: /metrics
-               port: metrics
-           readinessProbe:
-             failureThreshold: 3
-             periodSeconds: 2
-             successThreshold: 2
-             timeoutSeconds: 2
-             httpGet:
-               path: /metrics
-               port: metrics
-           resources:
-             limits:
-               memory: 50Mi
-             requests:
-               cpu: 10m
-               memory: 10Mi
-       volumes:
-         - configMap:
-             name: "release-name-redis"
-             defaultMode: 420
-           name: config



@@ Service/ess-ci/release-name-redis - spec @@
+   clusterIP: None


@@ StatefulSet/ess-ci/release-name-redis @@
+ ---
+ # Source: matrix-stack/templates/redis/redis_statefulset.yaml
+ apiVersion: apps/v1
+ kind: StatefulSet
+ metadata:
+   labels:
+     helm.sh/chart: "matrix-stack-26.5.2-dev"
+     app.kubernetes.io/managed-by: Helm
+     app.kubernetes.io/part-of: matrix-stack
+     app.kubernetes.io/component: matrix-pubsub-small-cache
+     app.kubernetes.io/name: redis
+     app.kubernetes.io/instance: release-name-redis
+     app.kubernetes.io/version: "7.4-alpine"
+     k8s.element.io/redis-config-hash: "3034b3cfe78419348e36bb348fad98b46a736334"
+   name: release-name-redis
+   namespace: ess-ci
+ spec:
+   replicas: 1
+   selector:
+     matchLabels:
+       app.kubernetes.io/instance: release-name-redis
+   serviceName: release-name-redis
+   updateStrategy:
+     type: RollingUpdate
+   # Without this CrashLoopBackoffs due to config failures block pod recreation
+   podManagementPolicy: Parallel
+   template:
+     metadata:
+       labels:
+         app.kubernetes.io/managed-by: Helm
+         app.kubernetes.io/part-of: matrix-stack
+         app.kubernetes.io/component: matrix-pubsub-small-cache
+         app.kubernetes.io/name: redis
+         app.kubernetes.io/instance: release-name-redis
+         app.kubernetes.io/version: "7.4-alpine"
+         k8s.element.io/redis-config-hash: "3034b3cfe78419348e36bb348fad98b46a736334"
+     spec:
+       automountServiceAccountToken: false
+       serviceAccountName: release-name-redis
+       securityContext:
+         fsGroup: 10002
+         runAsGroup: 10002
+         runAsNonRoot: true
+         runAsUser: 10002
+         seccompProfile:
+           type: RuntimeDefault
+         supplementalGroups: []
+       restartPolicy: Always
+       topologySpreadConstraints:
+         - labelSelector:
+             matchLabels:
+               app.kubernetes.io/instance: release-name-redis
+           matchLabelKeys: []
+           maxSkew: 1
+           topologyKey: kubernetes.io/hostname
+           whenUnsatisfiable: ScheduleAnyway
+       containers:
+         - name: redis
+           args:
+             - "/config/redis.conf"
+           image: "docker.io/library/redis:7.4-alpine"
+           imagePullPolicy: Always
+           securityContext:
+             allowPrivilegeEscalation: false
+             capabilities:
+               drop:
+                 - ALL
+             readOnlyRootFilesystem: true
+           ports:
+             - containerPort: 6379
+               name: redis
+               protocol: TCP
+           startupProbe:
+             failureThreshold: 5
+             periodSeconds: 10
+             successThreshold: 1
+             timeoutSeconds: 1
+             tcpSocket:
+               port: redis
+           livenessProbe:
+             failureThreshold: 3
+             periodSeconds: 10
+             successThreshold: 1
+             timeoutSeconds: 1
+             tcpSocket:
+               port: redis
+           readinessProbe:
+             failureThreshold: 3
+             periodSeconds: 10
+             successThreshold: 1
+             timeoutSeconds: 1
+             exec:
+               command:
+                 - redis-cli
+                 - ping
+           resources:
+             limits:
+               memory: 50Mi
+             requests:
+               cpu: 50m
+               memory: 50Mi
+           volumeMounts:
+             - mountPath: /config/redis.conf
+               name: config
+               readOnly: true
+               subPath: redis.conf
+         - name: redis-exporter
+           image: "ghcr.io/oliver006/redis_exporter:v1.84.0"
+           imagePullPolicy: Always
+           securityContext:
+             allowPrivilegeEscalation: false
+             capabilities:
+               drop:
+                 - ALL
+             readOnlyRootFilesystem: true
+           ports:
+             - name: metrics
+               containerPort: 9121
+           startupProbe:
+             failureThreshold: 20
+             periodSeconds: 2
+             successThreshold: 1
+             timeoutSeconds: 1
+             httpGet:
+               path: /metrics
+               port: metrics
+           livenessProbe:
+             failureThreshold: 3
+             periodSeconds: 6
+             successThreshold: 1
+             timeoutSeconds: 2
+             httpGet:
+               path: /metrics
+               port: metrics
+           readinessProbe:
+             failureThreshold: 3
+             periodSeconds: 2
+             successThreshold: 2
+             timeoutSeconds: 2
+             httpGet:
+               path: /metrics
+               port: metrics
+           resources:
+             limits:
+               memory: 50Mi
+             requests:
+               cpu: 10m
+               memory: 10Mi
+       volumes:
+         - configMap:
+             name: "release-name-redis"
+             defaultMode: 420
+           name: config

hookshot-minimal-values.yaml
@@ Deployment/ess-ci/release-name-redis @@
- ---
- # Source: matrix-stack/templates/redis/redis_deployment.yaml
- apiVersion: apps/v1
- kind: Deployment
- metadata:
-   labels:
-     helm.sh/chart: "matrix-stack-26.5.2-dev"
-     app.kubernetes.io/managed-by: Helm
-     app.kubernetes.io/part-of: matrix-stack
-     app.kubernetes.io/component: matrix-pubsub-small-cache
-     app.kubernetes.io/name: redis
-     app.kubernetes.io/instance: release-name-redis
-     app.kubernetes.io/version: "7.4-alpine"
-     k8s.element.io/redis-config-hash: "3034b3cfe78419348e36bb348fad98b46a736334"
-   name: release-name-redis
-   namespace: ess-ci
- spec:
-   replicas: 1
-   selector:
-     matchLabels:
-       app.kubernetes.io/instance: release-name-redis
-   strategy:
-     type: RollingUpdate
-     rollingUpdate:
-       maxSurge: 2
-       maxUnavailable: 0
-   template:
-     metadata:
-       labels:
-         app.kubernetes.io/managed-by: Helm
-         app.kubernetes.io/part-of: matrix-stack
-         app.kubernetes.io/component: matrix-pubsub-small-cache
-         app.kubernetes.io/name: redis
-         app.kubernetes.io/instance: release-name-redis
-         app.kubernetes.io/version: "7.4-alpine"
-         k8s.element.io/redis-config-hash: "3034b3cfe78419348e36bb348fad98b46a736334"
-     spec:
-       automountServiceAccountToken: false
-       serviceAccountName: release-name-redis
-       securityContext:
-         fsGroup: 10002
-         runAsGroup: 10002
-         runAsNonRoot: true
-         runAsUser: 10002
-         seccompProfile:
-           type: RuntimeDefault
-         supplementalGroups: []
-       restartPolicy: Always
-       topologySpreadConstraints:
-         - labelSelector:
-             matchLabels:
-               app.kubernetes.io/instance: release-name-redis
-           matchLabelKeys:
-             - pod-template-hash
-           maxSkew: 1
-           topologyKey: kubernetes.io/hostname
-           whenUnsatisfiable: ScheduleAnyway
-       containers:
-         - name: redis
-           args:
-             - "/config/redis.conf"
-           image: "docker.io/library/redis:7.4-alpine"
-           imagePullPolicy: Always
-           securityContext:
-             allowPrivilegeEscalation: false
-             capabilities:
-               drop:
-                 - ALL
-             readOnlyRootFilesystem: true
-           ports:
-             - containerPort: 6379
-               name: redis
-               protocol: TCP
-           startupProbe:
-             failureThreshold: 5
-             periodSeconds: 10
-             successThreshold: 1
-             timeoutSeconds: 1
-             tcpSocket:
-               port: redis
-           livenessProbe:
-             failureThreshold: 3
-             periodSeconds: 10
-             successThreshold: 1
-             timeoutSeconds: 1
-             tcpSocket:
-               port: redis
-           readinessProbe:
-             failureThreshold: 3
-             periodSeconds: 10
-             successThreshold: 1
-             timeoutSeconds: 1
-             exec:
-               command:
-                 - redis-cli
-                 - ping
-           resources:
-             limits:
-               memory: 50Mi
-             requests:
-               cpu: 50m
-               memory: 50Mi
-           volumeMounts:
-             - mountPath: /config/redis.conf
-               name: config
-               readOnly: true
-               subPath: redis.conf
-         - name: redis-exporter
-           image: "ghcr.io/oliver006/redis_exporter:v1.84.0"
-           imagePullPolicy: Always
-           securityContext:
-             allowPrivilegeEscalation: false
-             capabilities:
-               drop:
-                 - ALL
-             readOnlyRootFilesystem: true
-           ports:
-             - name: metrics
-               containerPort: 9121
-           startupProbe:
-             failureThreshold: 20
-             periodSeconds: 2
-             successThreshold: 1
-             timeoutSeconds: 1
-             httpGet:
-               path: /metrics
-               port: metrics
-           livenessProbe:
-             failureThreshold: 3
-             periodSeconds: 6
-             successThreshold: 1
-             timeoutSeconds: 2
-             httpGet:
-               path: /metrics
-               port: metrics
-           readinessProbe:
-             failureThreshold: 3
-             periodSeconds: 2
-             successThreshold: 2
-             timeoutSeconds: 2
-             httpGet:
-               path: /metrics
-               port: metrics
-           resources:
-             limits:
-               memory: 50Mi
-             requests:
-               cpu: 10m
-               memory: 10Mi
-       volumes:
-         - configMap:
-             name: "release-name-redis"
-             defaultMode: 420
-           name: config



@@ Service/ess-ci/release-name-redis - spec @@
+   clusterIP: None


@@ StatefulSet/ess-ci/release-name-redis @@
+ ---
+ # Source: matrix-stack/templates/redis/redis_statefulset.yaml
+ apiVersion: apps/v1
+ kind: StatefulSet
+ metadata:
+   labels:
+     helm.sh/chart: "matrix-stack-26.5.2-dev"
+     app.kubernetes.io/managed-by: Helm
+     app.kubernetes.io/part-of: matrix-stack
+     app.kubernetes.io/component: matrix-pubsub-small-cache
+     app.kubernetes.io/name: redis
+     app.kubernetes.io/instance: release-name-redis
+     app.kubernetes.io/version: "7.4-alpine"
+     k8s.element.io/redis-config-hash: "3034b3cfe78419348e36bb348fad98b46a736334"
+   name: release-name-redis
+   namespace: ess-ci
+ spec:
+   replicas: 1
+   selector:
+     matchLabels:
+       app.kubernetes.io/instance: release-name-redis
+   serviceName: release-name-redis
+   updateStrategy:
+     type: RollingUpdate
+   # Without this CrashLoopBackoffs due to config failures block pod recreation
+   podManagementPolicy: Parallel
+   template:
+     metadata:
+       labels:
+         app.kubernetes.io/managed-by: Helm
+         app.kubernetes.io/part-of: matrix-stack
+         app.kubernetes.io/component: matrix-pubsub-small-cache
+         app.kubernetes.io/name: redis
+         app.kubernetes.io/instance: release-name-redis
+         app.kubernetes.io/version: "7.4-alpine"
+         k8s.element.io/redis-config-hash: "3034b3cfe78419348e36bb348fad98b46a736334"
+     spec:
+       automountServiceAccountToken: false
+       serviceAccountName: release-name-redis
+       securityContext:
+         fsGroup: 10002
+         runAsGroup: 10002
+         runAsNonRoot: true
+         runAsUser: 10002
+         seccompProfile:
+           type: RuntimeDefault
+         supplementalGroups: []
+       restartPolicy: Always
+       topologySpreadConstraints:
+         - labelSelector:
+             matchLabels:
+               app.kubernetes.io/instance: release-name-redis
+           matchLabelKeys: []
+           maxSkew: 1
+           topologyKey: kubernetes.io/hostname
+           whenUnsatisfiable: ScheduleAnyway
+       containers:
+         - name: redis
+           args:
+             - "/config/redis.conf"
+           image: "docker.io/library/redis:7.4-alpine"
+           imagePullPolicy: Always
+           securityContext:
+             allowPrivilegeEscalation: false
+             capabilities:
+               drop:
+                 - ALL
+             readOnlyRootFilesystem: true
+           ports:
+             - containerPort: 6379
+               name: redis
+               protocol: TCP
+           startupProbe:
+             failureThreshold: 5
+             periodSeconds: 10
+             successThreshold: 1
+             timeoutSeconds: 1
+             tcpSocket:
+               port: redis
+           livenessProbe:
+             failureThreshold: 3
+             periodSeconds: 10
+             successThreshold: 1
+             timeoutSeconds: 1
+             tcpSocket:
+               port: redis
+           readinessProbe:
+             failureThreshold: 3
+             periodSeconds: 10
+             successThreshold: 1
+             timeoutSeconds: 1
+             exec:
+               command:
+                 - redis-cli
+                 - ping
+           resources:
+             limits:
+               memory: 50Mi
+             requests:
+               cpu: 50m
+               memory: 50Mi
+           volumeMounts:
+             - mountPath: /config/redis.conf
+               name: config
+               readOnly: true
+               subPath: redis.conf
+         - name: redis-exporter
+           image: "ghcr.io/oliver006/redis_exporter:v1.84.0"
+           imagePullPolicy: Always
+           securityContext:
+             allowPrivilegeEscalation: false
+             capabilities:
+               drop:
+                 - ALL
+             readOnlyRootFilesystem: true
+           ports:
+             - name: metrics
+               containerPort: 9121
+           startupProbe:
+             failureThreshold: 20
+             periodSeconds: 2
+             successThreshold: 1
+             timeoutSeconds: 1
+             httpGet:
+               path: /metrics
+               port: metrics
+           livenessProbe:
+             failureThreshold: 3
+             periodSeconds: 6
+             successThreshold: 1
+             timeoutSeconds: 2
+             httpGet:
+               path: /metrics
+               port: metrics
+           readinessProbe:
+             failureThreshold: 3
+             periodSeconds: 2
+             successThreshold: 2
+             timeoutSeconds: 2
+             httpGet:
+               path: /metrics
+               port: metrics
+           resources:
+             limits:
+               memory: 50Mi
+             requests:
+               cpu: 10m
+               memory: 10Mi
+       volumes:
+         - configMap:
+             name: "release-name-redis"
+             defaultMode: 420
+           name: config

pytest-hookshot-values.yaml
@@ Deployment/ess-ci/release-name-redis @@
- ---
- # Source: matrix-stack/templates/redis/redis_deployment.yaml
- apiVersion: apps/v1
- kind: Deployment
- metadata:
-   labels:
-     helm.sh/chart: "matrix-stack-26.5.2-dev"
-     app.kubernetes.io/managed-by: Helm
-     app.kubernetes.io/part-of: matrix-stack
-     app.kubernetes.io/component: matrix-pubsub-small-cache
-     app.kubernetes.io/name: redis
-     app.kubernetes.io/instance: release-name-redis
-     app.kubernetes.io/version: "7.4-alpine"
-     k8s.element.io/redis-config-hash: "3034b3cfe78419348e36bb348fad98b46a736334"
-   name: release-name-redis
-   namespace: ess-ci
- spec:
-   replicas: 1
-   selector:
-     matchLabels:
-       app.kubernetes.io/instance: release-name-redis
-   strategy:
-     type: RollingUpdate
-     rollingUpdate:
-       maxSurge: 2
-       maxUnavailable: 0
-   template:
-     metadata:
-       labels:
-         app.kubernetes.io/managed-by: Helm
-         app.kubernetes.io/part-of: matrix-stack
-         app.kubernetes.io/component: matrix-pubsub-small-cache
-         app.kubernetes.io/name: redis
-         app.kubernetes.io/instance: release-name-redis
-         app.kubernetes.io/version: "7.4-alpine"
-         k8s.element.io/redis-config-hash: "3034b3cfe78419348e36bb348fad98b46a736334"
-     spec:
-       automountServiceAccountToken: false
-       serviceAccountName: release-name-redis
-       securityContext:
-         fsGroup: 10002
-         runAsGroup: 0
-         runAsNonRoot: true
-         runAsUser: 10002
-         seccompProfile:
-           type: RuntimeDefault
-         supplementalGroups: []
-       restartPolicy: Always
-       topologySpreadConstraints:
-         - labelSelector:
-             matchLabels:
-               app.kubernetes.io/instance: release-name-redis
-           matchLabelKeys:
-             - pod-template-hash
-           maxSkew: 1
-           topologyKey: kubernetes.io/hostname
-           whenUnsatisfiable: ScheduleAnyway
-       containers:
-         - name: redis
-           args:
-             - "/config/redis.conf"
-           image: "docker.io/library/redis:7.4-alpine"
-           imagePullPolicy: Always
-           securityContext:
-             allowPrivilegeEscalation: false
-             capabilities:
-               drop:
-                 - ALL
-             readOnlyRootFilesystem: true
-           ports:
-             - containerPort: 6379
-               name: redis
-               protocol: TCP
-           startupProbe:
-             failureThreshold: 5
-             periodSeconds: 10
-             successThreshold: 1
-             timeoutSeconds: 1
-             tcpSocket:
-               port: redis
-           livenessProbe:
-             failureThreshold: 3
-             periodSeconds: 10
-             successThreshold: 1
-             timeoutSeconds: 1
-             tcpSocket:
-               port: redis
-           readinessProbe:
-             failureThreshold: 3
-             periodSeconds: 10
-             successThreshold: 1
-             timeoutSeconds: 1
-             exec:
-               command:
-                 - redis-cli
-                 - ping
-           resources:
-             limits:
-               memory: 50Mi
-             requests:
-               cpu: 50m
-               memory: 50Mi
-           volumeMounts:
-             - mountPath: /config/redis.conf
-               name: config
-               readOnly: true
-               subPath: redis.conf
-         - name: redis-exporter
-           image: "ghcr.io/oliver006/redis_exporter:v1.84.0"
-           imagePullPolicy: Always
-           securityContext:
-             allowPrivilegeEscalation: false
-             capabilities:
-               drop:
-                 - ALL
-             readOnlyRootFilesystem: true
-           ports:
-             - name: metrics
-               containerPort: 9121
-           startupProbe:
-             failureThreshold: 20
-             periodSeconds: 2
-             successThreshold: 1
-             timeoutSeconds: 1
-             httpGet:
-               path: /metrics
-               port: metrics
-           livenessProbe:
-             failureThreshold: 3
-             periodSeconds: 6
-             successThreshold: 1
-             timeoutSeconds: 2
-             httpGet:
-               path: /metrics
-               port: metrics
-           readinessProbe:
-             failureThreshold: 3
-             periodSeconds: 2
-             successThreshold: 2
-             timeoutSeconds: 2
-             httpGet:
-               path: /metrics
-               port: metrics
-           resources:
-             limits:
-               memory: 50Mi
-             requests:
-               cpu: 10m
-               memory: 10Mi
-       volumes:
-         - configMap:
-             name: "release-name-redis"
-             defaultMode: 420
-           name: config



@@ Service/ess-ci/release-name-redis - spec @@
+   clusterIP: None


@@ StatefulSet/ess-ci/release-name-redis @@
+ ---
+ # Source: matrix-stack/templates/redis/redis_statefulset.yaml
+ apiVersion: apps/v1
+ kind: StatefulSet
+ metadata:
+   labels:
+     helm.sh/chart: "matrix-stack-26.5.2-dev"
+     app.kubernetes.io/managed-by: Helm
+     app.kubernetes.io/part-of: matrix-stack
+     app.kubernetes.io/component: matrix-pubsub-small-cache
+     app.kubernetes.io/name: redis
+     app.kubernetes.io/instance: release-name-redis
+     app.kubernetes.io/version: "7.4-alpine"
+     k8s.element.io/redis-config-hash: "3034b3cfe78419348e36bb348fad98b46a736334"
+   name: release-name-redis
+   namespace: ess-ci
+ spec:
+   replicas: 1
+   selector:
+     matchLabels:
+       app.kubernetes.io/instance: release-name-redis
+   serviceName: release-name-redis
+   updateStrategy:
+     type: RollingUpdate
+   # Without this CrashLoopBackoffs due to config failures block pod recreation
+   podManagementPolicy: Parallel
+   template:
+     metadata:
+       labels:
+         app.kubernetes.io/managed-by: Helm
+         app.kubernetes.io/part-of: matrix-stack
+         app.kubernetes.io/component: matrix-pubsub-small-cache
+         app.kubernetes.io/name: redis
+         app.kubernetes.io/instance: release-name-redis
+         app.kubernetes.io/version: "7.4-alpine"
+         k8s.element.io/redis-config-hash: "3034b3cfe78419348e36bb348fad98b46a736334"
+     spec:
+       automountServiceAccountToken: false
+       serviceAccountName: release-name-redis
+       securityContext:
+         fsGroup: 10002
+         runAsGroup: 0
+         runAsNonRoot: true
+         runAsUser: 10002
+         seccompProfile:
+           type: RuntimeDefault
+         supplementalGroups: []
+       restartPolicy: Always
+       topologySpreadConstraints:
+         - labelSelector:
+             matchLabels:
+               app.kubernetes.io/instance: release-name-redis
+           matchLabelKeys: []
+           maxSkew: 1
+           topologyKey: kubernetes.io/hostname
+           whenUnsatisfiable: ScheduleAnyway
+       containers:
+         - name: redis
+           args:
+             - "/config/redis.conf"
+           image: "docker.io/library/redis:7.4-alpine"
+           imagePullPolicy: Always
+           securityContext:
+             allowPrivilegeEscalation: false
+             capabilities:
+               drop:
+                 - ALL
+             readOnlyRootFilesystem: true
+           ports:
+             - containerPort: 6379
+               name: redis
+               protocol: TCP
+           startupProbe:
+             failureThreshold: 5
+             periodSeconds: 10
+             successThreshold: 1
+             timeoutSeconds: 1
+             tcpSocket:
+               port: redis
+           livenessProbe:
+             failureThreshold: 3
+             periodSeconds: 10
+             successThreshold: 1
+             timeoutSeconds: 1
+             tcpSocket:
+               port: redis
+           readinessProbe:
+             failureThreshold: 3
+             periodSeconds: 10
+             successThreshold: 1
+             timeoutSeconds: 1
+             exec:
+               command:
+                 - redis-cli
+                 - ping
+           resources:
+             limits:
+               memory: 50Mi
+             requests:
+               cpu: 50m
+               memory: 50Mi
+           volumeMounts:
+             - mountPath: /config/redis.conf
+               name: config
+               readOnly: true
+               subPath: redis.conf
+         - name: redis-exporter
+           image: "ghcr.io/oliver006/redis_exporter:v1.84.0"
+           imagePullPolicy: Always
+           securityContext:
+             allowPrivilegeEscalation: false
+             capabilities:
+               drop:
+                 - ALL
+             readOnlyRootFilesystem: true
+           ports:
+             - name: metrics
+               containerPort: 9121
+           startupProbe:
+             failureThreshold: 20
+             periodSeconds: 2
+             successThreshold: 1
+             timeoutSeconds: 1
+             httpGet:
+               path: /metrics
+               port: metrics
+           livenessProbe:
+             failureThreshold: 3
+             periodSeconds: 6
+             successThreshold: 1
+             timeoutSeconds: 2
+             httpGet:
+               path: /metrics
+               port: metrics
+           readinessProbe:
+             failureThreshold: 3
+             periodSeconds: 2
+             successThreshold: 2
+             timeoutSeconds: 2
+             httpGet:
+               path: /metrics
+               port: metrics
+           resources:
+             limits:
+               memory: 50Mi
+             requests:
+               cpu: 10m
+               memory: 10Mi
+       volumes:
+         - configMap:
+             name: "release-name-redis"
+             defaultMode: 420
+           name: config

pytest-hookshot-with-mas-values.yaml
@@ Deployment/ess-ci/release-name-redis @@
- ---
- # Source: matrix-stack/templates/redis/redis_deployment.yaml
- apiVersion: apps/v1
- kind: Deployment
- metadata:
-   labels:
-     helm.sh/chart: "matrix-stack-26.5.2-dev"
-     app.kubernetes.io/managed-by: Helm
-     app.kubernetes.io/part-of: matrix-stack
-     app.kubernetes.io/component: matrix-pubsub-small-cache
-     app.kubernetes.io/name: redis
-     app.kubernetes.io/instance: release-name-redis
-     app.kubernetes.io/version: "7.4-alpine"
-     k8s.element.io/redis-config-hash: "3034b3cfe78419348e36bb348fad98b46a736334"
-   name: release-name-redis
-   namespace: ess-ci
- spec:
-   replicas: 1
-   selector:
-     matchLabels:
-       app.kubernetes.io/instance: release-name-redis
-   strategy:
-     type: RollingUpdate
-     rollingUpdate:
-       maxSurge: 2
-       maxUnavailable: 0
-   template:
-     metadata:
-       labels:
-         app.kubernetes.io/managed-by: Helm
-         app.kubernetes.io/part-of: matrix-stack
-         app.kubernetes.io/component: matrix-pubsub-small-cache
-         app.kubernetes.io/name: redis
-         app.kubernetes.io/instance: release-name-redis
-         app.kubernetes.io/version: "7.4-alpine"
-         k8s.element.io/redis-config-hash: "3034b3cfe78419348e36bb348fad98b46a736334"
-     spec:
-       automountServiceAccountToken: false
-       serviceAccountName: release-name-redis
-       securityContext:
-         fsGroup: 10002
-         runAsGroup: 0
-         runAsNonRoot: true
-         runAsUser: 10002
-         seccompProfile:
-           type: RuntimeDefault
-         supplementalGroups: []
-       restartPolicy: Always
-       topologySpreadConstraints:
-         - labelSelector:
-             matchLabels:
-               app.kubernetes.io/instance: release-name-redis
-           matchLabelKeys:
-             - pod-template-hash
-           maxSkew: 1
-           topologyKey: kubernetes.io/hostname
-           whenUnsatisfiable: ScheduleAnyway
-       containers:
-         - name: redis
-           args:
-             - "/config/redis.conf"
-           image: "docker.io/library/redis:7.4-alpine"
-           imagePullPolicy: Always
-           securityContext:
-             allowPrivilegeEscalation: false
-             capabilities:
-               drop:
-                 - ALL
-             readOnlyRootFilesystem: true
-           ports:
-             - containerPort: 6379
-               name: redis
-               protocol: TCP
-           startupProbe:
-             failureThreshold: 5
-             periodSeconds: 10
-             successThreshold: 1
-             timeoutSeconds: 1
-             tcpSocket:
-               port: redis
-           livenessProbe:
-             failureThreshold: 3
-             periodSeconds: 10
-             successThreshold: 1
-             timeoutSeconds: 1
-             tcpSocket:
-               port: redis
-           readinessProbe:
-             failureThreshold: 3
-             periodSeconds: 10
-             successThreshold: 1
-             timeoutSeconds: 1
-             exec:
-               command:
-                 - redis-cli
-                 - ping
-           resources:
-             limits:
-               memory: 50Mi
-             requests:
-               cpu: 50m
-               memory: 50Mi
-           volumeMounts:
-             - mountPath: /config/redis.conf
-               name: config
-               readOnly: true
-               subPath: redis.conf
-         - name: redis-exporter
-           image: "ghcr.io/oliver006/redis_exporter:v1.84.0"
-           imagePullPolicy: Always
-           securityContext:
-             allowPrivilegeEscalation: false
-             capabilities:
-               drop:
-                 - ALL
-             readOnlyRootFilesystem: true
-           ports:
-             - name: metrics
-               containerPort: 9121
-           startupProbe:
-             failureThreshold: 20
-             periodSeconds: 2
-             successThreshold: 1
-             timeoutSeconds: 1
-             httpGet:
-               path: /metrics
-               port: metrics
-           livenessProbe:
-             failureThreshold: 3
-             periodSeconds: 6
-             successThreshold: 1
-             timeoutSeconds: 2
-             httpGet:
-               path: /metrics
-               port: metrics
-           readinessProbe:
-             failureThreshold: 3
-             periodSeconds: 2
-             successThreshold: 2
-             timeoutSeconds: 2
-             httpGet:
-               path: /metrics
-               port: metrics
-           resources:
-             limits:
-               memory: 50Mi
-             requests:
-               cpu: 10m
-               memory: 10Mi
-       volumes:
-         - configMap:
-             name: "release-name-redis"
-             defaultMode: 420
-           name: config



@@ Service/ess-ci/release-name-redis - spec @@
+   clusterIP: None


@@ StatefulSet/ess-ci/release-name-redis @@
+ ---
+ # Source: matrix-stack/templates/redis/redis_statefulset.yaml
+ apiVersion: apps/v1
+ kind: StatefulSet
+ metadata:
+   labels:
+     helm.sh/chart: "matrix-stack-26.5.2-dev"
+     app.kubernetes.io/managed-by: Helm
+     app.kubernetes.io/part-of: matrix-stack
+     app.kubernetes.io/component: matrix-pubsub-small-cache
+     app.kubernetes.io/name: redis
+     app.kubernetes.io/instance: release-name-redis
+     app.kubernetes.io/version: "7.4-alpine"
+     k8s.element.io/redis-config-hash: "3034b3cfe78419348e36bb348fad98b46a736334"
+   name: release-name-redis
+   namespace: ess-ci
+ spec:
+   replicas: 1
+   selector:
+     matchLabels:
+       app.kubernetes.io/instance: release-name-redis
+   serviceName: release-name-redis
+   updateStrategy:
+     type: RollingUpdate
+   # Without this CrashLoopBackoffs due to config failures block pod recreation
+   podManagementPolicy: Parallel
+   template:
+     metadata:
+       labels:
+         app.kubernetes.io/managed-by: Helm
+         app.kubernetes.io/part-of: matrix-stack
+         app.kubernetes.io/component: matrix-pubsub-small-cache
+         app.kubernetes.io/name: redis
+         app.kubernetes.io/instance: release-name-redis
+         app.kubernetes.io/version: "7.4-alpine"
+         k8s.element.io/redis-config-hash: "3034b3cfe78419348e36bb348fad98b46a736334"
+     spec:
+       automountServiceAccountToken: false
+       serviceAccountName: release-name-redis
+       securityContext:
+         fsGroup: 10002
+         runAsGroup: 0
+         runAsNonRoot: true
+         runAsUser: 10002
+         seccompProfile:
+           type: RuntimeDefault
+         supplementalGroups: []
+       restartPolicy: Always
+       topologySpreadConstraints:
+         - labelSelector:
+             matchLabels:
+               app.kubernetes.io/instance: release-name-redis
+           matchLabelKeys: []
+           maxSkew: 1
+           topologyKey: kubernetes.io/hostname
+           whenUnsatisfiable: ScheduleAnyway
+       containers:
+         - name: redis
+           args:
+             - "/config/redis.conf"
+           image: "docker.io/library/redis:7.4-alpine"
+           imagePullPolicy: Always
+           securityContext:
+             allowPrivilegeEscalation: false
+             capabilities:
+               drop:
+                 - ALL
+             readOnlyRootFilesystem: true
+           ports:
+             - containerPort: 6379
+               name: redis
+               protocol: TCP
+           startupProbe:
+             failureThreshold: 5
+             periodSeconds: 10
+             successThreshold: 1
+             timeoutSeconds: 1
+             tcpSocket:
+               port: redis
+           livenessProbe:
+             failureThreshold: 3
+             periodSeconds: 10
+             successThreshold: 1
+             timeoutSeconds: 1
+             tcpSocket:
+               port: redis
+           readinessProbe:
+             failureThreshold: 3
+             periodSeconds: 10
+             successThreshold: 1
+             timeoutSeconds: 1
+             exec:
+               command:
+                 - redis-cli
+                 - ping
+           resources:
+             limits:
+               memory: 50Mi
+             requests:
+               cpu: 50m
+               memory: 50Mi
+           volumeMounts:
+             - mountPath: /config/redis.conf
+               name: config
+               readOnly: true
+               subPath: redis.conf
+         - name: redis-exporter
+           image: "ghcr.io/oliver006/redis_exporter:v1.84.0"
+           imagePullPolicy: Always
+           securityContext:
+             allowPrivilegeEscalation: false
+             capabilities:
+               drop:
+                 - ALL
+             readOnlyRootFilesystem: true
+           ports:
+             - name: metrics
+               containerPort: 9121
+           startupProbe:
+             failureThreshold: 20
+             periodSeconds: 2
+             successThreshold: 1
+             timeoutSeconds: 1
+             httpGet:
+               path: /metrics
+               port: metrics
+           livenessProbe:
+             failureThreshold: 3
+             periodSeconds: 6
+             successThreshold: 1
+             timeoutSeconds: 2
+             httpGet:
+               path: /metrics
+               port: metrics
+           readinessProbe:
+             failureThreshold: 3
+             periodSeconds: 2
+             successThreshold: 2
+             timeoutSeconds: 2
+             httpGet:
+               path: /metrics
+               port: metrics
+           resources:
+             limits:
+               memory: 50Mi
+             requests:
+               cpu: 10m
+               memory: 10Mi
+       volumes:
+         - configMap:
+             name: "release-name-redis"
+             defaultMode: 420
+           name: config

pytest-synapse-values.yaml
@@ Deployment/ess-ci/release-name-redis @@
- ---
- # Source: matrix-stack/templates/redis/redis_deployment.yaml
- apiVersion: apps/v1
- kind: Deployment
- metadata:
-   labels:
-     helm.sh/chart: "matrix-stack-26.5.2-dev"
-     app.kubernetes.io/managed-by: Helm
-     app.kubernetes.io/part-of: matrix-stack
-     app.kubernetes.io/component: matrix-pubsub-small-cache
-     app.kubernetes.io/name: redis
-     app.kubernetes.io/instance: release-name-redis
-     app.kubernetes.io/version: "7.4-alpine"
-     k8s.element.io/redis-config-hash: "3034b3cfe78419348e36bb348fad98b46a736334"
-   name: release-name-redis
-   namespace: ess-ci
- spec:
-   replicas: 1
-   selector:
-     matchLabels:
-       app.kubernetes.io/instance: release-name-redis
-   strategy:
-     type: RollingUpdate
-     rollingUpdate:
-       maxSurge: 2
-       maxUnavailable: 0
-   template:
-     metadata:
-       labels:
-         app.kubernetes.io/managed-by: Helm
-         app.kubernetes.io/part-of: matrix-stack
-         app.kubernetes.io/component: matrix-pubsub-small-cache
-         app.kubernetes.io/name: redis
-         app.kubernetes.io/instance: release-name-redis
-         app.kubernetes.io/version: "7.4-alpine"
-         k8s.element.io/redis-config-hash: "3034b3cfe78419348e36bb348fad98b46a736334"
-     spec:
-       automountServiceAccountToken: false
-       serviceAccountName: release-name-redis
-       securityContext:
-         fsGroup: 10002
-         runAsGroup: 0
-         runAsNonRoot: true
-         runAsUser: 10002
-         seccompProfile:
-           type: RuntimeDefault
-         supplementalGroups: []
-       restartPolicy: Always
-       topologySpreadConstraints:
-         - labelSelector:
-             matchLabels:
-               app.kubernetes.io/instance: release-name-redis
-           matchLabelKeys:
-             - pod-template-hash
-           maxSkew: 1
-           topologyKey: kubernetes.io/hostname
-           whenUnsatisfiable: ScheduleAnyway
-       containers:
-         - name: redis
-           args:
-             - "/config/redis.conf"
-           image: "docker.io/library/redis:7.4-alpine"
-           imagePullPolicy: Always
-           securityContext:
-             allowPrivilegeEscalation: false
-             capabilities:
-               drop:
-                 - ALL
-             readOnlyRootFilesystem: true
-           ports:
-             - containerPort: 6379
-               name: redis
-               protocol: TCP
-           startupProbe:
-             failureThreshold: 5
-             periodSeconds: 10
-             successThreshold: 1
-             timeoutSeconds: 1
-             tcpSocket:
-               port: redis
-           livenessProbe:
-             failureThreshold: 3
-             periodSeconds: 10
-             successThreshold: 1
-             timeoutSeconds: 1
-             tcpSocket:
-               port: redis
-           readinessProbe:
-             failureThreshold: 3
-             periodSeconds: 10
-             successThreshold: 1
-             timeoutSeconds: 1
-             exec:
-               command:
-                 - redis-cli
-                 - ping
-           resources:
-             limits:
-               memory: 50Mi
-             requests:
-               cpu: 50m
-               memory: 50Mi
-           volumeMounts:
-             - mountPath: /config/redis.conf
-               name: config
-               readOnly: true
-               subPath: redis.conf
-         - name: redis-exporter
-           image: "ghcr.io/oliver006/redis_exporter:v1.84.0"
-           imagePullPolicy: Always
-           securityContext:
-             allowPrivilegeEscalation: false
-             capabilities:
-               drop:
-                 - ALL
-             readOnlyRootFilesystem: true
-           ports:
-             - name: metrics
-               containerPort: 9121
-           startupProbe:
-             failureThreshold: 20
-             periodSeconds: 2
-             s...*[Comment body truncated]*

@benbz benbz force-pushed the bbz/redis-as-statefulset branch from d7becb2 to 3d21bec Compare June 2, 2026 12:45
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant