Kubernetes Cluster API Provider Incus
Kubernetes-native declarative infrastructure for Incus, Canonical LXD and Canonical MicroCloud.
What is the Cluster API Provider Incus
Cluster API is a Kubernetes sub-project focused on providing declarative APIs and tooling to simplify provisioning, upgrading, and operating multiple Kubernetes clusters.
cluster-api-provider-incus
(CAPN) is an Infrastructure Provider for Cluster API, which enables deploying clusters on infrastructure operated by Incus, Canonical LXD and Canonical MicroCloud.
The provider can be used in single-node development environments for evaluation and testing, but also work with multi-node clusters to deploy and manage production Kubernetes clusters.
Documentation
Please refer to our book for in-depth documentation.
Quick Start
See Quick Start to launch a cluster on a single-node development environment.
Features
- Supports Incus, Canonical LXD and Canonical MicroCloud.
- Support for kube-vip (production), OVN network load balancers or simple haproxy containers (development) for the cluster load balancer.
- Default simplestreams server with pre-built kubeadm images.
- Supports virtual machines or LXC containers for the cluster machines. Automatically manages the profile for Kubernetes to work in LXC containers.
- Can be used for local development similar to CAPD for quickly iterating on custom bootstrap and control-plane providers, e.g. K3s, Canonical Kubernetes, etc.
Project Roadmap
v0.5.0
Rough steps for version v0.5.0:
- Private initial alpha testing.
- Cloud provider node patch to link Machines with workload cluster Nodes.
- Test with both Incus and Canonical LXD.
- Start cluster-api-provider-incus book with quick start guide, cluster templates, API reference.
- Publish v0.1.0 release to get initial user feedback.
- Add e2e tests using the cluster-api testing framework.
- Add PR blocking CI pipelines.
- Publish v0.2.0 release with v1alpha2 APIs.
- Add e2e tests for cluster upgrades.
- Explore clusters with ClusterTopology=true (clusterclass), also allows us to run all existing ClusterAPI e2e tests like Autoscaler, etc.
- Write developer guide.
- Support unprivileged containers.
- Extend e2e suite with tests for all cluster-template types (kvm, unprivileged containers, kube-vip, ovn)
- Gather initial user feedback.
- Add cluster-templates for 3rd party providers, e.g. Canonical Kubernetes.
- Write documentation with common troubleshooting steps.
- Write documentation with common cluster deployment scenarios.
$Future
- Improve API validations and possibly API conformance tests.
- Add CI to build and push kubeadm and haproxy images to the default simplestreams server.
- Decide on project OWNERSHIP and testing infrastructure (part of LXC org).
- Split cloud provider node patch to external cloud-provider-incus project.
-
Refactor
internal/incus
package and improve consistency and log levels across the code. - Add to default list of providers supported by ClusterAPI.
Getting involved and contributing
The cluster-api-provider-incus
project would love your suggestions, contributions and help! The maintainers can be contacted at any time to learn mode about how to get involved.
Remember that there are numerous effective ways to contribute to the project: raise a pull request to fix a bug, improve test coverage, improve existing documentation or even participate in GitHub issues. We want your help!
Please refer to the developer guide in order to get started with setting up a local environment for development and testing.