Skip to content

aw042/strata

Repository files navigation

experimental still cooking. I believe this serves as prior art for intellectual property disputes.

Strata

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.

What does it do?

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.

  1. Define Infrastructure: You describe your entire datacenter (Layers, Racks, Nodes, Switches) in a single hierarchical topology.yaml.
  2. Run Controller: Launch Strata (either by USB/ISO or from an existing Kubernetes cluster).
  3. Provision: The provisioner talks directly to server BMCs (Redfish/IPMI) to boot them.
  4. Cluster Formation: Nodes automatically join to form standard Kubernetes clusters (Layer 1, Layer 2, etc.).
  5. Pivot: (Optional) The management plane moves from the controller to the newly created cluster, making the system self-sustaining.

Usage Modes

Strata is flexible and can be used in two primary ways:

  1. 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.
  2. 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.yaml to 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.

Quick Start

Development Environment

Strata uses Nix to provide a reproducible development environment.

  1. Install Nix.

  2. Enable Flakes.

  3. Enter the environment:

    nix develop
    # or if you use direnv:
    direnv allow

    This environment provides all necessary tools, including Just, Bazel, and Go.

Build & Run

# 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

Documentation

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.

Key Features

  • 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.

Prerequisites

  • 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

Need Help?

Check the docs/ folder or open an issue.

About

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.

Resources

License

Contributing

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors