Skip to content

docs: add ADR for autonomous platform clusters - #93

Open
n3rdc4ptn wants to merge 9 commits into
mainfrom
adr-autonomous-clusters
Open

docs: add ADR for autonomous platform clusters#93
n3rdc4ptn wants to merge 9 commits into
mainfrom
adr-autonomous-clusters

Conversation

@n3rdc4ptn

@n3rdc4ptn n3rdc4ptn commented May 7, 2026

Copy link
Copy Markdown
Member

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:

Add ADR for autonomous platform clusters based on RGDs and OCM distributions

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>
@n3rdc4ptn
n3rdc4ptn force-pushed the adr-autonomous-clusters branch from e541aba to d6ddebf Compare June 15, 2026 13:43
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>
@MichaelSp

Copy link
Copy Markdown
Contributor

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:

  • Gardener Cluster with
    • 'kro' installed
    • 'ocm' installed
  • Access to a cluster provider (gardener seed | kind)

Is that correct?
Any chance to also include kro+ocm into the self-inflating setup?

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

n3rdc4ptn commented Jul 16, 2026

Copy link
Copy Markdown
Member Author

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:

  • Gardener Cluster with

    • 'kro' installed
    • 'ocm' installed
  • Access to a cluster provider (gardener seed | kind)

Is that correct? Any chance to also include kro+ocm into the self-inflating setup?

Yes, thats exactly how this is intended.

cluster-provider is installed through self inflating setup. So just ocm and kro are needed. (Maybe flux.)

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>
@n3rdc4ptn
n3rdc4ptn marked this pull request as ready for review July 28, 2026 12:19

@maximiliantech maximiliantech left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
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.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
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.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
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.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
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.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
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.

Comment on lines +454 to +461
- id: clusterprovider
template:
apiVersion: bootstrap.open-control-plane.io/v1alpha1
kind: ClusterProviderKind
metadata:
name: default
spec:
ocmRepoName: ${schema.spec.ocmRepoName}

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@n3rdc4ptn Can you please elaborate why we have a specific RGD called ClusterProviderKind? Why can't we bootstrapping kind: ClusterProvider directly?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I get confused by "(Customer) Operator". Can you please use "Platform Owner" @n3rdc4ptn?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Write ADR for Autonomous Platform Clusters

4 participants