Generic control plane

Posted on Dec 23, 2024

I’ve been watching what the folks working on KCP have been doing for a while and I think it’s very cool. There is a lot that can be said about Kubernetes and control planes especially in the context of enterprise companies and what I am sure about is that there is still no standard or no winner for control planes and for managing multiple Kubernetes clusters at any meaningful scale. Lots of companies are still adopting simple approach and aren’t explicitly dealing with multicluster or real platform level APIs. Without providing a comprehensive view of all the tools in the space, I want to focus on what the folks working on KCP are doing. KCP is a “An open source horizontally scalable control plane for Kubernetes-like APIs” which already tells an interesting story about its ambitions: it’s more than just a multicluster solution. KCP seems to be aiming at re-using the concepts behind Kubernetes to build multi-tenant platforms for enterprises. I have grasped the idea for a while, but also didn’t understand how that could be useful to me and I recently decided to invest a little bit more in understanding it and some of the projects in that space.

The recent KubeCon US talk

The folks working on KCP made a talk at the latest KubeCon called “Deep dive into generic Control Planes and Kcp” and when I watched it I wrote some notes for myself which I never published anywhere, reported below.

I’ve said it right from the beginning of Kubernetes project, that the main advantage of Kubernetes is that it is an API. This API has always had terrific extension points, first with Third Party Resources, then with Custom Resource Definitions, but also with the API server webhooks for admission and transformations. I’ve always wondered why the community didn’t push more on using more the idea of control planes as an extension of Kubernetes, going beyond what can be done with CRDs which are a bit strict and stuck to a world of reconcilers that doesn’t necessarily fit all types of APIs. I am excited to hear about generic control planes and I am definitely not up to date with the mentioned KEP in the video. I remember skimming it in the past, but I completely lost track of it.

For the KCP part of the talk, I was aware of most of the concepts and, while I do not enjoy the continuous comparison that the Cloud Native community keeps to do with core UNIX concepts, it was good to have a refresher.

As I said on social media as well, I think the talk lacked a showcase of which problems can be solved with KCP other than just talking about its main concepts and internals. KubeCon is a very technical conference, but it got so big that most likely there always are people in the room (and at home like me), who want to know more about use cases to then dive deep into topics alone at a later time.

Diving into more than KCP

I said it already several times, KCP is really interesting, but instead of exploring it as it is, today I wanted to explore the other tool mentioned in the talk above which is “generic controlplane”. The idea behind it is minimal Kubernetes control plane that allows to create and offer APIs, but that doesn’t have some of the built in parts of Kubernetes like controllers managing deployments and pods, services and so on. Those are useless when building just a control plane that doesn’t want to manage directly applications and thus can be removed. There is also generally a perceived complexity in what it is to manage Kubernetes as a control plane which I think is not correct. The project seems to aim at focusing on the API part of Kubernetes, without the troubles. It’s very much in development, but I built a demo with it.

Demo

In this demo, I will show:

  1. starting the generic controlplane with CRDs enabled
  2. bootstrapping a new CRD
  3. talking with the controlplane with kubectl
  4. talking with the controlplane with just curl

You can watch a video of the demo here.