docs: add ADR for autonomous platform clusters - #93
Conversation
Signed-off-by: Moritz Marby <moritz.marby@sap.com>
Signed-off-by: Moritz Marby <moritz.marby@sap.com>
Signed-off-by: Moritz Marby <moritz.marby@sap.com>
e541aba to
d6ddebf
Compare
Signed-off-by: Valentin Gerlach <valentin.gerlach@sap.com>
Signed-off-by: Valentin Gerlach <valentin.gerlach@sap.com>
Signed-off-by: Valentin Gerlach <valentin.gerlach@sap.com>
Signed-off-by: Valentin Gerlach <valentin.gerlach@sap.com>
|
That sounds like a big win! Reducing the upfront requirements is an important step. For my understanding, the requirements for an initial Platform cluster are:
Is that correct? |
Update the autonomous clusters ADR to use ocmRepoName instead of ocmComponentName, introduce an explicit OCM Repository resource, and switch component definitions from externalRef to template. Clarify how distributions instantiate per-component RGDs rather than repeating install logic. Also fix typos and normalize dashes. Signed-off-by: Moritz Marby <moritz.marby@sap.com>
Yes, thats exactly how this is intended. cluster-provider is installed through self inflating setup. So just As we need kro + ocm for the self inflating setup, it would be a chicken egg problem. I think the first iteration needs to just have this as a manual installation, but we could iterate on it and improve in future. |
Signed-off-by: Moritz Marby <moritz.marby@sap.com>
maximiliantech
left a comment
There was a problem hiding this comment.
I really like this ADR! The structure and the overall explanation are strong 💪
I have some comments on topics that should get addressed before merging. Could you have a look please @n3rdc4ptn? ⬇️
|
|
||
| ## Current state | ||
|
|
||
| The current setup uses the `openmcp-bootstrapper` CLI to bootstrap a production installation. Before running it, an operator must manually provision a target Kubernetes cluster, set up a non-empty Git repository, and ensure access to the OCI registry. The bootstrapper then pulls component versions and manifest templates from the OCI registry, generates and writes rendered manifests into the Git repository, and deploys FluxCD to the cluster pointing at that repository. From that point on, FluxCD continuously reconciles the cluster state with what is in Git. |
There was a problem hiding this comment.
| The current setup uses the `openmcp-bootstrapper` CLI to bootstrap a production installation. Before running it, an operator must manually provision a target Kubernetes cluster, set up a non-empty Git repository, and ensure access to the OCI registry. The bootstrapper then pulls component versions and manifest templates from the OCI registry, generates and writes rendered manifests into the Git repository, and deploys FluxCD to the cluster pointing at that repository. From that point on, FluxCD continuously reconciles the cluster state with what is in Git. | |
| The current setup uses the `openmcp-bootstrapper` CLI to bootstrap a production installation. Before running it, a platform owner must manually provision a target Kubernetes cluster, set up a non-empty Git repository, and ensure access to the OCI registry. The bootstrapper then pulls component versions and manifest templates from the OCI registry, generates and writes rendered manifests into the Git repository, and deploys FluxCD to the cluster pointing at that repository. From that point on, FluxCD continuously reconciles the cluster state with what is in Git. |
|
|
||
| This means the Git repository is a required external dependency that must be maintained alongside the cluster. The manifests written into it are generated and templated (similar to Helm output), making them difficult to read, understand, or modify by hand. Any configuration change requires re-running the bootstrapper or editing large generated YAML files directly. | ||
|
|
||
| Verifying the setup is also a manual process: an operator must check that FluxCD's `GitRepository` and `Kustomization` resources are in a Ready state, confirm that core components are running in the `openmcp-system` namespace, and create a test `ManagedControlPlaneV2` resource to validate end-to-end functionality. |
There was a problem hiding this comment.
| Verifying the setup is also a manual process: an operator must check that FluxCD's `GitRepository` and `Kustomization` resources are in a Ready state, confirm that core components are running in the `openmcp-system` namespace, and create a test `ManagedControlPlaneV2` resource to validate end-to-end functionality. | |
| Verifying the setup is also a manual process: an platform owner must check that FluxCD's `GitRepository` and `Kustomization` resources are in a Ready state, confirm that core components are running in the `openmcp-system` namespace, and create a test `ManagedControlPlaneV2` resource to validate end-to-end functionality. |
|
|
||
| This means the Git repository is a required external dependency that must be maintained alongside the cluster. The manifests written into it are generated and templated (similar to Helm output), making them difficult to read, understand, or modify by hand. Any configuration change requires re-running the bootstrapper or editing large generated YAML files directly. | ||
|
|
||
| Verifying the setup is also a manual process: an operator must check that FluxCD's `GitRepository` and `Kustomization` resources are in a Ready state, confirm that core components are running in the `openmcp-system` namespace, and create a test `ManagedControlPlaneV2` resource to validate end-to-end functionality. |
There was a problem hiding this comment.
| Verifying the setup is also a manual process: an operator must check that FluxCD's `GitRepository` and `Kustomization` resources are in a Ready state, confirm that core components are running in the `openmcp-system` namespace, and create a test `ManagedControlPlaneV2` resource to validate end-to-end functionality. | |
| Verifying the setup is also a manual process: an operator must check that FluxCD's `GitRepository` and `Kustomization` resources are in a Ready state, confirm that core components are running in the `openmcp-system` namespace, and create a test `ControlPlane` resource to validate end-to-end functionality. |
|
|
||
| Operating the platform across multiple landscapes has shown that the Git repository introduces meaningful overhead. Because manifests are generated from a single large configuration file, they are not easy to inspect or adjust by hand, and any change requires going back through the bootstrapper. This adds friction during initial setup, local development, and for smaller teams who want to operate a landscape without the need for complex configurations. | ||
|
|
||
| Lifecycle management is currently spread across three layers: the bootstrapper generates and writes manifests before FluxCD takes over, FluxCD manages the base operators and infrastructure, and the OpenMCP operators handle service providers, platform services, and cluster providers. This split has served its purpose but means there is no single place where the full operational state of a platform is described. |
There was a problem hiding this comment.
| Lifecycle management is currently spread across three layers: the bootstrapper generates and writes manifests before FluxCD takes over, FluxCD manages the base operators and infrastructure, and the OpenMCP operators handle service providers, platform services, and cluster providers. This split has served its purpose but means there is no single place where the full operational state of a platform is described. | |
| Lifecycle management is currently spread across three layers: the bootstrapper generates and writes manifests before FluxCD takes over, FluxCD manages the base operators and infrastructure, and the different OpenControlPlane operators handle service providers, platform services, and cluster providers. This split has served its purpose but means there is no single place where the full operational state of a platform is described. |
|
|
||
| Lifecycle management is currently spread across three layers: the bootstrapper generates and writes manifests before FluxCD takes over, FluxCD manages the base operators and infrastructure, and the OpenMCP operators handle service providers, platform services, and cluster providers. This split has served its purpose but means there is no single place where the full operational state of a platform is described. | ||
|
|
||
| A related pattern is that deployment configuration lives separately from the release artifacts themselves. Operators need to follow external guides to understand how to install or upgrade a given version, rather than the components carrying that information with them. |
There was a problem hiding this comment.
| A related pattern is that deployment configuration lives separately from the release artifacts themselves. Operators need to follow external guides to understand how to install or upgrade a given version, rather than the components carrying that information with them. | |
| A related pattern is that deployment configuration lives separately from the release artifacts themselves. Platform Owners need to follow external guides to understand how to install or upgrade a given version, rather than the components carrying that information with them. |
| - id: clusterprovider | ||
| template: | ||
| apiVersion: bootstrap.open-control-plane.io/v1alpha1 | ||
| kind: ClusterProviderKind | ||
| metadata: | ||
| name: default | ||
| spec: | ||
| ocmRepoName: ${schema.spec.ocmRepoName} |
There was a problem hiding this comment.
@n3rdc4ptn Can you please elaborate why we have a specific RGD called ClusterProviderKind? Why can't we bootstrapping kind: ClusterProvider directly?
There was a problem hiding this comment.
I get confused by "(Customer) Operator". Can you please use "Platform Owner" @n3rdc4ptn?
There was a problem hiding this comment.
@n3rdc4ptn Can you please remove landscape specific names from the diagram and instead use something like "us, eu, air-gapped". Please make it more open to understand by anyone in the open source ecosystem.
There was a problem hiding this comment.
In general I am bit confused by the lines you have drawed between the boxes. This is more a specific setup rather than a general diagram that shows what is possible, correct?
What this PR does / why we need it:
Adds an ADR proposing autonomous platform clusters as the target architecture for OpenControlPlane bootstrapping and lifecycle management.
Which issue(s) this PR fixes:
openmcp-project/backlog#555
Release note: