032-cluster-topology

Cluster topology: N=1 primary, N=3 StatefulSet on Kubernetes, one key set, S3 backups

Lifecycle approvedImplementation completeVerification unknownQualification unknown

What multiplies and what does not. At N=1 nothing changes. At N=3 every replica is identical: a StatefulSet pod running the supervisor, with its own volume, two Raft clusters per replica (rauthy's and the app's), peers discovered by stable pod DNS, one key set injected as a Secret and custodied once, the public origin on an Ingress that terminates TLS and keeps /metrics off it, a CronJob that runs backup --to s3:// against the leader, and a ServiceMonitor example. Rate limiting is per node and says so. A shared volume between Raft members is refused by the manifests themselves. Carries enrahitu://030.

Read the full pinned specification ↗

Relationships

Claimed units

  • establishes
    {
      "kind": "file",
      "path": "deploy/k8s/kustomization.yaml"
    }
  • establishes
    {
      "kind": "file",
      "path": "deploy/k8s/configmap.yaml"
    }
  • establishes
    {
      "kind": "file",
      "path": "deploy/k8s/statefulset.yaml"
    }
  • establishes
    {
      "kind": "file",
      "path": "deploy/k8s/service.yaml"
    }
  • establishes
    {
      "kind": "file",
      "path": "deploy/k8s/ingress.yaml"
    }
  • establishes
    {
      "kind": "file",
      "path": "deploy/k8s/migrate-job.yaml"
    }
  • establishes
    {
      "kind": "file",
      "path": "deploy/k8s/backup-cronjob.yaml"
    }
  • establishes
    {
      "kind": "file",
      "path": "deploy/k8s/servicemonitor.yaml"
    }
  • establishes
    {
      "kind": "file",
      "path": "deploy/k8s/secret.example.yaml"
    }
  • establishes
    {
      "kind": "file",
      "path": "deploy/n3/"
    }
  • establishes
    {
      "kind": "file",
      "path": "deploy/README.md"
    }
  • establishes
    {
      "kind": "file",
      "path": "scripts/k8s-validate.sh"
    }
  • establishes
    {
      "kind": "file",
      "path": "crates/rahi-store/tests/attach.rs"
    }
  • extends
    {
      "nature": "additive",
      "spec": "011-store-hiqlite",
      "unit": {
        "kind": "file",
        "path": "crates/rahi-store/src/store.rs"
      }
    }
  • extends
    {
      "nature": "additive",
      "spec": "011-store-hiqlite",
      "unit": {
        "kind": "file",
        "path": "crates/rahi-store/src/backup.rs"
      }
    }
  • extends
    {
      "nature": "additive",
      "spec": "030-operational-verbs",
      "unit": {
        "kind": "file",
        "path": "crates/rahi-ops/Cargo.toml"
      }
    }
  • extends
    {
      "nature": "additive",
      "spec": "030-operational-verbs",
      "unit": {
        "kind": "file",
        "path": "crates/rahi-ops/src/lib.rs"
      }
    }
  • extends
    {
      "nature": "additive",
      "spec": "030-operational-verbs",
      "unit": {
        "kind": "file",
        "path": "crates/rahi-ops/src/preflight.rs"
      }
    }
  • extends
    {
      "nature": "additive",
      "spec": "030-operational-verbs",
      "unit": {
        "kind": "file",
        "path": "crates/rahi-cli/src/lib.rs"
      }
    }
  • extends
    {
      "nature": "additive",
      "spec": "030-operational-verbs",
      "unit": {
        "kind": "file",
        "path": "crates/rahi-cli/src/serve.rs"
      }
    }
  • extends
    {
      "nature": "additive",
      "spec": "030-operational-verbs",
      "unit": {
        "kind": "file",
        "path": "crates/rahi-cli/src/verbs.rs"
      }
    }
  • extends
    {
      "nature": "additive",
      "spec": "030-operational-verbs",
      "unit": {
        "kind": "file",
        "path": "crates/rahi-cli/tests/cli.rs"
      }
    }
  • extends
    {
      "nature": "additive",
      "spec": "031-single-container-packaging",
      "unit": {
        "kind": "file",
        "path": "crates/rahi-ops/src/first_boot.rs"
      }
    }
  • extends
    {
      "nature": "additive",
      "spec": "031-single-container-packaging",
      "unit": {
        "kind": "file",
        "path": "crates/rahi-ops/src/rauthy_env.rs"
      }
    }
  • extends
    {
      "nature": "additive",
      "spec": "031-single-container-packaging",
      "unit": {
        "kind": "file",
        "path": "crates/rahi-ops/src/supervise.rs"
      }
    }
  • extends
    {
      "nature": "additive",
      "spec": "031-single-container-packaging",
      "unit": {
        "kind": "file",
        "path": "crates/rahi-ops/tests/first_boot.rs"
      }
    }
  • extends
    {
      "nature": "additive",
      "spec": "039-release-and-out-of-tree-packaging",
      "unit": {
        "kind": "file",
        "path": "crates/rahi-ops/rauthy.env.template"
      }
    }
  • extends
    {
      "nature": "additive",
      "spec": "001-agentic-harness",
      "unit": {
        "kind": "file",
        "path": "Makefile"
      }
    }
  • extends
    {
      "nature": "additive",
      "spec": "001-agentic-harness",
      "unit": {
        "kind": "file",
        "path": ".github/workflows/govern.yml"
      }
    }

Source headings

  1. 032: Cluster topology
  2. 1. Purpose
  3. 2. Territory
  4. 3. Behavior
  5. 4. Functional requirements
  6. 5. Acceptance criteria
  7. 6. Out of scope
  8. 7. Resolved decisions
  9. 8. Status
  10. Verification

Frozen anchors

No frozen anchors declared.