JusDB
Free DB Audit
NoSQL Databases

Valkey and Redis Operators on Kubernetes Compared

Compare the official Valkey operator, OpsTree, Spotahome, Redis Enterprise, and Bitnami charts on status, licence, topology, failover, TLS, upgrades, and backup.

JusDB Team
Published November 3, 2026
18 min read

Search for "valkey operator" or "redis operator" and you get a dozen GitHub repositories, a vendor product, and Helm charts that stopped pulling images in 2025. The Spotahome operator that many Sentinel setups were built on is archived. The Bitnami charts default to image tags that Docker Hub now answers with a 404. The official Valkey operator reached v0.8.0 in October 2026 and still says it is not ready for production. This post checks each option's status as of November 2026, then compares topology, failover, persistence, TLS and ACLs, upgrades, backup, observability, and licence, so you can pick one for Valkey 9.x or Redis 7 and 8 before the first failover tests it for you.

TL;DR
  • The official valkey-io/valkey-operator (Apache-2.0, v0.8.0 on 22 October 2026) runs Valkey Cluster mode only, has no backup or restore, and its README says it is not ready for production use.
  • The OpsTree redis-operator (Apache-2.0, v0.27.0 on 9 October 2026) covers standalone, replication with Sentinel, and cluster, but supports Redis only; Valkey support is an open request.
  • The Spotahome redis-operator is archived; its last release, v1.2.4, is dated 28 December 2022. Plan a move off it.
  • Bitnami charts in the GitHub repo still default to versioned docker.io/bitnami tags that no longer exist there. The same tags live on in bitnamilegacy, which gets no updates.
  • Redis Enterprise for Kubernetes (operator 8.2.6-21, 29 October 2026) is the most complete option, with backups and Active-Active, but it needs a commercial licence after a 30-day, 4-shard trial.

Scope and review date: November 2026. This post covers Kubernetes operators and Helm charts for Valkey 7.2 to 9.1 and Redis 6 to 8. Release dates, licences, and archive status were read from each project's GitHub repository and documentation on 9 November 2026. The commands and manifests were checked against that documentation and were not run in a lab, so try them on a staging cluster first.


Which Valkey and Redis operators are maintained in November 2026?

The table shows each project's licence, latest release, and state as GitHub showed them on 9 November 2026. Canonical's valkey-operator, a Juju charm, is out of scope.

ProjectLicenceLatest releaseState
valkey-io/valkey-operatorApache-2.0v0.8.0, 22 Oct 2026Active; README: not ready for production
OT-CONTAINER-KIT/redis-operator (OpsTree)Apache-2.0v0.27.0, 9 Oct 2026Active; Redis only
chideat/valkey-operatorApache-2.0v2.1.0, 28 Sep 2026Active; six contributors listed
SAP/valkey-operatorApache-2.0v0.1.20, 2 Nov 2026Active; wraps the Bitnami Valkey chart
hyperspike/valkey-operatorApache-2.0v0.0.61, 12 Oct 2025No release for a year; last commit April 2026
spotahome/redis-operatorApache-2.0v1.2.4, 28 Dec 2022Archived (read-only)
Redis Enterprise for KubernetesCommercial8.2.6-21, 29 Oct 2026Active; vendor supported
valkey-io/valkey-helm (chart, not an operator)BSD-3-Clause0.12.1, 27 Oct 2026; 1.0.0-rc.1, 29 Oct 2026Active
bash
# Re-check any project before you adopt it (needs the GitHub CLI)
for r in valkey-io/valkey-operator OT-CONTAINER-KIT/redis-operator spotahome/redis-operator; do
  gh api repos/$r --jq '"\(.full_name) archived=\(.archived) license=\(.license.spdx_id) pushed=\(.pushed_at)"'
  gh api repos/$r/releases/latest --jq '"  latest: \(.tag_name) \(.published_at)"'
done

Interpretation: archived=true means nobody will merge fixes. A recent pushed date with an old latest release means the fixes you need may exist only on the main branch.

What does the official Valkey operator do today?

The valkey-io/valkey-operator repository was created in September 2025. Its first release, v0.1.0, came on 11 May 2026, and eight more followed by v0.8.0 on 22 October 2026. The README carries an early development notice: "not ready for production use", and the v1alpha1 API may change.

It manages one resource, ValkeyCluster: Valkey in Cluster mode with slot allocation, failover, rolling updates, and ACLs. The quickstart lists its limits: Cluster mode only, no backup or restore, no cert-manager integration (TLS uses a Secret you create), and scale-out and scale-in need Valkey 9.0 or later.

yaml
apiVersion: valkey.io/v1alpha1
kind: ValkeyCluster
metadata:
  name: my-cluster
spec:
  shards: 3
  replicas: 1
  image: valkey/valkey:9.0.7     # pin a tag; the operator default is valkey/valkey:9.0.0
  persistence:                   # cannot be added or removed after creation
    size: 10Gi
    storageClassName: gp3
  config:
    cluster-node-timeout: "5000" # Valkey default is 15000 ms; changing it rolls the pods
  networking:
    tls:
      certificates:
        server:
          secretName: valkey-tls

Interpretation: three primaries with one replica each, six pods. Every field is from the ValkeyCluster reference. Decide on persistence at creation time: the reference says it cannot be added or removed afterwards, the size can only grow, and storageClassName is immutable. Pin the image tag. With latest or a digest, the operator cannot detect the Valkey version and drops version-gated directives such as tls-auto-reload-interval, which needs Valkey 9.1.0.

Checking a ValkeyCluster and its nodes

Illustrative output: the columns come from the v0.8.0 CRDs; names, roles, and ages are examples

kubectl: namespace valkey
$ kubectl get valkeycluster my-clusterNAME STATE REASON AGEmy-cluster Ready ClusterHealthy 12m$ kubectl get valkeynodesNAME READY ROLE POD AGEmy-cluster-0-0 true primary valkey-my-cluster-0-0-0 12mmy-cluster-0-1 true replica valkey-my-cluster-0-1-0 12mmy-cluster-1-0 true primary valkey-my-cluster-1-0-0 12mmy-cluster-1-1 true replica valkey-my-cluster-1-1-0 12mmy-cluster-2-0 true primary valkey-my-cluster-2-0-0 12mmy-cluster-2-1 true replica valkey-my-cluster-2-1-0 12m

Watch the reason, not only the state: during a roll, Ready stays False with reason UpdatingNodes, and since v0.8.0 the message names the shard that is waiting for a synced replica. The status conditions doc lists every reason.

Operator upgrades need care. The v0.8.0 release notes say to apply both CRDs first, because Helm does not upgrade CRDs, and warn that a cluster name over 41 characters (with single-digit indexes) blocks every later update.

bash
kubectl apply --server-side --force-conflicts -f \
  https://raw.githubusercontent.com/valkey-io/valkey-operator/v0.8.0/config/crd/bases/valkey.io_valkeyclusters.yaml
kubectl apply --server-side --force-conflicts -f \
  https://raw.githubusercontent.com/valkey-io/valkey-operator/v0.8.0/config/crd/bases/valkey.io_valkeynodes.yaml

Interpretation: skip this and the cluster still reports Ready, but the API server silently prunes the new podMetadata and serviceAccountName fields. Read every release note of an alpha operator before you upgrade.

Can the OpsTree redis-operator run Valkey?

Not officially. The OpsTree redis-operator README says it supports Redis 6 and later, using images from quay.io/opstree. A GitHub issue titled "Valkey support?" (#1395) has been open since 9 June 2025, and the project's roadmap lists Valkey standalone, replication, and cluster support as future work. Running Valkey images under it is untested by the project, so treat it as a Redis operator.

For Redis it is the broadest open-source option. It has four CRDs: Redis (standalone), RedisReplication, RedisSentinel, and RedisCluster. A RedisReplication can also run Sentinel inline:

yaml
apiVersion: redis.redis.opstreelabs.in/v1beta2
kind: RedisReplication
metadata:
  name: redis-replication
spec:
  clusterSize: 3
  sentinel:
    size: 3
    image: quay.io/opstree/redis-sentinel:v7.0.15
  kubernetesConfig:
    image: quay.io/opstree/redis:v7.0.15
  storage:
    volumeClaimTemplate:
      spec:
        accessModes: ["ReadWriteOnce"]
        resources:
          requests:
            storage: 1Gi

Interpretation: this is the example from the OpsTree replication guide. Its Sentinel defaults are quorum 2, downAfterMilliseconds 5000, failoverTimeout 10000, and parallelSyncs 1. The image tags in the docs are old; pick a current tag from quay.io/opstree/redis and check its licence (below).

Standalone upgrades are an outage, as the upgrade guide says; cluster mode rolls leaders, then followers. Backups are scripts, not a resource: scripts/backup targets S3, Google Cloud Storage, and Azure Blob, run as a Job you build and own.

bash
kubectl apply --server-side -f \
  https://raw.githubusercontent.com/OT-CONTAINER-KIT/redis-operator/v0.27.0/charts/redis-operator/crds/crds.yaml
helm upgrade redis-operator ot-helm/redis-operator --namespace ot-operators --version 0.27.0

Interpretation: CRDs first, because the v0.27.0 notes say three CRDs changed and helm upgrade does not update them. The same release fixed several Sentinel reconcile bugs, a reason to move off older versions.

The operator licence is not the server licence

OpsTree's operator is Apache-2.0, but the Redis server inside the pod is not. Per Redis's licence page, 7.2.x and earlier are BSD-3-Clause, 7.4.x to 7.8.x are RSALv2 or SSPLv1, and Redis 8 and later add AGPLv3 as a third option. Have whoever owns licensing review the tag you pin.

How does a Sentinel failover work under an operator?

Sentinel does the failover; the operator keeps Kubernetes in step with it. The Valkey Sentinel documentation separates the two votes. The quorum only detects the failure, and the failover itself needs a vote from a majority of Sentinel processes. That is why three Sentinels is the documented minimum.

Sentinel failover under the OpsTree operator

Sentinel promotes the replica; the operator moves the master Service label

Sentinel failover with an operator-managed master Service Step 1: three Sentinels stop getting replies from pod 0, the primary. After downAfterMilliseconds (5000 ms by default) and a quorum of 2, they agree it is down. Step 2: a leader Sentinel, elected by a majority, promotes pod 1 to primary and repoints the other replicas. Step 3: the operator relabels pods by their real role, so the redis-replication-master Service stops selecting pod 0 and selects pod 1. The application keeps connecting through the master Service and reconnects to pod 1. 3 Sentinels quorum 2 Pod 0 old primary Pod 1 new primary Application uses -master Service -master Service selects redis-role Operator reconciles labels 1 5000 ms 2 leader promotes pod 1 3 relabel

Writes can be lost: replication is asynchronous, and the Sentinel documentation says there is always a window for losing acknowledged writes. Test what your application does with them before production.

In OpsTree's code, the <name>-master Service selects pods labelled redis-role=master, and the operator rewrites that label to match each pod's real role. Between step 2 and step 3, clients on the Service can still reach the old pod or nothing. A Sentinel-aware client asks Sentinel directly instead:

bash
# Inline Sentinel of a RedisReplication named redis-replication: StatefulSet redis-replication-s
kubectl exec -n ot-operators redis-replication-s-0 -- \
  redis-cli -p 26379 SENTINEL get-master-addr-by-name mymaster

Interpretation: this returns the IP and port of the current primary. In the v0.27.0 source, inline Sentinel uses the master name mymaster and sets the quorum to a majority of sentinel.size (2 for 3 Sentinels), while a separate RedisSentinel resource defaults to myMaster. Confirm both with SENTINEL masters. If the answer differs from the pod the -master Service selects, the operator has not reconciled yet; if that lasts, read the operator logs. The official Valkey Helm chart 1.0.0-rc.1 makes the same point: the primary can be any pod, so clients need a Sentinel-aware library or the chart's HAProxy front-end.

What should you do if you run the Spotahome redis-operator?

Plan a migration. The spotahome/redis-operator repository is archived. Its last release, v1.2.4, is from 28 December 2022, and its README says it was tested against Kubernetes 1.25 to 1.27 and Redis 6. It managed one resource, RedisFailover: Redis with Sentinel, no Cluster mode.

bash
# Find every RedisFailover still running, and the images they use
kubectl get redisfailovers.databases.spotahome.com -A
kubectl get pods -A -l redisfailovers.databases.spotahome.com/name \
  -o jsonpath='{range .items[*]}{.metadata.namespace}{"\t"}{.metadata.name}{"\t"}{.spec.containers[0].image}{"\n"}{end}'

Interpretation: the first command lists the instances to move; the second prints the images of pods carrying the label the operator's source sets. Nothing breaks the day a repository is archived; the risk is the next Kubernetes API removal or CVE. For Redis Sentinel, OpsTree's RedisReplication with sentinel is the closest fit. For Valkey, look at chideat's operator or the official chart's Sentinel mode once it leaves release candidate.

What do the 2025 Bitnami changes mean for Redis and Valkey charts now?

Bitnami announced the change in bitnami/containers issue #83267 on 16 July 2025. From 28 August 2025, Bitnami stopped publishing new images and charts to Docker Hub in OCI format. Versioned tags moved from docker.io/bitnami to docker.io/bitnamilegacy, which gets no further updates. The free bitnamisecure images are limited to the latest tag and meant for development. Source stays on GitHub under Apache 2.0; production images with version history are part of the paid Bitnami Secure Images offering. On 9 November 2026, Docker Hub's API showed:

  • docker.io/bitnami/valkey and docker.io/bitnami/redis expose only the latest tag.
  • The bitnami/valkey chart (4.0.3) on GitHub defaults to docker.io/bitnami/valkey:8.1.3-debian-12-r3. Docker Hub returns 404 for that tag, so a fresh install with defaults cannot pull its image.
  • The same tag exists in bitnamilegacy/valkey, last pushed on 8 August 2025. The newest Redis tag in bitnamilegacy/redis is 8.2.1-debian-12-r0, pushed on 22 August 2025. Neither will get a CVE fix.
  • The SAP Valkey operator renders the Bitnami chart and defaults to bitnamilegacy/valkey, so it inherits the same frozen images.
bash
# Every Bitnami image still running in the cluster
kubectl get pods -A -o jsonpath='{range .items[*]}{range .spec.containers[*]}{.image}{"\n"}{end}{end}' \
  | grep -E 'bitnami(legacy|secure)?/' | sort | uniq -c

Interpretation: a versioned bitnami/ image fails the next time a node must pull it, such as after a node replacement. A bitnamilegacy/ image runs but is frozen. Budget a move to the official images, the official Valkey Helm chart, or an operator.

Changing repositories is not a version upgrade

Bitnami images use their own paths, users, and environment variables. Pointing image.repository at the official image changes the container, not just the tag, so rehearse it on a copy of the data and check persistence paths and authentication before production.

When does the Redis Enterprise operator make sense?

When you want Redis Software features on Kubernetes and will pay for them. Operator 8.2.6-21, released on 29 October 2026 under the newer name Redis Software for Kubernetes, added Gateway API exposure. The model differs from the open-source operators. A RedisEnterpriseCluster (REC) runs Redis Software nodes, and each database is a RedisEnterpriseDatabase (REDB). The cluster manager handles replication and failover; there is no Sentinel.

The quick start sets the floor: at least three worker nodes, each REC node requesting 2 CPUs and 4 GB of memory by default, one REC per namespace, and no single-node RECs. Without a licence key, the cluster runs in trial mode: 30 days and 4 shards, counting primary and replica shards. After the licence expires you cannot add databases or change their settings.

yaml
apiVersion: app.redislabs.com/v1alpha1
kind: RedisEnterpriseDatabase
metadata:
  name: sessions
spec:
  memorySize: 2GB
  shardCount: 2
  replication: true          # one replica shard per primary shard
  persistence: aofEverySecond
  tlsMode: enabled
  backup:
    interval: 86400          # seconds; daily
    s3:
      awsSecretName: s3-backup-creds
      bucketName: my-redis-backups

Interpretation: with replication on, two primary shards make four shards, the whole trial allowance. The fields come from the REDB API reference; spec.backup also accepts GCS, Azure, SFTP, FTP, Swift, and mount targets.

How do the operators compare feature by feature?

The three most likely shortlist candidates, on the same rows, from each project's documentation as of November 2026.

Valkey, OpsTree, and Redis Enterprise operators side by side

Switch operators to compare the same nine rows

valkey-io v0.8.0

Areavalkey-io/valkey-operator
StatusAlpha (v1alpha1); README: not ready for production
TopologiesValkey Cluster only
FailoverValkey Cluster's own; operator promotes with TAKEOVER in some no-persistence cases
PersistencePVC per node; set at creation only
TLS and ACLTLS from your Secret, mTLS; ACL users applied live with ACL LOAD
UpgradesRolling, replica first; apply CRDs by hand before operator upgrades
BackupNone
Observabilityredis_exporter sidecar on 9121; status conditions
LicenceApache-2.0; Valkey is BSD-3-Clause

OpsTree v0.27.0

AreaOT-CONTAINER-KIT/redis-operator
StatusActive; Redis 6 and later only
TopologiesStandalone, replication, Sentinel, Cluster
FailoverSentinel for replication; Redis Cluster's own for cluster
PersistencevolumeClaimTemplate per pod
TLS and ACLTLS from a Secret (cert-manager documented); ACL file from a Secret or PVC
UpgradesCluster rolls leaders then followers; standalone has downtime
BackupScripts for S3, GCS, and Azure Blob; you run the Job
Observabilityredis-exporter on 9121; ServiceMonitor; Grafana dashboard 16056
LicenceApache-2.0; Redis server licence depends on version

Redis Enterprise 8.2.6-21

AreaRedis Enterprise for Kubernetes
StatusVendor product, supported by Redis
TopologiesClustered databases, replica databases, Active-Active
FailoverRedis Software cluster manager; no Sentinel
PersistenceAOF or snapshot policy per database
TLS and ACLtlsMode per database; Redis Software access control and LDAP
UpgradesOperator-driven REC upgrade; OLM on OpenShift
Backupspec.backup to S3, GCS, Azure, SFTP, FTP, Swift, or a mount
ObservabilityPrometheus operator integration; Cluster Manager UI
LicenceCommercial; 30-day, 4-shard trial

Backup is the gap: only Redis Enterprise backs up from the custom resource. With either open-source operator, scheduled RDB copies to object storage are your job, and so are the restore drills.

The other options in brief:

OptionTopologiesWorth knowing
chideat/valkey-operator v2.1.0Standalone, Sentinel ("failover"), ClusterLists Valkey 7.2 to 9.1 on Kubernetes 1.33 to 1.35 as stable; ACL users as a CRD; exporter; no backup resource
SAP/valkey-operator v0.1.20Primary with replicas, or SentinelNo Cluster mode; renders the Bitnami chart with bitnamilegacy images; TLS via cert-manager or self-signed
Valkey Helm chart 0.12.1Standalone, replicationOfficial; requires Valkey 9.0+; says it will not support Cluster mode; Sentinel only in 1.0.0-rc.1
Bitnami redis and valkey chartsReplication, Sentinel; separate cluster chartsDefault image tags no longer on docker.io/bitnami

How do you choose and roll out an operator?

Start from the topology your clients already speak. A client that is not cluster-aware cannot move to Cluster mode by a config change, and a single-host client needs a Service that follows the primary.

Choosing and rolling out a Valkey or Redis operator

Eight steps; step 7 is the outage window, while clients move

  1. Inventory topology, clients, and images

    Record standalone, Sentinel, or Cluster for each instance, whether each client library supports Sentinel or Cluster, and every image tag.

    kubectl get pods -A -o jsonpath=\ '{..image}' | tr ' ' '\n' | sort -u
  2. Pick by topology and licence

    Cluster on Valkey: the official operator, if you accept alpha. Sentinel on Redis: OpsTree. Backups and support from the CR: Redis Enterprise.

  3. Pin every version

    Pin the operator chart, the CRD version, and the server image tag. Never deploy latest.

    helm install valkey-operator \ valkey/valkey-operator --version 0.8.0 \ -n valkey-operator-system --create-namespace
  4. Build the target on staging

    Use production-sized memory limits and the same storage class. Load a copy of production data.

  5. Run failure drills

    Delete the primary pod, drain a node, and restart the operator. Time each recovery and count lost writes.

    kubectl delete pod valkey-my-cluster-0-0-0
  6. Prove backup and restore

    Schedule RDB copies to object storage and restore one into a scratch namespace before cutover.

  7. Cut clients over

    Outage window

    Pause writes, take a final sync or RDB, then repoint clients to the new Service or Sentinel address.

  8. Keep the old deployment, then retire it

    Leave the old pods and PVCs in place, scaled to zero, until a full business cycle has passed on the new one.

Rollback point: until step 7 the old deployment still serves production, so rolling back is free. After cutover, writes that landed only on the new deployment are lost if you go back without copying them.

Frequently asked questions

Is there an official Valkey operator for Kubernetes?

Yes. The Valkey project publishes valkey-io/valkey-operator under Apache-2.0, installed from the valkey.io/valkey-helm chart repository. Version v0.8.0 shipped on 22 October 2026. Its README says it is in early development and not ready for production use, it supports Valkey Cluster mode only, and it has no backup or restore yet.

Can I use the OpsTree redis-operator with Valkey?

Not with project support. The OpsTree README says the operator supports Redis 6 and later. A GitHub issue requesting Valkey support has been open since June 2025, and Valkey appears only on the roadmap. If you point it at Valkey images anyway, test failover and upgrades yourself first.

Is the Spotahome redis-operator still maintained?

No. The spotahome/redis-operator repository is archived and read-only, and its last release, v1.2.4, is dated 28 December 2022. Existing RedisFailover deployments keep running, but nobody will ship fixes for new Kubernetes versions or security issues. Plan a move to a maintained Sentinel-capable operator or chart.

Do the Bitnami Redis and Valkey Helm charts still work?

Not with default values. Since the August 2025 catalog change, docker.io/bitnami keeps only the latest tag for these images, while the charts default to versioned tags such as valkey 8.1.3-debian-12-r3. Those tags moved to docker.io/bitnamilegacy, which receives no updates, so use it only as a stopgap.

Which Kubernetes operator supports Redis or Valkey backups?

Among the options reviewed, only Redis Enterprise for Kubernetes takes backups from the custom resource, through spec.backup on each database with S3, GCS, Azure, and other targets. The OpsTree operator ships backup scripts you run as a Job. The official Valkey operator lists no backup or restore as a current limitation.

Key takeaways

  • Check archive status, latest release date, and licence from the repository before adopting any operator, and note the date you checked.
  • For Valkey Cluster, the official operator is the one to watch, but it is alpha, has no backup, and changes its API between releases.
  • For Redis with Sentinel, OpsTree is the maintained open-source choice; the Spotahome operator is archived.
  • Audit every Bitnami image tag in your clusters; versioned docker.io/bitnami tags are gone and bitnamilegacy is frozen.
  • Whatever you pick, prove failover and restore on staging, and keep the old deployment until a full business cycle has passed.

Run Valkey or Redis on Kubernetes with JusDB

JusDB's Valkey on Kubernetes team can review your Valkey or Redis deployments, check operators, charts, and image sources against their maintenance status, and plan a move off an archived operator or frozen Bitnami images, with failover and restore drills before cutover. For Redis, see Redis on Kubernetes.

Bring your topology, client libraries, image list, and maintenance windows. Your team approves every production change.

Share this article

Database engineering notes

Articles like this one, in your inbox. No spam, unsubscribe anytime.

JusDB Team

Official JusDB content team

Keep reading

Moving a Multi-Database Valkey Instance into a 9.x Cluster

Move a Valkey instance that uses SELECT 1 to 15 into a 9.x cluster: keep or remap databases, copy each one, verify counts per database, and keep a way back.

Redis18 minNov 10, 2026
Read

Valkey Keyspace Notifications in Production: Expired Events, hexpired and Cluster Mode

Run Valkey keyspace notifications in production: why expired and hexpired events lag the TTL, how to subscribe on every cluster node, and when a stream is safer.

Redis20 minNov 10, 2026
Read

Valkey GLIDE in Production: AZ-Affinity Reads and Migrating from Legacy Clients

Configure Valkey GLIDE AZ-affinity reads on servers and clients, learn what GLIDE 2.5.3 does not support, and migrate from redis-py, Jedis, ioredis, or go-redis one service at a time.

Redis20 minNov 10, 2026
Read