Steward Cluster API Control Plane Provider
The Steward Control Plane Provider is a Cluster API implementation that bridges CAPI with Steward hosted control planes.
What is This?
This provider enables Cluster API to use Steward's TenantControlPlane resources as the control plane for CAPI-managed clusters. Instead of provisioning dedicated control plane nodes, the control plane runs as pods in a management cluster, managed by Steward.
How it works:
- CAPI creates a
Cluster resource referencing a StewardControlPlane
- This provider creates a Steward
TenantControlPlane resource
- Steward provisions the hosted control plane (apiserver, controller-manager, scheduler as pods)
- Worker nodes from any CAPI infrastructure provider join the hosted control plane
- The provider synchronizes status between CAPI and Steward
What is Steward?
Steward is an open-source project offering hosted Kubernetes control planes. The control plane runs in a management cluster as regular pods, enabling efficient multi-tenancy and reduced infrastructure overhead.
Steward is a community-governed fork of Kamaji, maintained by Butler Labs and the open source community. See the Steward documentation for more information.
StewardControlPlane Example
apiVersion: controlplane.cluster.x-k8s.io/v1alpha1
kind: StewardControlPlane
metadata:
name: my-cluster-control-plane
namespace: default
spec:
version: "1.29.0"
replicas: 2
dataStoreName: default
network:
serviceType: LoadBalancer
certSANs:
- "my-cluster.example.com"
kubelet:
preferredAddressTypes:
- InternalIP
- ExternalIP
- Hostname
cgroupfs: systemd
addons:
coreDNS: {}
kubeProxy: {}
CAPI Cluster Example
Complete example using StewardControlPlane with a CAPI infrastructure provider:
apiVersion: cluster.x-k8s.io/v1beta1
kind: Cluster
metadata:
name: my-cluster
namespace: default
spec:
clusterNetwork:
pods:
cidrBlocks:
- 10.244.0.0/16
services:
cidrBlocks:
- 10.96.0.0/16
controlPlaneRef:
apiVersion: controlplane.cluster.x-k8s.io/v1alpha1
kind: StewardControlPlane
name: my-cluster-control-plane
infrastructureRef:
apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
kind: <InfrastructureCluster>
name: my-cluster
---
apiVersion: controlplane.cluster.x-k8s.io/v1alpha1
kind: StewardControlPlane
metadata:
name: my-cluster-control-plane
namespace: default
spec:
version: "1.29.0"
replicas: 2
dataStoreName: default
network:
serviceType: LoadBalancer
addons:
coreDNS: {}
kubeProxy: {}
Supported CAPI Infrastructure Providers
Looking for additional integrations? Open a GitHub Discussion or issue.
Prerequisites
- Kubernetes management cluster (v1.28+)
- Steward installed and configured with a DataStore
- Cluster API core components (v1.6+)
- A supported CAPI infrastructure provider
Installation
Using clusterctl
clusterctl init --control-plane steward
Using Helm
helm repo add butler https://charts.butlerlabs.dev
helm install capi-steward butler/capi-steward -n capi-system
Development
This document describes how to use kind and Tilt for a simplified workflow that offers easy deployments and rapid iterative builds.
- Create a
kind cluster according to the CAPI Infrastructure Provider requirements
- Install Cluster API with the
clusterctl CLI
- Install Steward using Helm
- Clone this repository
- Run the provider with
make run or use dlv for debugging
- Run Tilt by issuing
tilt up
Versioning
Versioning adheres to Semantic Versioning principles. A full list of releases is available in the Releases section.
Contributing
Contributions are welcome! Please see our Contributing Guide for details.
- Check existing issues before opening a new one
- For bugs, provide a detailed report to help replicate and assess the issue
- Commit messages follow conventional commits
Documentation
License
Apache License 2.0. See LICENSE for details.