|
| 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