I have been using ClusterAPI for an internal project at work. One problem I saw when creating tens of clusters per day with ClusterAPI, was that all cluster addons had to be manually installed/upgraded (there are solutions like Flux, which is a solid one, but I did not like the amount of user interaction that was still required). I wanted something capable of automatically discovering clusters and understanding their state.

So I started working on an open source project called projectsveltos https://github.com/projectsveltos .

The main idea of Sveltos is to allow users to programmatically list which addons need to be deployed where (where is expressed using a ClusterSelector which selects all ClusterAPI powered clusters with labels matching the selector).

Helm values can be passed directly. Or Sveltos can be instructed to fetch those from the management cluster.

Having worked in the past in a different startup doing policy distribution in a distributed system, I know visibility is important. So sveltos provides user with DryRun mode as well where user can see the effect of a change before committing it https://github.com/projectsveltos/sveltosctl#display-outcome...

But I was still not happy. Main reason, users still had to go and manage cluster labels. I wanted clusters' labels to change as cluster runtime state was changing. So I can express my intent and then forget about it.

So I introduced a second concept in Sveltos. Classifier CRD (https://github.com/projectsveltos/demos/blob/main/classifier...) which allows users to classify clusters based on cluster runtime state (currently kubernetes version and/or resources deployed, but I am working on adding more).

Doing so I can easily now say: - any cluster running Kubernetes version v1.25.2 needs this version of calico as CNI - as clusters are upgraded to Kubernetes version v1.25.2 the right labels are added on cluster so that right version of calico is deployed.

Sveltos is an open source project. Contributions are more welcome.

If you would like to know more about it or would like to see a new feature added to sveltos, please reach to us on slack. Any feedback is very much appreciated.

Interesting, I have approached this problem using Helmfile (https://github.com/roboll/helmfile) to define a “platform release package.”