A Kubernetes operator that implements the Cluster API infrastructure provider for bare-metal machines.
Simple, reliable approach: Redfish power management + iPXE network boot + Hardware inspection.
- Simple - No complex vendor-specific workarounds
- Reliable - Only uses universally-supported Redfish features
- Vendor Agnostic - Works with any Redfish-compliant BMC
- Hardware Discovery - Collects real hardware specs via inspection
- Clean architecture, minimal dependencies - Distroless image, no CGO, narrow RBAC
- Beskar7 claims a physical host
- Sets PXE boot flag via Redfish
- Powers on the server
- Server network boots inspection image (iPXE)
- Inspection image collects hardware details
- Reports back to Beskar7
- Validates hardware requirements
- Kexecs into target OS
- Machine joins cluster
Version: v0.4.0-alpha.8
Status: Alpha (pre-GA). The v1beta1 API is frozen — no further breaking changes; the schema evolves additive-only until a future v1beta2 (introduced with a conversion webhook) is needed.
Breaking Changes: v0.4.0 is NOT compatible with v0.3.x (see CHANGELOG)
- Kubernetes v1.31+ with kubectl configured
- Cluster API v1.10+ (install with clusterctl)
- cert-manager v1.16+ (installation guide)
- iPXE infrastructure - DHCP + HTTP server (setup guide)
- Inspection image - beskar7-inspector (repository)
Using Helm (Recommended):
helm repo add beskar7 https://projectbeskar.github.io/beskar7
helm repo update
helm install --devel beskar7 beskar7/beskar7 \
--namespace beskar7-system --create-namespaceThe --devel flag is required while the chart version is a SemVer pre-release (0.4.0-alpha.6); drop it once a non-prerelease tag is cut.
Using Release Manifests:
kubectl apply -f https://github.com/projectbeskar/beskar7/releases/download/v0.4.0-alpha.6/beskar7-manifests-v0.4.0-alpha.6.yamlSee Installation for detailed install steps, or the Quick Start for the first provisioning flow.
apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
kind: PhysicalHost
metadata:
name: server-01
spec:
redfishConnection:
address: "https://192.168.1.100"
credentialsSecretRef: "bmc-credentials"apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
kind: Beskar7Machine
metadata:
name: worker-01
spec:
inspectionImageURL: "http://boot-server/beskar7-inspector/boot"
targetImageURL: "http://boot-server/kairos/v2.8.1.tar.gz"
hardwareRequirements:
minCPUCores: 4
minMemoryGB: 16Complete examples: See examples/ directory for full cluster configurations.
Beskar7 consists of three main controllers:
- PhysicalHost Controller - Manages BMC connections and power state
- Beskar7Machine Controller - Orchestrates provisioning workflow
- Beskar7Cluster Controller - Manages cluster-level infrastructure
Detailed architecture: See docs/architecture.md
Works with any Redfish-compliant BMC. Tested with Dell, HPE, Lenovo, Supermicro, and generic BMCs.
Details: See docs/hardware-compatibility.md
- Installation - Prerequisites and install steps
- Quick Start - First provisioning flow
- iPXE Setup Guide - Infrastructure setup
- Architecture - Technical architecture details
- API Reference - Complete API documentation
- Examples - Working configuration examples
- Troubleshooting - Common issues and solutions
- Hardware Compatibility - Supported BMCs
git clone https://github.com/projectbeskar/beskar7.git
cd beskar7
make build
make testSee docs/ci-cd-and-testing.md for complete development guide.
Contributions are welcome! Please:
- Open an issue to discuss major changes
- Follow existing code style
- Add tests for new features
- Update documentation
Apache License 2.0 - See LICENSE file for details.
- Issues: https://github.com/projectbeskar/beskar7/issues
- Discussions: https://github.com/projectbeskar/beskar7/discussions
- Documentation: https://github.com/projectbeskar/beskar7/tree/main/docs
This project was inspired by and learns from:
- Tinkerbell - Network boot provisioning
- Metal³ - Kubernetes bare-metal
- Cluster API - Kubernetes cluster lifecycle
Beskar7 - Simple, reliable bare-metal provisioning for immutable Kubernetes.