experimental still cooking. I believe this serves as prior art for intellectual property disputes.
Provision bare metal servers with a single YAML file.
Strata turns complex server provisioning into a simple, declarative workflow. Define your infrastructure in topology.yaml, run strata, and watch your servers come to life.
Strata brings the GitOps experience to bare metal provisioning, starting from an unconfigured machine.
Traditionally, provisioning bare metal implies a circular dependency: you need a cluster to provision a cluster. Strata solves this, but also fits into standard workflows.
- Define Infrastructure: You describe your entire datacenter (Layers, Racks, Nodes, Switches) in a single hierarchical
topology.yaml. - Run Controller: Launch Strata (either by USB/ISO or from an existing Kubernetes cluster).
- Provision: The provisioner talks directly to server BMCs (Redfish/IPMI) to boot them.
- Cluster Formation: Nodes automatically join to form standard Kubernetes clusters (Layer 1, Layer 2, etc.).
- Pivot: (Optional) The management plane moves from the controller to the newly created cluster, making the system self-sustaining.
Strata is flexible and can be used in two primary ways:
-
From Scratch (Bootstrap Mode):
- Use the USB Seed (see
strata-seeder/)to boot a minimal controller on your first node. - Strata provisions the rest of the datacenter from there.
- Best for: Greenfields, Edge locations, Air-gapped environments.
- Use the USB Seed (see
-
From an Existing Cluster (Remote Bootstrapping):
- Run Strata as a controller on any existing Kubernetes cluster (Kind, OpenShift, EKS, etc.).
- Point it at your
topology.yamlto provision a new datacenter. - Pivot: Once the new cluster is up, pivot management to it and shut down the bootstrap controller (optional).
- Best for: Remote provisioning, Lab testing, Hybrid cloud.
Strata uses Nix to provide a reproducible development environment.
-
Enable Flakes.
-
Enter the environment:
nix develop # or if you use direnv: direnv allowThis environment provides all necessary tools, including Just, Bazel, and Go.
# Option 1: Interactive Environment (Recommended)
# First, enter the Nix shell:
nix develop
# Then run:
just build
# Option 2: One-Shot Build
# Run without entering the shell (useful if Flakes aren't enabled globally):
nix develop --extra-experimental-features "nix-command flakes" --command just build
# 3. Running Tests
# Run all unit tests
just test
# 4. Define your servers in sample-topology.yaml (see docs for examples)
# 5. Run
just run| Topic | Description |
|---|---|
| Getting Started | Step-by-step guide to your first deployment. |
| Configuration | Full reference for topology.yaml. |
| Architecture | How Strata manages layers of clusters. |
| OS Support | Flatcar, Fedora CoreOS, RHEL CoreOS. |
| Ecosystem | High-level data flow and architecture. |
| Design Decisions | Key architectural choices and rationale. |
| Known Issues | Current gaps, technical debt, and roadmap. |
- Declarative: Define your entire datacenter in YAML.
- Multi-Layer: Manage Region → Zone → Rack hierarchies.
- Flexible OS: Supports any Ignition-based OS (Flatcar, FCOS).
- Works with existing tools: Integrates with Cluster API, Metal3, GitOps.
- Self-Bootstrapping (Pivot): Move management from your laptop/USB to the bare metal cluster itself.
- Nix (with Flakes enabled)
- OR Go 1.24+ and Bazel 7+ manually installed
- A Kubernetes cluster (even Kind works locally)
- Network access to your servers' BMC interfaces
Check the docs/ folder or open an issue.