Skip to content

Change Valkey to be a StatefulSet whilst renaming - #1368

Merged
benbz merged 2 commits into
bbz/redis-to-valkey-in-schemafrom
bbz/redis-as-statefulset
Sep 2, 2026
Merged

Change Valkey to be a StatefulSet whilst renaming#1368
benbz merged 2 commits into
bbz/redis-to-valkey-in-schemafrom
bbz/redis-as-statefulset

Conversation

@benbz

@benbz benbz commented Jun 1, 2026

Copy link
Copy Markdown
Member

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

Rename the manifests in cluster from -redis -> -valkey and at the same time convert the workload to a StatefulSet and the Service to a headless one. This allows us to workaround field-immutability issues.

Undoes the hacks done in #1557 as they're no longer needed, however the changelog remains as it is still true.

@github-actions

github-actions Bot commented Jun 1, 2026

Copy link
Copy Markdown

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/33621279728/artifacts/9843030611

all-enabled-values.yaml
@@ ConfigMap/ess-ci/release-name-hookshot - data.config-override.yaml @@
  bridge:
    domain: "ess.localhost"
    url: "http://release-name-synapse.ess-ci.svc.cluster.local.:8008"
    port: 9993
  
  [one line unchanged)]
  
  
  passFile: /secrets/release-name-generated/HOOKSHOT_RSA_PASSKEY
  
  cache:
-   redisUri: "redis://release-name-redis.ess-ci.svc.cluster.local.:6379/1"
+   redisUri: "redis://release-name-valkey.ess-ci.svc.cluster.local.:6379/1"
  
  logging:
    level: info
  
  
  [22 lines unchanged)]
  
  
  
  widgets:
    publicUrl: https://synapse.ess.localhost/_matrix/hookshot/widgetapi/v1/static



@@ ConfigMap/ess-ci/release-name-matrix-rtc-sfu - data.config-overrides.yaml @@
  port: 7880
  
  prometheus:
    port: 6789
  
  [17 lines unchanged)]
  
  
  key_file: /conf/keys.yaml
  
  redis:
-   address: "release-name-redis.ess-ci.svc.cluster.local.:6379"
+   address: "release-name-valkey.ess-ci.svc.cluster.local.:6379"
    db: 3
  
  room:
    auto_create: false
  
  [two lines unchanged)]
  
    api_key: matrix-rtc
  
    urls:
    - http://release-name-matrix-rtc-authorisation-service.ess-ci.svc.cluster.local.:8080/sfu_webhook


@@ ConfigMap/ess-ci/release-name-redis @@
- ---
- # Source: matrix-stack/templates/redis/redis_configmap.yaml
- apiVersion: v1
- kind: ConfigMap
- metadata:
-   labels:
-     helm.sh/chart: "matrix-stack-26.9.1-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: "9.1-alpine"
-   name: release-name-redis
-   namespace: ess-ci
- data:
-   redis.conf: |
-     # Do not require a password
-     protected-mode no
-     port 6379
- 
-     tcp-backlog 511
-     tcp-keepalive 300
- 
-     # Never close the connection
-     timeout 0
- 
-     # We run the redis in a container so disable both of these
-     daemonize no
-     supervised no
- 
-     loglevel notice
-     logfile ''
- 
-     databases 16
-     always-show-logo no
-     stop-writes-on-bgsave-error yes
- 
-     # We never save to the disk
-     save ''
- 
-     replica-serve-stale-data yes
-     replica-read-only yes
-     repl-diskless-sync no
-     repl-diskless-sync-delay 5
-     repl-diskless-load disabled
-     repl-disable-tcp-nodelay no
-     replica-priority 100
-     acllog-max-len 128
- 
-     lazyfree-lazy-eviction no
-     lazyfree-lazy-expire no
-     lazyfree-lazy-server-del no
-     replica-lazy-flush no
- 
-     lazyfree-lazy-user-del no
- 
-     lazyfree-lazy-user-flush no
-     oom-score-adj no
-     oom-score-adj-values 0 200 800
- 
-     disable-thp yes
- 
-     appendonly no
-     appendfilename 'appendonly.aof'
-     appendfsync everysec
- 
-     no-appendfsync-on-rewrite no
- 
-     auto-aof-rewrite-percentage 100
-     auto-aof-rewrite-min-size 64mb
-     aof-load-truncated yes
-     aof-use-rdb-preamble yes
-     lua-time-limit 5000
-     slowlog-log-slower-than 10000
-     slowlog-max-len 128
-     latency-monitor-threshold 0
-     notify-keyspace-events ""
-     hash-max-ziplist-entries 512
-     hash-max-ziplist-value 64
-     list-max-ziplist-size -2
-     list-compress-depth 0
-     set-max-intset-entries 512
-     zset-max-ziplist-entries 128
-     zset-max-ziplist-value 64
-     hll-sparse-max-bytes 3000
-     stream-node-max-bytes 4096
-     stream-node-max-entries 100
-     activerehashing yes
-     client-output-buffer-limit normal 0 0 0
-     client-output-buffer-limit replica 256mb 64mb 60
-     client-output-buffer-limit pubsub 32mb 8mb 60
- 
-     # Hz is the freuqency at which background tasks are performed, we keep this low to save CPU
-     hz 1
- 
-     # The hz value is increased to scale with the number of clients connected.
-     dynamic-hz yes
- 
-     aof-rewrite-incremental-fsync yes
-     rdb-save-incremental-fsync yes
-     jemalloc-bg-thread yes
- 
-     maxmemory 40mb
-     maxmemory-policy allkeys-lru


