Skip to content

Verilean/gungnir-operator

Repository files navigation

Project Gungnir: Formally Verified Valkey Operator

"Named after the mythological spear that never misses its mark."

Project Gungnir is a Kubernetes Operator for Valkey, designed to provide mathematically guaranteed reliability through Lean 4 formal verification following the Anvil (OSDI'24) patterns.

Project Status

Metric Value
Lean files 18 (17 library + 1 Main.lean daemon)
Docker build Passes, produces native gungnir_operator binary
Helm chart Complete at charts/gungnir-operator/
Deployed Running on K8s with leader election, replication
Proved theorems 73 (38 in Main.lean, 35 in library)
Sorry remaining 0 (4 TCB axioms in RESP3.lean)
CRD API group valkey.verilean.io/v1

Trusted Computing Base (TCB)

4 axioms in RESP3.lean — language-level ByteArray/String properties, not operator logic gaps:

  • utf8_roundtrip, byteArray_append_size, findCRLF_at_crlf, parse_unparse_roundtrip

Proved (0 sorry across all files)

  • Invariants.lean: 10 safety invariants (atMostOneMaster, ownerRefConsistency, noConcurrentUpdates, sentinelForwardProgress, leaderElectionSafety, reconcileStepValid, partitionSafety, serviceConsistency, noDoubleFailover, pdbProtectsMaster)
  • Liveness.lean: 9 liveness theorems (livenessTheorem, esr_holds, reconcileTerminates_holds, failedMasterReplaced_holds, failedNodeDetected_holds, reconcileStep_decreases_measure, phase0/1/6_eventually_holds)
  • ReplicaSelection.lean: 8 theorems (select_best_replica_total, replicaLessThan_total, replicaLessThan_trans, selected_has_best_priority, selection_maximizes_data_safety, etc.)
  • TemporalLogic.lean: 4 lemmas (wf1_rule, leadsTo_trans, eventually_mono, always_suffix)
  • Main.lean: 38 theorems covering reconciler properties, leader election, resource creation, CR health map isolation
  • RESP3.lean: 1 theorem + 4 axioms (TCB)

Architecture

┌─────────────────────────────────────┐
│  Gungnir Operator (Lean 4 binary)   │
│  ┌──────────┐  ┌─────────────────┐  │
│  │ Reconciler│  │ Sentinel (FSM)  │  │
│  │  (FSM)   │  │ Health → SDOWN  │  │
│  │ Init→Get │  │ → Select → Pro- │  │
│  │ →Create  │  │   mote → Reconf │  │
│  │ →Update  │  │   → UpdateSvc   │  │
│  │ →Health  │  │   → Done        │  │
│  └──────────┘  └─────────────────┘  │
│  ┌──────────────────────────────┐   │
│  │ kubectl bridge (JSON → exec) │   │
│  └──────────────────────────────┘   │
└─────────────────────────────────────┘
         │ kubectl apply/exec
         ▼
┌─────────────────────────────────────┐
│  Kubernetes Cluster                 │
│  ┌──────────┐ ┌──────────────────┐  │
│  │ CRD:     │ │ Managed:         │  │
│  │ Valkey   │ │ StatefulSet      │  │
│  │ Cluster  │ │ Services (2)     │  │
│  │          │ │ ConfigMap        │  │
│  │          │ │ Secret           │  │
│  │          │ │ PDB              │  │
│  └──────────┘ └──────────────────┘  │
│  ┌──────────────────────────────┐   │
│  │ Valkey Pods (master+replicas)│   │
│  │ Pod-0: master                │   │
│  │ Pod-1..N: REPLICAOF pod-0   │   │
│  └──────────────────────────────┘   │
└─────────────────────────────────────┘

Quick Start

# Build
lake build gungnir_operator

# Docker
docker build -t gungnir-operator:latest .

# Deploy via Helm
helm install gungnir charts/gungnir-operator/ -n gungnir-system --create-namespace

# Create a ValkeyCluster
kubectl apply -f - <<EOF
apiVersion: valkey.verilean.io/v1
kind: ValkeyCluster
metadata:
  name: my-valkey
  namespace: valkey-test
spec:
  replicas: 3
  image: "valkey/valkey:7.2"
  port: 6379
EOF

Key Features

  • Operator-as-Sentinel: Integrates Sentinel monitoring directly — no separate Sentinel containers
  • Formally verified: TLA-style temporal logic proofs in Lean 4
  • Pure Lean 4: No FFI dependencies, pure RESP3 parser
  • Anvil pattern: State machine reconciler with one API call per transition
  • Leader election: K8s Lease API with expiry detection
  • Replication: Automatic master-replica setup via startup script

Formal Verification

The operator uses a TLA-style temporal logic framework (TemporalLogic.lean) with:

  • always (□), eventually (◇), leads_to (~>), weak_fairness
  • Safety invariants proved as inductive invariants over validTransition
  • Liveness properties stated as leads-to chains (ESR from Anvil)
  • All proofs discharged — 0 sorry, 4 TCB axioms

See plans.md and features.md for full details.

Author

Junji Hashimoto

  • Background: Haskell, Lean 4, Formal Methods, Critical Infrastructure Operations.

Building the shield for data sovereignty.

About

Formally Verified Valkey Operator

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages