Skip to content

Commit 56b1fac

Browse files
t-lojohananlschrejmauromorales
committed
docs: add proposal for Node Bootstrapping working group
Co-authored-by: Johanan Liebermann <j@liebermann.io> Co-authored-by: Jakob Schrettenbrunner <dev@schrej.net> Co-authored-by: Mauro Morales <contact@mauromorales.com> Signed-off-by: Thilo Fromm <thilofromm@microsoft.com>
1 parent 15ce36f commit 56b1fac

File tree

1 file changed

+131
-0
lines changed

1 file changed

+131
-0
lines changed
Lines changed: 131 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,131 @@
1+
---
2+
title: ClusterAPI Node Bootstrapping Working Group
3+
authors:
4+
- "@t-lo"
5+
reviewers:
6+
- "@elmiko"
7+
- "@eljohnson92"
8+
- "@johananl"
9+
- "@tormath1"
10+
- "@fabriziopandini"
11+
- "@sbueringer"
12+
- "@enxebre"
13+
14+
creation-date: 2024-11-12
15+
last-updated: 2024-11-15
16+
status: proposed
17+
see-also:
18+
- https://github.com/kubernetes-sigs/cluster-api/issues/5294
19+
- https://docs.google.com/document/d/1Fz5vWwhWA-d25_QDqep0LWF6ae0DnTqd5-8k8N0vDDM/edit
20+
- https://github.com/kubernetes-sigs/cluster-api/issues/9157
21+
- https://youtu.be/0AhA4Box3MM?si=IfKJfMWmlA9EW7ri&t=172
22+
- https://docs.google.com/document/d/12v6NFr7xal9RH3GEB_1IR6HENq2GMuzALS3l5elvrMg/edit
23+
---
24+
25+
# Node Bootstrapping Working Group ("CAPI-NoBo")
26+
27+
This document briefly outlines the scope, communication media, and
28+
stakeholders for a Working Group dedicated to the Provisioning aspect of
29+
Node Bootstrapping.
30+
31+
Provisioning, in this context, refers to configuring and customizing the
32+
node's operating system to prepare it to serve as a ClusterAPI cluster node.
33+
34+
35+
## User Story and Problem Statement
36+
37+
As a Linux Distribution maintainer aiming to support ClusterAPI, or to improve
38+
my existing support of ClusterAPI in my distribution, I would like to be able to
39+
cleanly integrate my contributions into the node bootstrapping process without
40+
interfering with other implementations.
41+
I would like my contributions to be as re-usable as possible across different
42+
bootstrap providers.
43+
I would like to read and to follow documentation, guidelines, and specifications
44+
on the above.
45+
I would like to offer a choice of node bootstrapping configuration systems to users,
46+
enable distribution vendors to extend the choices available by adding new
47+
configuration systems, and ease maintenance and enable extension of currently
48+
supported systems for the ClusterAPI developer community.
49+
I would like to enable the bootstrap API consumer to express intent to aid node
50+
bootstrapping through provisioning-time customizations like setting up disks and
51+
file systems decoupled from specific OS provisioning configuration implementations.
52+
53+
54+
**Problem statement / Example issues**
55+
56+
As there is currently no OS provisioning configuration abstraction, the kubeadm bootstrap provider
57+
is tightly coupled with cloud-init and Ignition. Furthermore, the Ignition implementation is built
58+
on top of the cloud-init one. This makes it hard to develop provisioning implementations
59+
independently and makes it hard to reuse code effectively between bootstrap implementations: Other
60+
bootstrap providers such as MicroK8s must implement their own OS provisioning, and MicroK8s
61+
currently only supports cloud-init.
62+
63+
In addition, the current design mixes bootstrap-related provisioning code (such as the commands
64+
necessary for executing the kubeadm binary on a host) with generic OS customizations (such as disk
65+
partitioning or Linux user configuration).
66+
67+
Outside of ClusterAPI, both [cloud-init](https://github.com/canonical/cloud-init)
68+
and [ignition](https://github.com/coreos/ignition) provisioning are widely adopted
69+
across distributions.
70+
While cloud-init is used by general-purpose Linux distributions like Ubuntu/Debian,
71+
SUSE Linux, Alma, Rocky, Fedora, and Red Hat Enterprise Linux, ignition is popular
72+
with special-purpose distributions like Fedora CoreOS / Red Hat CoreOS, SuSE MicroOS
73+
/ SLE Micro / Kalpa, and Flatcar Container Linux.
74+
It is likely that more provisioning systems exist; a clean separation between bootstrap and provisioning
75+
and guidelines on how each is developed will make it easier to add support to ClusterAPI as well as to
76+
share implementations across bootstrap providers.
77+
78+
We recognize that a node's OS provisioning configuration can be overridden and fully customized via custom
79+
userdata.
80+
We consider this feature out of scope of this working group as the user data would need to be kept in sync with
81+
ClusterAPI internals to meet ClusterAPI's provisioning needs and to avoid conflicts.
82+
This would inflict a heavy maintenance toll on users.
83+
84+
**Compatibility and API guarantees**
85+
86+
ClusterAPI has been stable for multiple years and is in widespread production use.
87+
Proposals and implementations of this working group must ensure to not exert operational
88+
risk on existing integrations.
89+
Any changes in the kubeadm bootstrap provider in particular must uphold guarantees and
90+
expectations set by the current implementation and must continue to support current use
91+
cases OR must provide means for current use cases to continue functioning for an appropriate
92+
migration period, as well as define a clear path for migration.
93+
94+
## Scope
95+
96+
1. Propose architectural improvements that abstract OS provisioning configuration with the goal of
97+
reducing duplicate functionality in current implementations, easing development of new OS provisioning
98+
features, and simplifying integration of new configuration systems for OS provisioning.
99+
2. Deliver an example implementation which works with the kubeadm bootstrap provider.
100+
3. Approach other bootstrap providers and provide help and guidance for separating provisioning
101+
and re-using provisioning implementations.
102+
103+
## Communication
104+
105+
* Meeting schedule: Fortnightly; every first and third Thursday of the month at 17:00 UTC
106+
(WG [calendar](https://calendar.google.com/calendar/u/0?cid=OTBkMjJjZGU0OTcyZjI0OGQ2NTE2YTk2ZGUwNWVmNjI1NTM2NDRmZmYyNjFlMjE1MGY1ZjIyOTU0NmQ1OWQ0MUBncm91cC5jYWxlbmRhci5nb29nbGUuY29t),
107+
[iCal](https://calendar.google.com/calendar/ical/90d22cde4972f248d6516a96de05ef62553644fff261e2150f5f229546d59d41@group.calendar.google.com/public/basic.ics) )
108+
* Meeting agenda / minutes: https://docs.google.com/document/d/12v6NFr7xal9RH3GEB_1IR6HENq2GMuzALS3l5elvrMg/edit
109+
110+
We will join the [regular ClusterAPI meetings](https://github.com/flatcar-hub/cluster-api?tab=readme-ov-file#-community-discussion-contribution-and-support)
111+
and share summary updates on our work and our progress in the "Feature Groups" section, which is a regular part of
112+
the ClusterAPI meetings.
113+
114+
Chat with stakeholders on Kubernetes [Slack](http://slack.k8s.io/) in the
115+
[cluster-api](https://kubernetes.slack.com/archives/C8TSNPY4T) channel.
116+
117+
## Stakeholders
118+
119+
Primary Stakeholders are listed below:
120+
121+
- The Flatcar Container Linux project
122+
- Johanan Liebermann (@johananl, Microsoft)
123+
- Mathieu Tortuyaux (@tormath1, Microsoft)
124+
- Thilo Fromm (@t-lo, Microsoft)
125+
- Fabrizio Pandini (@fabriziopandini, VMWare)
126+
- Michael McCune (@elmiko, Red Hat)
127+
- Jakob Schrettenbrunner (@schrej, Deutsche Telekom AG)
128+
- Mohamed Chiheb Ben Jemaa (@mcbenjemaa, IONOS Cloud)
129+
- Kashif Khan (@kashifest)
130+
- Evan Johnson (@eljohnson92, Akamai)
131+
- Mauro Morales (@mauromorales, KairOS)

0 commit comments

Comments
 (0)