Redis to valkey
Claude Code plugin marketplace — 58 installable reference skills across vLLM/SGLang inference, Kubernetes & Harvester, GPU host bring-up, observability, security, and agent workflows.
npx -y skills add air-gapped/skills --skill redis-to-valkeyAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 3 stars3 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its author says it does
Copied from the file, not written here
Migrate Redis deployments (especially Bitnami Redis Helm charts in Sentinel HA mode) to Valkey on Kubernetes, including fully air-gapped clusters. Core knowledge: the RDB-version wall (Valkey replicates/loads only from Redis ≤ 7.2.x; Redis 7.4+ writes RDB v12 which Valkey rejects; Valkey 9 writes its own v80 — a one-way door), the two transfer layers (version-bound REPLICAOF/DUMP-RESTORE vs version-agnostic logical replay with RedisShake or rdb-cli), a side-by-side cutover runbook, Valkey chart selection (groundhog2k / CloudPirates / official valkey-io tradeoffs), Bitnami-redis→valkey values translation, consumer-app reconnection (Sentinel discovery, master-set names, frozen redis_version 7.2.4), Prometheus exporter continuity, air-gap tool/image mirroring, and Argo CD source rewiring away from charts.bitnami.com. Part of the bitnami-exit suite.
SKILL.md
11.1 KB, ~2.5k tokens by cl100k_base, as published. Nobody here has run it
redis-to-valkey
Migrate Redis (Bitnami-chart Sentinel HA or any standalone/replicated Redis) to Valkey on Kubernetes with data intact, clients reconnected, and no dependency left on dead-ended Bitnami artifacts. Facts below were verified 2026-07-18 against primary sources (valkey source at release tags, chart repos, vendor docs); re-verify anything version-gated before relying on it in a later year.
Why this migration exists
Broadcom locked down the free Bitnami catalog (effective 2025-09-29):
versioned images moved to frozen docker.io/bitnamilegacy and most charts
froze. charts.bitnami.com still serves, so pinned charts sync fine and
the failure arrives later, at image-pull time — the first pod reschedule
onto a node without the tag cached fails. Migrate deliberately, but don't
assume the status quo is stable (full risk model:
references/airgap-gitops.md). Valkey (Linux Foundation fork of Redis
7.2.4, BSD-licensed) is the sanctioned successor — major consumers (Harbor,
GitLab) have adopted or officially support it.
The one fact that shapes every plan: the RDB-version wall
Valkey forked at Redis 7.2. Its replication and snapshot formats stayed at the fork point, then diverged on their own path:
| Server | Writes RDB | Can load |
|---|---|---|
| Redis 7.0 | v10 | ≤ v10 |
| Redis 7.2 | v11 | ≤ v11 |
| Redis 7.4 / 8.x | v12 | ≤ v12 |
| Valkey 8.0 / 8.1 | v11 | ≤ v11 (v12+ rejected as foreign) |
| Valkey 9.0 / 9.1 | v80 (own numbering) | v11 and v80; Redis v12+ rejected |
(Verified in src/rdb.h at release tags: RDB_VERSION, RDB_FOREIGN_VERSION_MIN 12.)
Consequences:
REPLICAOF, RDB file copy,DUMP/RESTORE, andMIGRATEwork only from Redis ≤ 7.2.x sources. A full sync ships an RDB stream; a DUMP payload embeds RDB encodings. From Redis 7.4+ these fail withCan't handle RDB format version 12.- Worse than failing: a Valkey replica FLUSHES its own dataset before it discovers the incoming RDB is unreadable (valkey-io/valkey#2588). Never point a Valkey holding data at a source "to see if replication works".
- Valkey 9 is a one-way door. Its v80 snapshots load on nothing else — not Redis, not Valkey 8. The final pre-cutover Redis RDB is the only rollback artifact; archive it before decommissioning.
- The wall is about persistence formats, not the wire protocol. Any client speaking RESP to Redis 7.2 works against Valkey — which is exactly why logical replay (next section) is version-agnostic.
Choosing a transfer method
Two layers exist; pick by source version and data class:
Version-bound (physical) — only for Redis ≤ 7.2.x sources:
- Live: on Valkey run
REPLICAOF <redis-host> 6379, wait formaster_link_status:up+ offset convergence, repoint clients,REPLICAOF NO ONE. - Offline:
BGSAVE→ pollLASTSAVE→ stop Redis → placedump.rdbin Valkey's data dir → start Valkey with AOF disabled for the first boot (an enabled AOF silently wins over the RDB and the server boots empty), re-enable after.
Version-agnostic (logical replay) — any Redis version → any Valkey: Tools that decode the data themselves and re-issue plain commands; the target only ever sees ordinary RESP traffic.
- RedisShake (tair-opensource, v4.6+): live PSync sync (keeps target in sync while apps are repointed one at a time), RDB-file reader, SCAN reader. Supports Redis 2.8–8.4.x → Valkey 8–9, standalone/Sentinel/cluster. Caveats: no resume (restart = full recopy); panics on topology change — quiesce failovers during the run.
- rdb-cli (redis/librdb): parses any-version
dump.rdboffline and replays it as commands. Best for maintenance-window cutovers.
No transfer (fresh start) — legitimate for disposable data classes:
| Data class | Examples | Loss consequence | Verdict |
|---|---|---|---|
| Pure cache | page/object caches | cold-cache latency blip | fresh start |
| Sessions | encrypted web sessions | users re-authenticate once | fresh start (announce it) |
| Job queues / app state | Sidekiq, jobservice queues, schedules | enqueued work permanently lost | must transfer (or drain queues to empty in maintenance mode first) |
Read references/data-transfer.md for full recipes (RedisShake configs
incl. Sentinel endpoints, rdb-cli build, verification commands, air-gap
delivery of both tools).
Cutover runbook (side-by-side, any method)
Never upgrade in place — resource naming, UIDs, and formats differ across charts. Deploy Valkey next to Redis, move data, repoint, decommission:
- Deploy the Valkey release side-by-side (new release name). Decide the
Sentinel master-set name up front — keeping the old name (commonly
mymaster) means zero client-side master-set changes. - Pre-verify the empty Valkey:
SENTINEL ckquorum <group>returns OK,SENTINEL get-master-addr-by-name <group>answers, auth works. - Quiesce writers: scale client Deployments to 0 or enable the app's maintenance mode. (For live RedisShake sync, start the sync before this step and quiesce only for the final repoint.)
- Move the data per the method chosen above. Skip for fresh-start classes.
- Repoint the app: sentinel endpoint list + master-set name + password secret (shape may change per chart — see values translation). For URL-style single-endpoint apps note that some Valkey charts' HA service exposes ONLY the sentinel port — the app must actually speak Sentinel.
- Scale up and verify:
DBSIZEcomparison, sampled keys with TTLs intact, app functional probe, exporter metrics flowing. - Archive the final Redis RDB (rollback artifact — see one-way door), soak, then delete the Bitnami release, its PVCs, and its image pins.
Chart selection and values translation
As of 2026-07-18: groundhog2k/valkey (Sentinel HA haMode, upstream
valkey/valkey images, tracks Valkey releases within days, bus-factor 1) and
CloudPirates valkey (Sentinel + an externalReplica migration mode,
multi-maintainer, cosign-signed, but one extra OCI library-chart to mirror)
are the production-ready Sentinel options. The official valkey-io chart
has no Sentinel yet (replication without automatic failover; Sentinel PR
pending — recheck before new deployments, a first-party chart likely wins
long-term). The Bitnami valkey chart is frozen with dead-ended images. The
official valkey-operator is cluster-mode-only and self-declared not
production-ready.
Bitnami-redis values do NOT translate 1:1. The traps that break clients or
lose data are: auth as config-file fragments instead of a bare
password secret, an HA service exposing only 26379, a different default
master-set name, persistence defaulting to emptyDir, ServiceMonitor
defaulting ON, and UID 999 vs Bitnami's 1001. Full mapping table, behavioral
diffs, and exporter wiring: references/chart-migration.md.
Reconnecting consumer applications
Apps fall into config-surface classes — identify the class, then the
translation is mechanical: Sentinel-aware (endpoint list + master-set +
possibly a separate sentinel password), URL-based single endpoint (needs a
real 6379 service or must be switched to its Sentinel mode), DB-index
multiplexed (one server, many logical DBs — preserve index assignments), and
version-parsing (Valkey hardcodes redis_version:7.2.4 forever — real
version is in valkey_version; two-part 7.2 builds have crashed naive
parsers). Classes, verification steps, and the dated per-product
compatibility log (Harbor, GitLab, oauth2-proxy, Open WebUI, Sidekiq,
Sentry): references/app-cutover.md and references/known-consumers.md.
Air-gap and GitOps rewiring
The complete mirror list for a Sentinel HA migration is short: 2 images
(docker.io/valkey/valkey, exporter oliver006/redis_exporter — also on
ghcr.io and quay.io), 1 vendored chart tarball, and optionally the
RedisShake static binary (single-file Go binary from GitHub releases; also
ghcr.io/tair-opensource/redisshake as an image). For Argo CD: keep the
multi-source $values pattern and swap only the chart source; vendoring the
chart into git is the only bootstrap-safe option when the migrated Redis
backs the cluster's own registry (a registry cannot host the chart for its own
dependency's replacement). Details, OCI syntax (no oci:// prefix in Argo
repoURL), Bitnami-endpoint risk model, and Renovate notes:
references/airgap-gitops.md.
Pitfalls quick index
Before executing any plan, scan references/pitfalls.md (19 entries by
severity). Beyond the traps already covered above: dual-channel replication
- Sentinel phantom replicas on Kubernetes (#2338 — fix shipped in Valkey
9.1.0 ONLY; keep
dual-channel-replication-enabled nobelow that); HEXPIRE absent until Valkey 9; io-threads default-on in Valkey 8+ raising per-pod CPU vs single-threaded Redis sizing.
Reference files
| File | Read when |
|---|---|
references/data-transfer.md | moving data: recipes for REPLICAOF / RDB copy / RedisShake / rdb-cli, verification, tool delivery offline |
references/chart-migration.md | selecting a chart or translating Bitnami redis values |
references/app-cutover.md | repointing applications; config-surface classes; verification checklist |
references/known-consumers.md | dated per-product compatibility findings (log-style, append-only) |
references/airgap-gitops.md | air-gapped mirroring, chart vendoring, Argo CD source rewiring |
references/pitfalls.md | always, before executing a migration plan |
What ships with it: 9 files
43.4 KB alongside SKILL.md
evals/
- evals.json3.2 KB
references/
- airgap-gitops.md4.6 KB
- app-cutover.md4.1 KB
- chart-migration.md7.0 KB
- data-transfer.md6.5 KB
- improvement-backlog.md2.9 KB
- known-consumers.md4.0 KB
- pitfalls.md4.9 KB
- sources.md6.2 KB