Skip to content

Commit 0832d8c

Browse files
apeirora-service-user[bot]mlenkeit
andcommitted
Release 2.0.13
Co-authored-by: Maximilian Lenkeit <maximilian.lenkeit@sap.com>
1 parent edf390a commit 0832d8c

20 files changed

+91
-87
lines changed

.vitepress/config.mts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,11 @@ export default withMermaid(defineConfig({
2020
description: "Apeiro Reference Architecture - Documentation",
2121
base: BASE,
2222
srcDir: '.',
23-
srcExclude: ['./node_modules/**/*'],
23+
srcExclude: [
24+
'./node_modules/**/*',
25+
'README.md',
26+
'RELEASE.md'
27+
],
2428
// assetsDir: './static',
2529
cleanUrls: true,
2630
appearance: false, // disable dark mode
@@ -133,5 +137,5 @@ export default withMermaid(defineConfig({
133137
}
134138
]
135139
},
136-
ignoreDeadLinks: true // TODO: set to false
140+
ignoreDeadLinks: false
137141
}))

blog/2025-03-05-lcm-configuration-installation-reconsidered.md

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ authors:
55
- uwe-krueger
66
---
77

8-
<!-- index.mdx -->
8+
<!-- index.md -->
99
Software configuration and procedures, practices, and tools for (first time) installation, patching, or updating are at the heart of software lifecycle management.
1010

1111
Generally, lifecycle management
@@ -28,7 +28,7 @@ While complex initial installations may be covered by the approach, we conclude
2828

2929
<!-- truncate -->
3030

31-
<!-- challenge.mdx -->
31+
<!-- challenge.md -->
3232
## The Challenge, Day 0, 1, and 2
3333

3434
Lifecycle management involves distinct phases - Day 0, Day 1, and Day 2. Each presenting unique challenges:
@@ -48,7 +48,7 @@ The term *installation* will be used in the following as a synonym for both *set
4848