@@ ConfigMap/ess-ci/release-name-valkey @@
+ ---
+ # Source: matrix-stack/templates/valkey/valkey_configmap.yaml
+ apiVersion: v1
+ kind: ConfigMap
+ metadata:
+   labels:
+     helm.sh/chart: "matrix-stack-26.9.1-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: valkey
+     app.kubernetes.io/instance: release-name-valkey
+     app.kubernetes.io/version: "9.1-alpine"
+   name: release-name-valkey
+   namespace: ess-ci
+ data:
+   valkey.conf: |
+     # Do not require a password
+     protected-mode no
+     port 6379
+ 
+     tcp-backlog 511
+     tcp-keepalive 300
+ 
+     # Never close the connection
+     timeout 0
+ 
+     # We run the Valkey in a container so disable both of these
+     daemonize no
+     supervised no
+ 
+     loglevel notice
+     logfile ''
+ 
+     databases 16
+     always-show-logo no
+     stop-writes-on-bgsave-error yes
+ 
+     # We never save to the disk
+     save ''
+ 
+     replica-serve-stale-data yes
+     replica-read-only yes
+     repl-diskless-sync no
+     repl-diskless-sync-delay 5
+     repl-diskless-load disabled
+     repl-disable-tcp-nodelay no
+     replica-priority 100
+     acllog-max-len 128
+ 
+     lazyfree-lazy-eviction no
+     lazyfree-lazy-expire no
+     lazyfree-lazy-server-del no
+     replica-lazy-flush no
+ 
+     lazyfree-lazy-user-del no
+ 
+     lazyfree-lazy-user-flush no
+     oom-score-adj no
+     oom-score-adj-values 0 200 800
+ 
+     disable-thp yes
+ 
+     appendonly no
+     appendfilename 'appendonly.aof'
+     appendfsync everysec
+ 
+     no-appendfsync-on-rewrite no
+ 
+     auto-aof-rewrite-percentage 100
+     auto-aof-rewrite-min-size 64mb
+     aof-load-truncated yes
+     aof-use-rdb-preamble yes
+     lua-time-limit 5000
+     slowlog-log-slower-than 10000
+     slowlog-max-len 128
+     latency-monitor-threshold 0
+     notify-keyspace-events ""
+     hash-max-ziplist-entries 512
+     hash-max-ziplist-value 64
+     list-max-ziplist-size -2
+     list-compress-depth 0
+     set-max-intset-entries 512
+     zset-max-ziplist-entries 128
+     zset-max-ziplist-value 64
+     hll-sparse-max-bytes 3000
+     stream-node-max-bytes 4096
+     stream-node-max-entries 100
+     activerehashing yes
+     client-output-buffer-limit normal 0 0 0
+     client-output-buffer-limit replica 256mb 64mb 60
+     client-output-buffer-limit pubsub 32mb 8mb 60
+ 
+     # Hz is the freuqency at which background tasks are performed, we keep this low to save CPU
+     hz 1
+ 
+     # The hz value is increased to scale with the number of clients connected.
+     dynamic-hz yes
+ 
+     aof-rewrite-incremental-fsync yes
+     rdb-save-incremental-fsync yes
+     jemalloc-bg-thread yes
+ 
+     maxmemory 40mb
+     maxmemory-policy allkeys-lru



@@ Deployment/ess-ci/release-name-matrix-rtc-authorisation-service - spec.template.spec.containers.matrix-rtc-authorisation-service.env.LIVEKIT_REDIS_URL.value @@
- redis://release-name-redis.ess-ci.svc.cluster.local.:6379/2
+ redis://release-name-valkey.ess-ci.svc.cluster.local.:6379/2


@@ 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.9.1-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: "9.1-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: Recreate
-   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: "9.1-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/valkey/valkey:9.1-alpine"
-           imagePullPolicy: Always
-           securityContext:
-             allowPrivilegeEscalation: false
-             capabilities:
-               drop:
-                 - ALL
-             privileged: false
-             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.90.0"
-           imagePullPolicy: Always
-           securityContext:
-             allowPrivilegeEscalation: false
-             capabilities:
-               drop:
-                 - ALL
-             privileged: false
-             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 @@
- ---
- # Source: matrix-stack/templates/redis/redis_service.yaml
- apiVersion: v1
- kind: Service
- metadata:
-   labels:
-     helm.sh/chart: "matrix-stack-26.9.1-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: "9.1-alpine"
-   name: release-name-redis
-   namespace: ess-ci
- spec:
-   type: ClusterIP
-   ipFamilyPolicy: PreferDualStack
-   ports:
-     - port: 6379
-       targetPort: redis
-       name: redis
-     - port: 9121
-       targetPort: metrics
-       name: metrics
-   selector:
-     app.kubernetes.io/instance: "release-name-redis"


@@ Service/ess-ci/release-name-valkey @@
+ ---
+ # Source: matrix-stack/templates/valkey/valkey_service.yaml
+ apiVersion: v1
+ kind: Service
+ metadata:
+   labels:
+     helm.sh/chart: "matrix-stack-26.9.1-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: valkey
+     app.kubernetes.io/instance: release-name-valkey
+     app.kubernetes.io/version: "9.1-alpine"
+   name: release-name-valkey
+   namespace: ess-ci
+ spec:
+   type: ClusterIP
+   clusterIP: None
+   ipFamilyPolicy: PreferDualStack
+   ports:
+     - port: 6379
+       targetPort: valkey
+       name: valkey
+     - port: 9121
+       targetPort: metrics
+       name: metrics
+   selector:
+     app.kubernetes.io/instance: "release-name-valkey"


@@ ServiceAccount/ess-ci/release-name-redis @@
- ---
- # Source: matrix-stack/templates/redis/redis_service_account.yaml
- apiVersion: v1
- kind: ServiceAccount
- metadata:
-   labels:
-     helm.sh/chart: "matrix-stack-26.9.1-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: "9.1-alpine"
-   name: release-name-redis
-   namespace: ess-ci
- automountServiceAccountToken: false


@@ ServiceAccount/ess-ci/release-name-valkey @@
+ ---
+ # Source: matrix-stack/templates/valkey/valkey_service_account.yaml
+ apiVersion: v1
+ kind: ServiceAccount
+ metadata:
+   labels:
+     helm.sh/chart: "matrix-stack-26.9.1-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: valkey
+     app.kubernetes.io/instance: release-name-valkey
+     app.kubernetes.io/version: "9.1-alpine"
+   name: release-name-valkey
+   namespace: ess-ci
+ automountServiceAccountToken: false


@@ ServiceMonitor/ess-ci/release-name-redis @@
- ---
- # Source: matrix-stack/templates/redis/redis_service_monitor.yaml
- apiVersion: monitoring.coreos.com/v1
- kind: ServiceMonitor
- metadata:
-   labels:
-     helm.sh/chart: "matrix-stack-26.9.1-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: "9.1-alpine"
-   name: release-name-redis
-   namespace: ess-ci
- spec:
-   endpoints:
-     - interval: 30s
-       port: metrics
-       relabelings:
-         - targetLabel: instance
-           sourceLabels: [__meta_kubernetes_pod_label_app_kubernetes_io_instance]
-           action: replace
-   selector:
-     matchLabels:
-       app.kubernetes.io/instance: release-name-redis


@@ ServiceMonitor/ess-ci/release-name-valkey @@
+ ---
+ # Source: matrix-stack/templates/valkey/valkey_service_monitor.yaml
+ apiVersion: monitoring.coreos.com/v1
+ kind: ServiceMonitor
+ metadata:
+   labels:
+     helm.sh/chart: "matrix-stack-26.9.1-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: valkey
+     app.kubernetes.io/instance: release-name-valkey
+     app.kubernetes.io/version: "9.1-alpine"
+   name: release-name-valkey
+   namespace: ess-ci
+ spec:
+   endpoints:
+     - interval: 30s
+       port: metrics
+       relabelings:
+         - targetLabel: instance
+           sourceLabels: [__meta_kubernetes_pod_label_app_kubernetes_io_instance]
+           action: replace
+   selector:
+     matchLabels:
+       app.kubernetes.io/instance: release-name-valkey


@@ StatefulSet/ess-ci/release-name-valkey @@
+ ---
+ # Source: matrix-stack/templates/valkey/valkey_statefulset.yaml
+ apiVersion: apps/v1
+ kind: StatefulSet
+ metadata:
+   labels:
+     helm.sh/chart: "matrix-stack-26.9.1-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: valkey
+     app.kubernetes.io/instance: release-name-valkey
+     app.kubernetes.io/version: "9.1-alpine"
+     k8s.element.io/valkey-config-hash: "041231d26819a14475f14ac6d0d412db9b31533f"
+   name: release-name-valkey
+   namespace: ess-ci
+ spec:
+   replicas: 1
+   selector:
+     matchLabels:
+       app.kubernetes.io/instance: release-name-valkey
+   serviceName: release-name-valkey
+   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: valkey
+         app.kubernetes.io/instance: release-name-valkey
+         app.kubernetes.io/version: "9.1-alpine"
+         k8s.element.io/valkey-config-hash: "041231d26819a14475f14ac6d0d412db9b31533f"
+     spec:
+       automountServiceAccountToken: false
+       serviceAccountName: release-name-valkey
+       securityContext:
+         fsGroup: 10002
+         runAsGroup: 10002
+         runAsNonRoot: true
+         runAsUser: 10002
+         seccompProfile:
+           type: RuntimeDefault
+         supplementalGroups: []
+       restartPolicy: Always
+       topologySpreadConstraints:
+         - labelSelector:
+             matchLabels:
+               app.kubernetes.io/instance: release-name-valkey
+           matchLabelKeys: []
+           maxSkew: 1
+           topologyKey: kubernetes.io/hostname
+           whenUnsatisfiable: ScheduleAnyway
+       containers:
+         - name: valkey
+           args:
+             - "/config/valkey.conf"
+           image: "docker.io/valkey/valkey:9.1-alpine"
+           imagePullPolicy: Always
+           securityContext:
+             allowPrivilegeEscalation: false
+             capabilities:
+               drop:
+                 - ALL
+             privileged: false
+             readOnlyRootFilesystem: true
+           ports:
+             - containerPort: 6379
+               name: valkey
+               protocol: TCP
+           startupProbe:
+             failureThreshold: 5
+             periodSeconds: 10
+             successThreshold: 1
+             timeoutSeconds: 1
+             tcpSocket:
+               port: valkey
+           livenessProbe:
+             failureThreshold: 3
+             periodSeconds: 10
+             successThreshold: 1
+             timeoutSeconds: 1
+             tcpSocket:
+               port: valkey
+           readinessProbe:
+             failureThreshold: 3
+             periodSeconds: 10
+             successThreshold: 1
+             timeoutSeconds: 1
+             exec:
+               command:
+                 - valkey-cli
+                 - ping
+           resources:
+             limits:
+               memory: 50Mi
+             requests:
+               cpu: 50m
+               memory: 50Mi
+           volumeMounts:
+             - mountPath: /config/valkey.conf
+               name: config
+               readOnly: true
+               subPath: valkey.conf
+         - name: valkey-exporter
+           image: "ghcr.io/oliver006/redis_exporter:v1.90.0"
+           imagePullPolicy: Always
+           securityContext:
+             allowPrivilegeEscalation: false
+             capabilities:
+               drop:
+                 - ALL
+             privileged: false
+             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-valkey"
+             defaultMode: 420
+           name: config

example-default-enabled-components-checkov-values.yaml
@@ ConfigMap/ess-ci/release-name-matrix-rtc-sfu - data.config-overrides.yaml @@
  port: 7880
  
  prometheus:
    port: 6789
  
  [17 lines unchanged)]
  
  
  key_file: /conf/keys.yaml
  
  redis:
-   address: "release-name-redis.ess-ci.svc.cluster.local.:6379"
+   address: "release-name-valkey.ess-ci.svc.cluster.local.:6379"
    db: 3
  
  room:
    auto_create: false
  
  [two lines unchanged)]
  
    api_key: matrix-rtc
  
    urls:
    - http://release-name-matrix-rtc-authorisation-service.ess-ci.svc.cluster.local.:8080/sfu_webhook


@@ ConfigMap/ess-ci/release-name-redis @@
- ---
- # Source: matrix-stack/templates/redis/redis_configmap.yaml
- apiVersion: v1
- kind: ConfigMap
- metadata:
-   labels:
-     helm.sh/chart: "matrix-stack-26.9.1-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: "9.1-alpine"
-   name: release-name-redis
-   namespace: ess-ci
- data:
-   redis.conf: |
-     # Do not require a password
-     protected-mode no
-     port 6379
- 
-     tcp-backlog 511
-     tcp-keepalive 300
- 
-     # Never close the connection
-     timeout 0
- 
-     # We run the redis in a container so disable both of these
-     daemonize no
-     supervised no
- 
-     loglevel notice
-     logfile ''
- 
-     databases 16
-     always-show-logo no
-     stop-writes-on-bgsave-error yes
- 
-     # We never save to the disk
-     save ''
- 
-     replica-serve-stale-data yes
-     replica-read-only yes
-     repl-diskless-sync no
-     repl-diskless-sync-delay 5
-     repl-diskless-load disabled
-     repl-disable-tcp-nodelay no
-     replica-priority 100
-     acllog-max-len 128
- 
-     lazyfree-lazy-eviction no
-     lazyfree-lazy-expire no
-     lazyfree-lazy-server-del no
-     replica-lazy-flush no
- 
-     lazyfree-lazy-user-del no
- 
-     lazyfree-lazy-user-flush no
-     oom-score-adj no
-     oom-score-adj-values 0 200 800
- 
-     disable-thp yes
- 
-     appendonly no
-     appendfilename 'appendonly.aof'
-     appendfsync everysec
- 
-     no-appendfsync-on-rewrite no
- 
-     auto-aof-rewrite-percentage 100
-     auto-aof-rewrite-min-size 64mb
-     aof-load-truncated yes
-     aof-use-rdb-preamble yes
-     lua-time-limit 5000
-     slowlog-log-slower-than 10000
-     slowlog-max-len 128
-     latency-monitor-threshold 0
-     notify-keyspace-events ""
-     hash-max-ziplist-entries 512
-     hash-max-ziplist-value 64
-     list-max-ziplist-size -2
-     list-compress-depth 0
-     set-max-intset-entries 512
-     zset-max-ziplist-entries 128
-     zset-max-ziplist-value 64
-     hll-sparse-max-bytes 3000
-     stream-node-max-bytes 4096
-     stream-node-max-entries 100
-     activerehashing yes
-     client-output-buffer-limit normal 0 0 0
-     client-output-buffer-limit replica 256mb 64mb 60
-     client-output-buffer-limit pubsub 32mb 8mb 60
- 
-     # Hz is the freuqency at which background tasks are performed, we keep this low to save CPU
-     hz 1
- 
-     # The hz value is increased to scale with the number of clients connected.
-     dynamic-hz yes
- 
-     aof-rewrite-incremental-fsync yes
-     rdb-save-incremental-fsync yes
-     jemalloc-bg-thread yes
- 
-     maxmemory 40mb
-     maxmemory-policy allkeys-lru


@@ ConfigMap/ess-ci/release-name-valkey @@
+ ---
+ # Source: matrix-stack/templates/valkey/valkey_configmap.yaml
+ apiVersion: v1
+ kind: ConfigMap
+ metadata:
+   labels:
+     helm.sh/chart: "matrix-stack-26.9.1-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: valkey
+     app.kubernetes.io/instance: release-name-valkey
+     app.kubernetes.io/version: "9.1-alpine"
+   name: release-name-valkey
+   namespace: ess-ci
+ data:
+   valkey.conf: |
+     # Do not require a password
+     protected-mode no
+     port 6379
+ 
+     tcp-backlog 511
+     tcp-keepalive 300
+ 
+     # Never close the connection
+     timeout 0
+ 
+     # We run the Valkey in a container so disable both of these
+     daemonize no
+     supervised no
+ 
+     loglevel notice
+     logfile ''
+ 
+     databases 16
+     always-show-logo no
+     stop-writes-on-bgsave-error yes
+ 
+     # We never save to the disk
+     save ''
+ 
+     replica-serve-stale-data yes
+     replica-read-only yes
+     repl-diskless-sync no
+     repl-diskless-sync-delay 5
+     repl-diskless-load disabled
+     repl-disable-tcp-nodelay no
+     replica-priority 100
+     acllog-max-len 128
+ 
+     lazyfree-lazy-eviction no
+     lazyfree-lazy-expire no
+     lazyfree-lazy-server-del no
+     replica-lazy-flush no
+ 
+     lazyfree-lazy-user-del no
+ 
+     lazyfree-lazy-user-flush no
+     oom-score-adj no
+     oom-score-adj-values 0 200 800
+ 
+     disable-thp yes
+ 
+     appendonly no
+     appendfilename 'appendonly.aof'
+     appendfsync everysec
+ 
+     no-appendfsync-on-rewrite no
+ 
+     auto-aof-rewrite-percentage 100
+     auto-aof-rewrite-min-size 64mb
+     aof-load-truncated yes
+     aof-use-rdb-preamble yes
+     lua-time-limit 5000
+     slowlog-log-slower-than 10000
+     slowlog-max-len 128
+     latency-monitor-threshold 0
+     notify-keyspace-events ""
+     hash-max-ziplist-entries 512
+     hash-max-ziplist-value 64
+     list-max-ziplist-size -2
+     list-compress-depth 0
+     set-max-intset-entries 512
+     zset-max-ziplist-entries 128
+     zset-max-ziplist-value 64
+     hll-sparse-max-bytes 3000
+     stream-node-max-bytes 4096
+     stream-node-max-entries 100
+     activerehashing yes
+     client-output-buffer-limit normal 0 0 0
+     client-output-buffer-limit replica 256mb 64mb 60
+     client-output-buffer-limit pubsub 32mb 8mb 60
+ 
+     # Hz is the freuqency at which background tasks are performed, we keep this low to save CPU
+     hz 1
+ 
+     # The hz value is increased to scale with the number of clients connected.
+     dynamic-hz yes
+ 
+     aof-rewrite-incremental-fsync yes
+     rdb-save-incremental-fsync yes
+     jemalloc-bg-thread yes
+ 
+     maxmemory 40mb
+     maxmemory-policy allkeys-lru



@@ Deployment/ess-ci/release-name-matrix-rtc-authorisation-service - spec.template.spec.containers.matrix-rtc-authorisation-service.env.LIVEKIT_REDIS_URL.value @@
- redis://release-name-redis.ess-ci.svc.cluster.local.:6379/2
+ redis://release-name-valkey.ess-ci.svc.cluster.local.:6379/2


@@ 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.9.1-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: "9.1-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: Recreate
-   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: "9.1-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/valkey/valkey:9.1-alpine"
-           imagePullPolicy: Always
-           securityContext:
-             allowPrivilegeEscalation: false
-             capabilities:
-               drop:
-                 - ALL
-             privileged: false
-             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.90.0"
-           imagePullPolicy: Always
-           securityContext:
-             allowPrivilegeEscalation: false
-             capabilities:
-               drop:
-                 - ALL
-             privileged: false
-             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 @@
- ---
- # Source: matrix-stack/templates/redis/redis_service.yaml
- apiVersion: v1
- kind: Service
- metadata:
-   labels:
-     helm.sh/chart: "matrix-stack-26.9.1-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: "9.1-alpine"
-   name: release-name-redis
-   namespace: ess-ci
- spec:
-   type: ClusterIP
-   ipFamilyPolicy: PreferDualStack
-   ports:
-     - port: 6379
-       targetPort: redis
-       name: redis
-     - port: 9121
-       targetPort: metrics
-       name: metrics
-   selector:
-     app.kubernetes.io/instance: "release-name-redis"


@@ Service/ess-ci/release-name-valkey @@
+ ---
+ # Source: matrix-stack/templates/valkey/valkey_service.yaml
+ apiVersion: v1
+ kind: Service
+ metadata:
+   labels:
+     helm.sh/chart: "matrix-stack-26.9.1-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: valkey
+     app.kubernetes.io/instance: release-name-valkey
+     app.kubernetes.io/version: "9.1-alpine"
+   name: release-name-valkey
+   namespace: ess-ci
+ spec:
+   type: ClusterIP
+   clusterIP: None
+   ipFamilyPolicy: PreferDualStack
+   ports:
+     - port: 6379
+       targetPort: valkey
+       name: valkey
+     - port: 9121
+       targetPort: metrics
+       name: metrics
+   selector:
+     app.kubernetes.io/instance: "release-name-valkey"


@@ ServiceAccount/ess-ci/release-name-redis @@
- ---
- # Source: matrix-stack/templates/redis/redis_service_account.yaml
- apiVersion: v1
- kind: ServiceAccount
- metadata:
-   labels:
-     helm.sh/chart: "matrix-stack-26.9.1-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: "9.1-alpine"
-   name: release-name-redis
-   namespace: ess-ci
- automountServiceAccountToken: false


@@ ServiceAccount/ess-ci/release-name-valkey @@
+ ---
+ # Source: matrix-stack/templates/valkey/valkey_service_account.yaml
+ apiVersion: v1
+ kind: ServiceAccount
+ metadata:
+   labels:
+     helm.sh/chart: "matrix-stack-26.9.1-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: valkey
+     app.kubernetes.io/instance: release-name-valkey
+     app.kubernetes.io/version: "9.1-alpine"
+   name: release-name-valkey
+   namespace: ess-ci
+ automountServiceAccountToken: false


@@ ServiceMonitor/ess-ci/release-name-redis @@
- ---
- # Source: matrix-stack/templates/redis/redis_service_monitor.yaml
- apiVersion: monitoring.coreos.com/v1
- kind: ServiceMonitor
- metadata:
-   labels:
-     helm.sh/chart: "matrix-stack-26.9.1-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: "9.1-alpine"
-   name: release-name-redis
-   namespace: ess-ci
- spec:
-   endpoints:
-     - interval: 30s
-       port: metrics
-       relabelings:
-         - targetLabel: instance
-           sourceLabels: [__meta_kubernetes_pod_label_app_kubernetes_io_instance]
-           action: replace
-   selector:
-     matchLabels:
-       app.kubernetes.io/instance: release-name-redis


@@ ServiceMonitor/ess-ci/release-name-valkey @@
+ ---
+ # Source: matrix-stack/templates/valkey/valkey_service_monitor.yaml
+ apiVersion: monitoring.coreos.com/v1
+ kind: ServiceMonitor
+ metadata:
+   labels:
+     helm.sh/chart: "matrix-stack-26.9.1-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: valkey
+     app.kubernetes.io/instance: release-name-valkey
+     app.kubernetes.io/version: "9.1-alpine"
+   name: release-name-valkey
+   namespace: ess-ci
+ spec:
+   endpoints:
+     - interval: 30s
+       port: metrics
+       relabelings:
+         - targetLabel: instance
+           sourceLabels: [__meta_kubernetes_pod_label_app_kubernetes_io_instance]
+           action: replace
+   selector:
+     matchLabels:
+       app.kubernetes.io/instance: release-name-valkey


@@ StatefulSet/ess-ci/release-name-valkey @@
+ ---
+ # Source: matrix-stack/templates/valkey/valkey_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.9.1-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: valkey
+     app.kubernetes.io/instance: release-name-valkey
+     app.kubernetes.io/version: "9.1-alpine"
+     k8s.element.io/valkey-config-hash: "041231d26819a14475f14ac6d0d412db9b31533f"
+   name: release-name-valkey
+   namespace: ess-ci
+ spec:
+   replicas: 1
+   selector:
+     matchLabels:
+       app.kubernetes.io/instance: release-name-valkey
+   serviceName: release-name-valkey
+   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: valkey
+         app.kubernetes.io/instance: release-name-valkey
+         app.kubernetes.io/version: "9.1-alpine"
+         k8s.element.io/valkey-config-hash: "041231d26819a14475f14ac6d0d412db9b31533f"
+       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-valkey
+       securityContext:
+         fsGroup: 10002
+         runAsGroup: 10002
+         runAsNonRoot: true
+         runAsUser: 10002
+         seccompProfile:
+           type: RuntimeDefault
+         supplementalGroups: []
+       restartPolicy: Always
+       topologySpreadConstraints:
+         - labelSelector:
+             matchLabels:
+               app.kubernetes.io/instance: release-name-valkey
+           matchLabelKeys: []
+           maxSkew: 1
+           topologyKey: kubernetes.io/hostname
+           whenUnsatisfiable: ScheduleAnyway
+       containers:
+         - name: valkey
+           args:
+             - "/config/valkey.conf"
+           image: "docker.io/valkey/valkey:9.1-alpine"
+           imagePullPolicy: Always
+           securityContext:
+             allowPrivilegeEscalation: false
+             capabilities:
+               drop:
+                 - ALL
+             privileged: false
+             readOnlyRootFilesystem: true
+           ports:
+             - containerPort: 6379
+               name: valkey
+               protocol: TCP
+           startupProbe:
+             failureThreshold: 5
+             periodSeconds: 10
+             successThreshold: 1
+             timeoutSeconds: 1
+             tcpSocket:
+               port: valkey
+           livenessProbe:
+             failureThreshold: 3
+             periodSeconds: 10
+             successThreshold: 1
+             timeoutSeconds: 1
+             tcpSocket:
+               port: valkey
+           readinessProbe:
+             failureThreshold: 3
+             periodSeconds: 10
+             successThreshold: 1
+             timeoutSeconds: 1
+             exec:
+               command:
+                 - valkey-cli
+                 - ping
+           resources:
+             limits:
+               memory: 50Mi
+             requests:
+               cpu: 50m
+               memory: 50Mi
+           volumeMounts:
+             - mountPath: /config/valkey.conf
+               name: config
+               readOnly: true
+               subPath: valkey.conf
+         - name: valkey-exporter
+           image: "ghcr.io/oliver006/redis_exporter:v1.90.0"
+           imagePullPolicy: Always
+           securityContext:
+             allowPrivilegeEscalation: false
+             capabilities:
+               drop:
+                 - ALL
+             privileged: false
+             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-valkey"
+             defaultMode: 420
+           name: config

example-default-enabled-components-values.yaml
@@ ConfigMap/ess-ci/release-name-matrix-rtc-sfu - data.config-overrides.yaml @@
  port: 7880
  
  prometheus:
    port: 6789
  
  [17 lines unchanged)]
  
  
  key_file: /conf/keys.yaml
  
  redis:
-   address: "release-name-redis.ess-ci.svc.cluster.local.:6379"
+   address: "release-name-valkey.ess-ci.svc.cluster.local.:6379"
    db: 3
  
  room:
    auto_create: false
  
  [two lines unchanged)]
  
    api_key: matrix-rtc
  
    urls:
    - http://release-name-matrix-rtc-authorisation-service.ess-ci.svc.cluster.local.:8080/sfu_webhook


@@ ConfigMap/ess-ci/release-name-redis @@
- ---
- # Source: matrix-stack/templates/redis/redis_configmap.yaml
- apiVersion: v1
- kind: ConfigMap
- metadata:
-   labels:
-     helm.sh/chart: "matrix-stack-26.9.1-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: "9.1-alpine"
-   name: release-name-redis
-   namespace: ess-ci
- data:
-   redis.conf: |
-     # Do not require a password
-     protected-mode no
-     port 6379
- 
-     tcp-backlog 511
-     tcp-keepalive 300
- 
-     # Never close the connection
-     timeout 0
- 
-     # We run the redis in a container so disable both of these
-     daemonize no
-     supervised no
- 
-     loglevel notice
-     logfile ''
- 
-     databases 16
-     always-show-logo no
-     stop-writes-on-bgsave-error yes
- 
-     # We never save to the disk
-     save ''
- 
-     replica-serve-stale-data yes
-     replica-read-only yes
-     repl-diskless-sync no
-     repl-diskless-sync-delay 5
-     repl-diskless-load disabled
-     repl-disable-tcp-nodelay no
-     replica-priority 100
-     acllog-max-len 128
- 
-     lazyfree-lazy-eviction no
-     lazyfree-lazy-expire no
-     lazyfree-lazy-server-del no
-     replica-lazy-flush no
- 
-     lazyfree-lazy-user-del no
- 
-     lazyfree-lazy-user-flush no
-     oom-score-adj no
-     oom-score-adj-values 0 200 800
- 
-     disable-thp yes
- 
-     appendonly no
-     appendfilename 'appendonly.aof'
-     appendfsync everysec
- 
-     no-appendfsync-on-rewrite no
- 
-     auto-aof-rewrite-percentage 100
-     auto-aof-rewrite-min-size 64mb
-     aof-load-truncated yes
-     aof-use-rdb-preamble yes
-     lua-time-limit 5000
-     slowlog-log-slower-than 10000
-     slowlog-max-len 128
-     latency-monitor-threshold 0
-     notify-keyspace-events ""
-     hash-max-ziplist-entries 512
-     hash-max-ziplist-value 64
-     list-max-ziplist-size -2
-     list-compress-depth 0
-     set-max-intset-entries 512
-     zset-max-ziplist-entries 128
-     zset-max-ziplist-value 64
-     hll-sparse-max-bytes 3000
-     stream-node-max-bytes 4096
-     stream-node-max-entries 100
-     activerehashing yes
-     client-output-buffer-limit normal 0 0 0
-     client-output-buffer-limit replica 256mb 64mb 60
-     client-output-buffer-limit pubsub 32mb 8mb 60
- 
-     # Hz is the freuqency at which background tasks are performed, we keep this low to save CPU
-     hz 1
- 
-     # The hz value is increased to scale with the number of clients connected.
-     dynamic-hz yes
- 
-     aof-rewrite-incremental-fsync yes
-     rdb-save-incremental-fsync yes
-     jemalloc-bg-thread yes
- 
-     maxmemory 40mb
-     maxmemory-policy allkeys-lru


@@ ConfigMap/ess-ci/release-name-valkey @@
+ ---
+ # Source: matrix-stack/templates/valkey/valkey_configmap.yaml
+ apiVersion: v1
+ kind: ConfigMap
+ metadata:
+   labels:
+     helm.sh/chart: "matrix-stack-26.9.1-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: valkey
+     app.kubernetes.io/instance: release-name-valkey
+     app.kubernetes.io/version: "9.1-alpine"
+   name: release-name-valkey
+   namespace: ess-ci
+ data:
+   valkey.conf: |
+     # Do not require a password
+     protected-mode no
+     port 6379
+ 
+     tcp-backlog 511
+     tcp-keepalive 300
+ 
+     # Never close the connection
+     timeout 0
+ 
+     # We run the Valkey in a container so disable both of these
+     daemonize no
+     supervised no
+ 
+     loglevel notice
+     logfile ''
+ 
+     databases 16
+     always-show-logo no
+     stop-writes-on-bgsave-error yes
+ 
+     # We never save to the disk
+     save ''
+ 
+     replica-serve-stale-data yes
+     replica-read-only yes
+     repl-diskless-sync no
+     repl-diskless-sync-delay 5
+     repl-diskless-load disabled
+     repl-disable-tcp-nodelay no
+     replica-priority 100
+     acllog-max-len 128
+ 
+     lazyfree-lazy-eviction no
+     lazyfree-lazy-expire no
+     lazyfree-lazy-server-del no
+     replica-lazy-flush no
+ 
+     lazyfree-lazy-user-del no
+ 
+     lazyfree-lazy-user-flush no
+     oom-score-adj no
+     oom-score-adj-values 0 200 800
+ 
+     disable-thp yes
+ 
+     appendonly no
+     appendfilename 'appendonly.aof'
+     appendfsync everysec
+ 
+     no-appendfsync-on-rewrite no
+ 
+     auto-aof-rewrite-percentage 100
+     auto-aof-rewrite-min-size 64mb
+     aof-load-truncated yes
+     aof-use-rdb-preamble yes
+     lua-time-limit 5000
+     slowlog-log-slower-than 10000
+     slowlog-max-len 128
+     latency-monitor-threshold 0
+     notify-keyspace-events ""
+     hash-max-ziplist-entries 512
+     hash-max-ziplist-value 64
+     list-max-ziplist-size -2
+     list-compress-depth 0
+     set-max-intset-entries 512
+     zset-max-ziplist-entries 128
+     zset-max-ziplist-value 64
+     hll-sparse-max-bytes 3000
+     stream-node-max-bytes 4096
+     stream-node-max-entries 100
+     activerehashing yes
+     client-output-buffer-limit normal 0 0 0
+     client-output-buffer-limit replica 256mb 64mb 60
+     client-output-buffer-limit pubsub 32mb 8mb 60
+ 
+     # Hz is the freuqency at which background tasks are performed, we keep this low to save CPU
+     hz 1
+ 
+     # The hz value is increased to scale with the number of clients connected.
+     dynamic-hz yes
+ 
+     aof-rewrite-incremental-fsync yes
+     rdb-save-incremental-fsync yes
+     jemalloc-bg-thread yes
+ 
+     maxmemory 40mb
+     maxmemory-policy allkeys-lru



@@ Deployment/ess-ci/release-name-matrix-rtc-authorisation-service - spec.template.spec.containers.matrix-rtc-authorisation-service.env.LIVEKIT_REDIS_URL.value @@
- redis://release-name-redis.ess-ci.svc.cluster.local.:6379/2
+ redis://release-name-valkey.ess-ci.svc.cluster.local.:6379/2


@@ 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.9.1-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: "9.1-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: Recreate
-   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: "9.1-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/valkey/valkey:9.1-alpine"
-           imagePullPolicy: Always
-           securityContext:
-             allowPrivilegeEscalation: false
-             capabilities:
-               drop:
-                 - ALL
-             privileged: false
-             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.90.0"
-           imagePullPolicy: Always
-           securityContext:
-             allowPrivilegeEscalation: false
-             capabilities:
-               drop:
-                 - ALL
-             privileged: false
-             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 @@
- ---
- # Source: matrix-stack/templates/redis/redis_service.yaml
- apiVersion: v1
- kind: Service
- metadata:
-   labels:
-     helm.sh/chart: "matrix-stack-26.9.1-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: "9.1-alpine"
-   name: release-name-redis
-   namespace: ess-ci
- spec:
-   type: ClusterIP
-   ipFamilyPolicy: PreferDualStack
-   ports:
-     - port: 6379
-       targetPort: redis
-       name: redis
-     - port: 9121
-       targetPort: metrics
-       name: metrics
-   selector:
-     app.kubernetes.io/instance: "release-name-redis"


@@ Service/ess-ci/release-name-valkey @@
+ ---
+ # Source: matrix-stack/templates/valkey/valkey_service.yaml
+ apiVersion: v1
+ kind: Service
+ metadata:
+   labels:
+     helm.sh/chart: "matrix-stack-26.9.1-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: valkey
+     app.kubernetes.io/instance: release-name-valkey
+     app.kubernetes.io/version: "9.1-alpine"
+   name: release-name-valkey
+   namespace: ess-ci
+ spec:
+   type: ClusterIP
+   clusterIP: None
+   ipFamilyPolicy: PreferDualStack
+   ports:
+     - port: 6379
+       targetPort: valkey
+       name: valkey
+     - port: 9121
+       targetPort: metrics
+       name: metrics
+   selector:
+     app.kubernetes.io/instance: "release-name-valkey"


@@ ServiceAccount/ess-ci/release-name-redis @@
- ---
- # Source: matrix-stack/templates/redis/redis_service_account.yaml
- apiVersion: v1
- kind: ServiceAccount
- metadata:
-   labels:
-     helm.sh/chart: "matrix-stack-26.9.1-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: "9.1-alpine"
-   name: release-name-redis
-   namespace: ess-ci
- automountServiceAccountToken: false


@@ ServiceAccount/ess-ci/release-name-valkey @@
+ ---
+ # Source: matrix-stack/templates/valkey/valkey_service_account.yaml
+ apiVersion: v1
+ kind: ServiceAccount
+ metadata:
+   labels:
+     helm.sh/chart: "matrix-stack-26.9.1-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: valkey
+     app.kubernetes.io/instance: release-name-valkey
+     app.kubernetes.io/version: "9.1-alpine"
+   name: release-name-valkey
+   namespace: ess-ci
+ automountServiceAccountToken: false


@@ ServiceMonitor/ess-ci/release-name-redis @@
- ---
- # Source: matrix-stack/templates/redis/redis_service_monitor.yaml
- apiVersion: monitoring.coreos.com/v1
- kind: ServiceMonitor
- metadata:
-   labels:
-     helm.sh/chart: "matrix-stack-26.9.1-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: "9.1-alpine"
-   name: release-name-redis
-   namespace: ess-ci
- spec:
-   endpoints:
-     - interval: 30s
-       port: metrics
-       relabelings:
-         - targetLabel: instance
-           sourceLabels: [__meta_kubernetes_pod_label_app_kubernetes_io_instance]
-           action: replace
-   selector:
-     matchLabels:
-       app.kubernetes.io/instance: release-name-redis


@@ ServiceMonitor/ess-ci/release-name-valkey @@
+ ---
+ # Source: matrix-stack/templates/valkey/valkey_service_monitor.yaml
+ apiVersion: monitoring.coreos.com/v1
+ kind: ServiceMonitor
+ metadata:
+   labels:
+     helm.sh/chart: "matrix-stack-26.9.1-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: valkey
+     app.kubernetes.io/instance: release-name-valkey
+     app.kubernetes.io/version: "9.1-alpine"
+   name: release-name-valkey
+   namespace: ess-ci
+ spec:
+   endpoints:
+     - interval: 30s
+       port: metrics
+       relabelings:
+         - targetLabel: instance
+           sourceLabels: [__meta_kubernetes_pod_label_app_kubernetes_io_instance]
+           action: replace
+   selector:
+     matchLabels:
+       app.kubernetes.io/instance: release-name-valkey


@@ StatefulSet/ess-ci/release-name-valkey @@
+ ---
+ # Source: matrix-stack/templates/valkey/valkey_statefulset.yaml
+ apiVersion: apps/v1
+ kind: StatefulSet
+ metadata:
+   labels:
+     helm.sh/chart: "matrix-stack-26.9.1-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: valkey
+     app.kubernetes.io/instance: release-name-valkey
+     app.kubernetes.io/version: "9.1-alpine"
+     k8s.element.io/valkey-config-hash: "041231d26819a14475f14ac6d0d412db9b31533f"
+   name: release-name-valkey
+   namespace: ess-ci
+ spec:
+   replicas: 1
+   selector:
+     matchLabels:
+       app.kubernetes.io/instance: release-name-valkey
+   serviceName: release-name-valkey
+   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: valkey
+         app.kubernetes.io/instance: release-name-valkey
+         app.kubernetes.io/version: "9.1-alpine"
+         k8s.element.io/valkey-config-hash: "041231d26819a14475f14ac6d0d412db9b31533f"
+     spec:
+       automountServiceAccountToken: false
+       serviceAccountName: release-name-valkey
+       securityContext:
+         fsGroup: 10002
+         runAsGroup: 10002
+         runAsNonRoot: true
+         runAsUser: 10002
+         seccompProfile:
+           type: RuntimeDefault
+         supplementalGroups: []
+       restartPolicy: Always
+       topologySpreadConstraints:
+         - labelSelector:
+             matchLabels:
+               app.kubernetes.io/instance: release-name-valkey
+           matchLabelKeys: []
+           maxSkew: 1
+           topologyKey: kubernetes.io/hostname
+           whenUnsatisfiable: ScheduleAnyway
+       containers:
+         - name: valkey
+           args:
+             - "/config/valkey.conf"
+           image: "docker.io/valkey/valkey:9.1-alpine"
+           imagePullPolicy: Always
+           securityContext:
+             allowPrivilegeEscalation: false
+             capabilities:
+               drop:
+                 - ALL
+             privileged: false
+             readOnlyRootFilesystem: true
+           ports:
+             - containerPort: 6379
+               name: valkey
+               protocol: TCP
+           startupProbe:
+             failureThreshold: 5
+             periodSeconds: 10
+             successThreshold: 1
+             timeoutSeconds: 1
+             tcpSocket:
+               port: valkey
+           livenessProbe:
+             failureThreshold: 3
+             periodSeconds: 10
+             successThreshold: 1
+             timeoutSeconds: 1
+             tcpSocket:
+               port: valkey
+           readinessProbe:
+             failureThreshold: 3
+             periodSeconds: 10
+             successThreshold: 1
+             timeoutSeconds: 1
+             exec:
+               command:
+                 - valkey-cli
+                 - ping
+           resources:
+             limits:
+               memory: 50Mi
+             requests:
+               cpu: 50m
+               memory: 50Mi
+           volumeMounts:
+             - mountPath: /config/valkey.conf
+               name: config
+               readOnly: true
+               subPath: valkey.conf
+         - name: valkey-exporter
+           image: "ghcr.io/oliver006/redis_exporter:v1.90.0"
+           imagePullPolicy: Always
+           securityContext:
+             allowPrivilegeEscalation: false
+             capabilities:
+               drop:
+                 - ALL
+             privileged: false
+             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
+    ...*[Comment body truncated]*

@benbz
benbz force-pushed the bbz/redis-as-statefulset branch from d7becb2 to 3d21bec Compare June 2, 2026 12:45
@benbz
benbz force-pushed the bbz/redis-as-statefulset branch from 3d21bec to e145078 Compare September 2, 2026 10:00
@benbz benbz changed the title Change Redis to be a StatefulSet Change Valkey to be a StatefulSet Sep 2, 2026
@benbz
benbz changed the base branch from main to bbz/redis-to-valkey-in-schema September 2, 2026 10:00
@benbz benbz changed the title Change Valkey to be a StatefulSet Change Valkey to be a StatefulSet whilst renaming Sep 2, 2026
@benbz
benbz force-pushed the bbz/redis-as-statefulset branch from e145078 to a3f8a9f Compare September 2, 2026 10:13
@benbz
benbz marked this pull request as ready for review September 2, 2026 10:14
@benbz
benbz requested a review from a team as a code owner September 2, 2026 10:14
@benbz
benbz force-pushed the bbz/redis-as-statefulset branch from a3f8a9f to f1dfdbc Compare September 2, 2026 10:18
@benbz
benbz merged commit b6a4ca4 into main Sep 2, 2026
261 of 269 checks passed
@benbz
benbz deleted the bbz/redis-as-statefulset branch September 2, 2026 14:22
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.

2 participants