← Projecten

Redis in productie migreren met nul seconden downtime

Een productie-Redis met Sentinel overgezet naar een nieuwe release met een geharde image, ACL's per applicatie en een nieuwe chart. Naast de oude uitgerold, in twee rondes gemigreerd, en de volgorde aangepast omdat de secrets-manager zelf de enige gebruiker was.

Aanleiding

De pipeline blokkeerde op drie kritieke kwetsbaarheden in perl-base in de Redis-image. Een nieuwere Redis-versie loste dat niet op, want alle drie de versies hadden exact dezelfde bevindingen, terwijl Debian de fix al had. De officiële image was simpelweg niet herbouwd. De alpine-variant scande schoon, maar mist bash, en de chart gebruikt bash in de preStop-hooks die de gecontroleerde failover regelen. Die herschrijven is een groter risico dan de CVE's.

De oplossing: een eigen herbouw van dezelfde officiële image, met alleen de actuele Debian-updates. Zie Als upstream niet herbouwt. Dat was meteen het moment om de hele release te moderniseren.

Wat er veranderde

OudNieuw
Chartoudere community-chartnieuwe versie, eigen repository
Imageofficieel, niet herbouwdgeharde herbouw, gepind op digest
Toegangéén wachtwoordACL's per applicatie, secrets in Infisical
Geheugenbeleidnoevictionvolatile-lru, met een limiet
CI—Kustomize- en Helm-render, Kubeconform, Trivy op manifests en images

De volgorde die ik omgooide

Het oorspronkelijke plan was: nieuw omhoog, oud omlaag, applicatie omzetten. Bij nader inzien was dat onveilig. De enige gebruiker van Redis bleek Infisical te zijn, de secrets-manager. En Infisical is ook de bron van de ACL-secrets. Wie de oude release eerst stopt, sluit zichzelf buiten.

Dat de secrets-manager de enige consument was, had ik vastgesteld door alle Deployments, StatefulSets en CronJobs in het cluster te scannen op verwijzingen naar de oude service.

De gevolgde volgorde:

  1. de nieuwe release naast de oude uitrollen (geen naamconflicten in services, PVC's of PDB's);
  2. de dataset migreren, ronde 1;
  3. Infisical omzetten en verifiëren;
  4. de delta migreren, ronde 2;
  5. pas dan de oude release stoppen, met de PVC's en een dump bewaard als terugweg.

Resultaat

  • Nul seconden downtime.
  • Na acht uur onder belasting: 69 actieve verbindingen, ~20.800 keys, nul geweigerde verbindingen, en de oude release volledig stil.
  • Een migratieverslag met de commando's, de gemeten uitkomsten, de terugweg en de open punten.
  • Documentatie om een nieuwe applicatie toegang te geven: ACL toevoegen en het bijbehorende secret in Infisical.

Les

Begin een migratie met de vraag wie de dienst eigenlijk gebruikt, en of een van die gebruikers jouw migratie zelf nodig heeft.