4949
[^1]: Popular data migration tools for example are [Wikipedia: Flyway](https://en.wikipedia.org/wiki/Flyway_(software)), [Wikipedia: Liquibase](https://en.wikipedia.org/wiki/Liquibase), and programming languages offer libraries, such as [github: go-migrate](https://github.com/golang-migrate/migrate).
5050

51-
<!-- layout.mdx -->
51+
<!-- layout.md -->
5252
## General Installation Layout
5353

5454
In consequence, all approaches follow the same general layout:
@@ -68,7 +68,7 @@ Let us next consider the configuration description.
6868

6969

7070

71-
<!-- configurations.mdx -->
71+
<!-- configurations.md -->
7272
## Configurations Reconsidered
7373

7474
In the simplest case, configuration is described by some general, possibly structured, data definition format, like [YAML](https://yaml.org), [JSON](https://www.json.org), [XML](https://www.w3.org/TR/xml) or [INI](https://docs.fileformat.com/system/ini). The installation code looks for dedicated fields in the configuration to assign a particular meaning. This could be single parameters or complete structures.
@@ -86,7 +86,7 @@ Values of particular attributes should either follow some rules (or constraints)
8686

8787
Let us therefore consider templating engines next.
8888

89-
<!-- templating.mdx -->
89+
<!-- templating.md -->
9090
## Templating Engines
9191

9292

@@ -142,7 +142,7 @@ An often-cited example for integrated configuration DSL allowing for feedback fr
142142

143143
With this last scenario we leave the pure configuration description. Let us consider and take a closer look at the installation procedure itself next.
144144

145-
<!-- installations.mdx -->
145+
<!-- installations.md -->
146146
## Installations Reconsidered
147147

148148
The installer coding is responsible to map a configuration (utilizing a DSL) to an appropriate set of elements in the target environment and execute the concrete installation.
@@ -234,7 +234,7 @@ All approaches to circumvent those problems are typically
234234

235235
In summary, while Day 1 installation can be handled with multi-purpose, generic frameworks, Day 2 updates with structural changes, even requiring migrations, can't be handled by typical generic frameworks. All approaches to fix updates within generic frameworks become very complicated, confusing and error-prone.
236236

237-
<!-- target.mdx -->
237+
<!-- target.md -->
238238
## Target Environment Reconsidered
239239

240240
A new quality can be achieved with the configuration (the DSL-based composition) not treated as static input to the complete installation procedure. A first step towards this direction is to refer to information from the target environment by using special (static) expressions in the configuration description. The next iteration is to incorporate feedback loops that are generalized for all element configuration descriptions.
@@ -252,7 +252,7 @@ This feature is tightly coupled with the decomposition of the overall installer
252252
increase the expressive power of the overall system as well as the abstraction available for the installer implementation. It can asynchronously decompose into other configuration elements and
253253
combine this with its own synchronization and ordering logic.
254254

255-
<!-- gitops.mdx -->
255+
<!-- gitops.md -->
256256
## GitOps Operational Model
257257

258258
A popular practice to handle installations is [*GitOps*](https://opengitops.dev/) with *Kubernetes* as runtime. Whereas, *GitOps* is not necessarily part of the technical installation procedure itself but only augments it with a [DevOps](https://en.wikipedia.org/wiki/DevOps) operational model. Its task is to handle the synchronization process of bringing together static configurations stored in (versioned) repositories (of course Git, but also OCI) with the execution of the installation.
@@ -294,7 +294,7 @@ GitOps Principles v1.0.0 [^5]
294294
[^5]: GitOps principles according to [opengitops.dev/#principles](https://opengitops.dev/#principles)
295295

296296

297-
<!-- conclusion.mdx -->
297+
<!-- conclusion.md -->
298298
## Conclusion
299299

300300
First of all, we see that DSLs are present everywhere, where configuration is interpreted. Even with simple data formats it is possible to express rules, commonalities and derived values. The expressive power comes from the evaluation logic as part of the installation code. Explicit specialized DSL can be seen as syntactical sugar to improve the readability.

blog/2025-03-25-kcp-multi-tenant-control-planes.md

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -81,16 +81,16 @@ The paradigm shift is clear: **move from managing fleets of clusters to managing
8181

8282
[^5]: [Horizontally Scalable Control Plane for Kubernetes APIs - kcp.io](https://kcp.io/#:~:text=Building%20Block%2C%20Not%20Walled%20Garden)
8383

84-
[^6]: [Multi-Plane Controller](https://documentation.apeirora.eu/control-planes/crt) and [Baremetal Operating System (BOS)](https://apeirora.eu/content/about/#:~:text=infrastructure%20to%20independently%20operate%20compute%2C,for%20non) in ApeiroRA
84+
[^6]: [Multi-Plane Controller](./../docs/best-practices/control-planes/crt.md) and [Baremetal Operating System (BOS)](https://apeirora.eu/content/about/#:~:text=infrastructure%20to%20independently%20operate%20compute%2C,for%20non) in ApeiroRA
8585

86-
[^7]: [How to apply Apeiro-Reference-Architecture?](https://apeirora.eu/content/about/#:~:text=The%20%E2%80%9Creference%E2%80%9D%20in%20ApeiroRA%20and,are%20truly%20general) and [Documentation](https://documentation.apeirora.eu/) of ApeiroRA
86+
[^7]: [How to apply Apeiro-Reference-Architecture?](https://apeirora.eu/content/about/#:~:text=The%20%E2%80%9Creference%E2%80%9D%20in%20ApeiroRA%20and,are%20truly%20general) and [Documentation](/) of ApeiroRA
8787

88-
[^8]: [How to apply Apeiro-Reference-Architecture?](https://apeirora.eu/content/about/#:~:text=compatible%20underlays%20at%20every%20participating,of%20uniformity%20required%20for%20the) and [Kubernetes Implementation Design](https://documentation.apeirora.eu/control-planes/kid) in ApeiroRA
88+
[^8]: [How to apply Apeiro-Reference-Architecture?](https://apeirora.eu/content/about/#:~:text=compatible%20underlays%20at%20every%20participating,of%20uniformity%20required%20for%20the) and [Kubernetes Implementation Design](./../docs/best-practices//control-planes/kid.md) in ApeiroRA
8989

9090
[^9]: [Building Europe's Platform Mesh: Cloud-Native APIs for Multi-Provider Integration and Digital Sovereignty](https://fosdem.org/2025/schedule/event/fosdem-2025-5746-building-europe-s-platform-mesh-cloud-native-apis-for-multi-provider-integration-and-digital-sovereignty/) at FOSDEM 2025
9191

9292
[^10]: [How Standards Proliferate](https://xkcd.com/927/) (xkcd comic)
9393

94-
[^11]: [Digital Twins | Apeiro Reference Architecture - Documentation](https://documentation.apeirora.eu/digital-twins)
94+
[^11]: [Digital Twins | Apeiro Reference Architecture - Documentation](./../docs/best-practices/digital-twins/index.md)
9595

96-
[^12]: [ApeiroRA Platform Mesh | Apeiro Reference Architecture - Documentation](https://documentation.apeirora.eu/platform-mesh)
96+
[^12]: [ApeiroRA Platform Mesh | Apeiro Reference Architecture - Documentation](./../docs/best-practices//platform-mesh/index.md)

docs/architecture/index.md

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,11 @@ Apeiro conceptually pursues a _declarative approach_ across its components, just
1919

2020
## Layers Top to Bottom
2121

22-
- **[Platform Mesh](./../best-practices/platform-mesh/index.mdx)** is a core component of Apeiro that allows service providers to offer services of any kind and service consumers to discover those services, order capabilities, and control their lifecycle.
22+
- **[Platform Mesh](./../best-practices/platform-mesh/index.md)** is a core component of Apeiro that allows service providers to offer services of any kind and service consumers to discover those services, order capabilities, and control their lifecycle.
2323

2424
Other layers of Apeiro usually act as both service provider and service consumers: they provide their functionality as capability and consume capabilities of other layers through the Platform Mesh. The Platform Mesh also acts as a single point of contact for integrating non-Apeiro services (not depicted) and making them available via the same cloud-native mechanisms.
2525

26-
- **[Data Fabric](./../best-practices/data-fabric/index.mdx)** provides standards and tooling for decentralized self-describing of application resources leading to a mesh architecture.
26+
- **[Data Fabric](./../best-practices/data-fabric/index.md)** provides standards and tooling for decentralized self-describing of application resources leading to a mesh architecture.
2727

2828
- **Konfidence** is the software development and release framework of Apeiro for microservice-based SaaS applications. It comes with support for ring deployments, feature toggle management and a delivery process, all based on best practices from the CNCF landscape[^cncf-landscape].
2929

@@ -46,13 +46,13 @@ Apeiro conceptually pursues a _declarative approach_ across its components, just
4646

4747
## Cross Cutting Concerns
4848

49-
- **[Lifecycle Tooling](./../best-practices/lcm/index.mdx)** based on cloud native principles is considered essential by Apeiro in order to managing software lifecycle at scale.
49+
- **[Lifecycle Tooling](./../best-practices/lcm/index.md)** based on cloud native principles is considered essential by Apeiro in order to managing software lifecycle at scale.
5050

51-
- **[Security & Compliance](./../best-practices/security/index.mdx)** are built into Apeiro across the different layers.
51+
- **[Security & Compliance](./../best-practices/security/index.md)** are built into Apeiro across the different layers.
5252

5353
- **Zero-Trust** is a security paradigm in Apeiro to improve the overall security posture.
5454

55-
- **[Observability](./../best-practices/observability/index.mdx)** is available in Apeiro through its layers.
55+
- **[Observability](./../best-practices/observability/index.md)** is available in Apeiro through its layers.
5656

5757
[^cncf-landscape]: CNCF Cloud Native Landscape, see https://landscape.cncf.io
58-
[^kubeception]: see [Hosted Control Planes](./../best-practices/multi-cluster-federation/hosted-control-planes.mdx)
58+
[^kubeception]: see [Hosted Control Planes](./../best-practices/multi-cluster-federation/hosted-control-planes.md)

docs/best-practices/control-planes/crt.md

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,17 +3,17 @@ sidebar_position: 3
33
title: Multi-Plane Controller
44
---
55

6-
In the [Controller Pattern section](./../digital-twins/controller.mdx), we discussed the general responsibilities of a <Term>controller</Term> and in the [Kubernetes Implementation Design section](./kid.mdx), we seem to
6+
In the [Controller Pattern section](./../digital-twins/controller.md), we discussed the general responsibilities of a <Term>controller</Term> and in the [Kubernetes Implementation Design section](./kid.md), we seem to
77
assume that the context for a controller always has to be a single Kubernetes cluster (assembled with the three planes).
88
However, a reconciling controller can be executed anywhere suitable and be implemented to be multi-plane aware - or more precisely multi-control-plane aware.
99
This becomes self-explanatory during the development of a controller. Typically, development occurs on a laptop, where the controller is run outside the cluster
1010
(the laptop serving as work plane) and debugged against different clusters (for example, connected to a local cluster on the laptop first, then a cluster in the cloud).
1111

1212
By designing a multi-plane aware controller, we achieve two primary objectives:
1313
1. establish the necessary isolation boundaries required by cloud services
14-
2. enable the design for [Multi-Cluster Federation](./../multi-cluster-federation/index.mdx)
14+
2. enable the design for [Multi-Cluster Federation](./../multi-cluster-federation/index.md)
1515

16-
For clarity throughout this document, the term "<Term>control plane</Term>" refers to any platform[^4] capable of serving [Kubernetes Resource Model](./../digital-twins/krm/index.mdx) (KRM) APIs.
16+
For clarity throughout this document, the term "<Term>control plane</Term>" refers to any platform[^4] capable of serving [Kubernetes Resource Model](./../digital-twins/krm/index.md) (KRM) APIs.
1717

1818
## Multi-Plane Architecture Components
1919

@@ -27,7 +27,7 @@ For clarity throughout this document, the term "<Term>control plane</Term>" refe
2727
Business users interact and declare their intent with a dedicated API hosted on a separate <Term>data plane</Term>. This plane serves as the source of truth (for the external business contract), hosting the digital twins and their respective desired states. This layer is _intentionally separated_ from the data and control plane of the Runtime Cluster. This design enforces a critical isolation boundary by decoupling the user-facing API from internal implementation concerns. Note that this layer may be composed of multiple <Term>data planes</Term>.
2828

2929
3. **Multiple Targets**:
30-
The multi-plane controller model encourages the use of separate Kubernetes clusters (or control planes) as scale-out targets for workloads. It accomplishes this by utilizing available resource primitives (see [Multi-Cluster Federation](./../multi-cluster-federation/index.mdx) for a detailed discussion) or by orchestrating the desired outcome on any API-enabled platform[^1]. This practice isolates the controller's runtime concerns from the workload's concerns, thereby enhancing the overall security posture. In the case of simpler [clusterlet](./../multi-cluster-federation#federation-with-agents-decentralizing-control) or [servicelet](./../multi-cluster-federation/multi-cloud-service-provider.mdx) controllers, the Runtime Cluster may pragmatically be used as the work plane.
30+
The multi-plane controller model encourages the use of separate Kubernetes clusters (or control planes) as scale-out targets for workloads. It accomplishes this by utilizing available resource primitives (see [Multi-Cluster Federation](./../multi-cluster-federation/index.md) for a detailed discussion) or by orchestrating the desired outcome on any API-enabled platform[^1]. This practice isolates the controller's runtime concerns from the workload's concerns, thereby enhancing the overall security posture. In the case of simpler [clusterlet](./../multi-cluster-federation/index.md#federation-with-agents-decentralizing-control) or [servicelet](./../multi-cluster-federation/multi-cloud-service-provider.md) controllers, the Runtime Cluster may pragmatically be used as the work plane.
3131

3232
<ApeiroFigure src="/control-planes/img/crt2.svg"
3333
alt="Multi-plane aware controller"
@@ -92,8 +92,8 @@ These Fan-In and Fan-Out patterns can be implemented within a single controller.
9292
- **Scalability**: Leverage `multicluster-runtime` for dynamic cluster/multi-plane handling. It allows more efficient scaling and management of multiple clusters by reusing internal components like clients, queues and caches.
9393
- **Isolation**: Maintain clear separation between data plane (source for contract), Runtime Cluster (for the multi-plane aware controller), and target clusters (for the workloads), to ensure security and operational integrity. Only open or cross these boundaries when needed.
9494
- **Dynamic Discovery**: Use `MultiCluster`[`Manager`](https://github.com/kubernetes-sigs/multicluster-runtime/blob/main/pkg/manager/manager.go) to dynamically discover and manage clusters/control planes. Allow controllers to dynamically adapt to changing environments without manual intervention.
95-
- **Consistency**: Use level-based reconciliation for accurate state management. Make sure that you always set appropriate conditions and states to manage state transitions. Use consistent states across resources. Consistency is established by adhering to the two important basics: 1) well designed [KRM Extension APIs](./../digital-twins/krm/index.mdx) and 2) properly coded [reconciliation loops](./../digital-twins/controller.mdx#edge-and-level-triggering)
96-
- **Error Handling**: Implement exponential backoff and retries for robust multi-plane interactions. When implementing any retriable error handling, always consider possible hot spots - same resources being retried without random delays and the ensuing [Thundering herd problem](https://en.wikipedia.org/wiki/Thundering_herd_problem). See further information in the [Controller Pattern](./../digital-twins/controller.mdx#proportional-integral-derivative) chapter.
95+
- **Consistency**: Use level-based reconciliation for accurate state management. Make sure that you always set appropriate conditions and states to manage state transitions. Use consistent states across resources. Consistency is established by adhering to the two important basics: 1) well designed [KRM Extension APIs](./../digital-twins/krm/index.md) and 2) properly coded [reconciliation loops](./../digital-twins/controller.md#edge-and-level-triggering)
96+
- **Error Handling**: Implement exponential backoff and retries for robust multi-plane interactions. When implementing any retriable error handling, always consider possible hot spots - same resources being retried without random delays and the ensuing [Thundering herd problem](https://en.wikipedia.org/wiki/Thundering_herd_problem). See further information in the [Controller Pattern](./../digital-twins/controller.md#proportional-integral-derivative) chapter.
9797

9898
By using [multicluster-runtime](https://github.com/kubernetes-sigs/multicluster-runtime) with providers like [kcp](https://kcp.io) and [Gardener](https://gardener.cloud) for **Fan-In** and [`Cluster`](https://pkg.go.dev/sigs.k8s.io/controller-runtime/pkg/cluster) for **Fan-Out**, both integrated with `MultiCluster`[`Manager`](https://github.com/kubernetes-sigs/multicluster-runtime/blob/main/pkg/manager/manager.go), developers can build scalable multi-plane aware controllers within the controller-runtime framework.
9999

docs/best-practices/control-planes/kid.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ sidebar_position: 1
33
title: Kubernetes Implementation Design
44
---
55

6-
Kubernetes is said to be composed of microservices which form the [aforementioned three planes](./index.mdx).
6+
Kubernetes is said to be composed of microservices which form the [aforementioned three planes](./index.md).
77
But an important distinction needs to be made: microservices manage and encapsulate their state with their own API protocol, whereas Kubernetes fully defines a common API framework and manages the state for all its components in the <Term>data plane</Term>.
88

99
There is ample external [documentation](https://kubernetes.io/docs/concepts/architecture/) available, which describes the architecture and detailed implementation of Kubernetes (primarily as container orchestrator).
@@ -34,7 +34,7 @@ width="100%"/>
3434
### Components of the Control Plane
3535

3636
If we conceptually attribute the API server to the <Term>data plane</Term>, then the <Term>control plane</Term> contains
37-
a) all needed **[API Extensions](./../digital-twins/extensibility.mdx)**.
37+
a) all needed **[API Extensions](./../digital-twins/extensibility.md)**.
3838
The Kubernetes core design pattern includes b) [**scheduler**](https://kubernetes.io/docs/concepts/architecture/#kube-scheduler), and
3939
c) [**controller manager**](https://kubernetes.io/docs/concepts/architecture/#kube-controller-manager) which bundles various Kubernetes internal controllers.
4040
Furthermore, a typical cluster minimally requires d) [**cloud controller manager**](https://kubernetes.io/docs/concepts/architecture/cloud-controller/) which bundles controllers necessary for dealing with resources from external cloud providers.

0 commit comments

Comments
 (0)