Skip to content

Commit

Permalink
docs: add proposal for Node Bootstrapping working group
Browse files Browse the repository at this point in the history
Co-Authored-by: Johanan Liebermann <[email protected]>
Signed-off-by: Thilo Fromm <[email protected]>
  • Loading branch information
t-lo and johananl committed Nov 15, 2024
1 parent 1cd1543 commit 857dd3d
Showing 1 changed file with 107 additions and 0 deletions.
107 changes: 107 additions & 0 deletions docs/community/20241112-node-bootstrapping.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,107 @@
---
title: ClusterAPI Node Bootstrapping Working Group
authors:
- "@t-lo"
reviewers:
- "@elmiko"
- "@eljohnson92"
- "@johananl"
- "@tormath1"
- "@fabriziopandini"
- "@sbueringer"

creation-date: 2024-11-12
last-updated: 2024-11-15
status: proposed
see-also:
- https://github.com/kubernetes-sigs/cluster-api/issues/5294
- https://docs.google.com/document/d/1Fz5vWwhWA-d25_QDqep0LWF6ae0DnTqd5-8k8N0vDDM/edit
- https://github.com/kubernetes-sigs/cluster-api/issues/9157
- https://youtu.be/0AhA4Box3MM?si=IfKJfMWmlA9EW7ri&t=172
---

# Node Bootstrapping Working Group ("CAPI-NoBo")

This document briefly outlines the scope, communication media, and
stakeholders for a Working Group dedicated to the Provisioning aspect of
Node Bootstrapping.

Provisioning, in this context, refers to configuring and customising the
node operating system to prepare it to serve as a ClusterAPI cluster node.


## User Story and Problem Statement

As a Linux Distribution maintainer aiming to support ClusterAPI, or to improve
my existing support of ClusterAPI in my distribution, I would like to be able to
cleanly integrate my contributions into the node bootstrapping process without
interfering with other implementations.
I would like my contributions to be as re-usable as possible across different
bootstrap providers.
I would like to read and to follow documentation, guidelines, and specifications
on the above.
I would like to be able to do this to deliver choice, variety, and innovation to
users of my own distribution as well as to the larger ClusterAPI ecosystem, and
to enable other distribution vendors to do the same.


**Problem statement / Example issues**

Currently, the kubeadm bootstrap provider implements two provisioning systems:
cloud-init and ignition.
As there is currently no abstraction of node configuration, both implementations
must cover generic configuration as well as specific config language concerns.
This leads to duplicate code and to maintenance overhead.
Also, other providers like e.g. MicroK8s must implement their own OS configuration
generators since kubeadm's node provisioning implementations cannot be re-used.
MicroK8s currently only supports cloud-init.

Outside of ClusterAPI, both [cloud-init](https://github.com/canonical/cloud-init)
and [ignition](https://github.com/coreos/ignition) provisioning is widely adopted
across distributions.
While cloud-init is used by general-purpose Linux distributions like Ubuntu/Debian,
SUSE Linux, Alma, Rocky, Fedora, and Red Hat Enterprise Linux, ignition is popular
with special-purpose distributions like Fedora CoreOS / Red Hat CoreOS, SuSE MicroOS
/ SLE Micro / Kalpa, and Flatcar Container Linux.
It is likely that more provisioning systems exist; a clean separation and guidelines
will make it easier to add support to ClusterAPI as well as to share implementations
across bootstrap providers.


**Compatibility and API guarantees**

ClusterAPI has been stable for multiple years and is in widespread production use.
Proposals and implementations of this working group must ensure existing integrations
continue to work.
Any changes in the kubeadm bootstrap provider in particular must uphold guarantees and
expectations set by the current implementation, and must continue to support current use
cases.

## Scope

1. Propose architectural improvements that ease integration of node configuration
implementations.
Decouple generic bootstrapping from configuration language specific concerns.
2. Deliver an example implementation in the kubeadm bootstrapper.
3. Approach other bootstrappers and provide help and guidance for separating provisioning
and re-using provisioning implementations.

## Communication

We will join the [regular ClusterAPI meetings](https://github.com/flatcar-hub/cluster-api?tab=readme-ov-file#-community-discussion-contribution-and-support)
and share updates on our work in the "Feature Groups" section, which is a regular part of
the ClusterAPI meetings)

Chat with stakeholders on Kubernetes [Slack](http://slack.k8s.io/) in the
[cluster-api](https://kubernetes.slack.com/archives/C8TSNPY4T) channel.

## Stakeholders

Primary Stakeholders are listed below:

- The Flatcar Container Linux project
- Johanan Liebermann (@johananl, Microsoft)
- Mathieu Tortuyaux (@tormath1, Microsoft)
- Thilo Fromm (@t-lo, Microsoft)
- Michael McCune (@elmiko, Red Hat)
- Evan Johnson, (@eljohnson92, Akamai)

0 comments on commit 857dd3d

Please sign in to comment.