Skip to content

Commit fe40c8e

Browse files
perdasilvaPer Goncalves da Silva
andauthored
📖 a few documentation touch-ups (#1351)
Signed-off-by: Per Goncalves da Silva <[email protected]> Co-authored-by: Per Goncalves da Silva <[email protected]>
1 parent 008ca33 commit fe40c8e

File tree

4 files changed

+71
-73
lines changed

4 files changed

+71
-73
lines changed

docs/index.md

Lines changed: 23 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -3,43 +3,37 @@ hide:
33
- toc
44
---
55

6-
# Overview
6+
# Operator Lifecycle Manager
77

8-
Operator Lifecycle Manager (OLM) is an open-source [CNCF](https://www.cncf.io/) project with the mission to manage the
9-
lifecycle of cluster extensions centrally and declaratively on Kubernetes clusters. Its purpose is to make installing,
10-
running, and updating functional extensions to the cluster easy, safe, and reproducible for cluster administrators and PaaS administrators.
8+
The Operator Lifecycle Manager (OLM) is an open-source project under the [Cloud Native Computing Foundation (CNCF)](https://www.cncf.io/), designed to simplify and centralize the management of Kubernetes cluster extensions. OLM streamlines the process of installing, running, and updating these extensions, making it easier, safer, and more reproducible for cluster and platform administrators alike.
119

12-
Previously, OLM was focused on a particular type of cluster extension: [Operators](https://operatorhub.io/what-is-an-operator#:~:text=is%20an%20Operator-,What%20is%20an%20Operator%20after%20all%3F,or%20automation%20software%20like%20Ansible.).
13-
Operators are a method of packaging, deploying, and managing a Kubernetes application. An Operator is composed of one or more controllers paired with one or both of the following objects:
10+
Originally, OLM was focused on managing a specific type of extension known as [Operators](https://operatorhub.io/what-is-an-operator#:~:text=is%20an%20Operator-,What%20is%20an%20Operator%20after%20all%3F,or%20automation%20software%20like%20Ansible.), which are powerful tools that automate the management of complex Kubernetes applications. At its core, an Operator is made up of controllers that automate the lifecycle of applications, paired with:
1411

15-
* One or more API extensions
16-
* One or more [CustomResourceDefinitions](https://kubernetes.io/docs/concepts/extend-kubernetes/api-extension/custom-resources/) (CRDs).
12+
- One or more Kubernetes API extensions.
13+
- One or more [CustomResourceDefinitions (CRDs)](https://kubernetes.io/docs/concepts/extend-kubernetes/api-extension/custom-resources/), allowing administrators to define custom resources.
1714

18-
OLM helped define lifecycles for these extensions: from packaging and distribution to installation, configuration, upgrade, and removal.
15+
The purpose of OLM is to manage the lifecycle of these extensionsfrom their packaging and distribution to installation, updates, and eventual removal—helping administrators ensure stability and security across their clusters.
1916

20-
The first iteration of OLM, termed OLM v0, included several concepts and features targeting the stability, security, and supportability of the life-cycled applications, for instance:
17+
In its first release (OLM v0), the project introduced several important concepts and features aimed at improving the lifecycle management of Kubernetes applications:
2118

22-
* A dependency model that enabled cluster extensions to focus on their primary purpose by delegating out of scope behavior to dependencies
23-
* A constraint model that allowed cluster extension developers to define support limitations such as conflicting extensions, and minimum kubernetes versions
24-
* A namespace-based multi-tenancy model in lieu of namespace-scoped CRDs
25-
* A packaging model in which catalogs of extensions, usually containing the entire version history of each extension, are made available to clusters for cluster users to browse and select from
19+
- **Dependency Model**: Enables extensions to focus on their primary function by delegating non-essential tasks to other dependencies.
20+
- **Constraint Model**: Allows developers to define compatibility constraints such as conflicting extensions or minimum required Kubernetes versions.
21+
- **Namespace-Based Multi-Tenancy**: Provides a multi-tenancy model to manage multiple extensions without the need for namespace-scoped CRDs.
22+
- **Packaging Model**: Distributes extensions through catalogs, allowing users to browse and install extensions, often with access to the full version history.
2623

27-
Since its initial release, OLM has helped catalyse the growth of Operators throughout the Kubernetes ecosystem. [OperatorHub.io](https://operatorhub.io/)
28-
is a popular destination for discovering Operators, and boasts over 300 packages from many different vendors.
24+
Thanks to these innovations, OLM has played a significant role in popularizing Operators throughout the Kubernetes ecosystem. A prime example of its impact is [OperatorHub.io](https://operatorhub.io/), a widely-used platform with over 300 Operators from various vendors, providing users with a central location to discover and install Operators.
2925

30-
## Why are we building OLM v1?
26+
## Why Build OLM v1?
3127

32-
The Operator Lifecycle Manager (OLM) has been in production for over five years, serving as a critical component in managing Kubernetes Operators.
33-
Over this time, the community has gathered valuable insights from real-world usage, identifying both the strengths and limitations of the initial design,
34-
and validating the design's initial assumptions. This process led to a complete redesign and rewrite of OLM that, compared to its predecessor, aims to
35-
provide:
28+
After five years of real-world use, OLM has become an essential part of managing Kubernetes Operators. However, over time, the community has gathered valuable insights, uncovering both the strengths and limitations of OLM v0. These findings have led to a comprehensive redesign and the creation of OLM v1, with several key improvements over the initial version:
3629

37-
* A simpler API surface and mental model
38-
* Less opinionated automation and greater flexibility
39-
* Support for Kubernetes applications beyond only Operators
40-
* Security by default
41-
* Helm Chart support
42-
* GitOps support
30+
- **Simpler API and Mental Model**: Streamlined APIs and a more intuitive design, making it easier to understand and work with.
31+
- **Greater Flexibility**: Less rigid automation, allowing for more customization and broader use cases.
32+
- **Beyond Operators**: Support for a wider range of Kubernetes applications, not limited to Operators.
33+
- **Security by Default**: Enhanced security features out-of-the-box, reducing vulnerabilities.
34+
- **Helm Chart and GitOps Support**: Expanded support for popular Kubernetes tools like Helm and GitOps, broadening the range of integration options.
4335

44-
To learn more about where v1 one came from, and where it's going, please see [Multi-Tenancy Challenges, Lessons Learned, and Design Shifts](project/olmv1_design_decisions.md)
45-
and our feature [Roadmap](project/olmv1_roadmap.md).
36+
For more details on the evolution of OLM and the roadmap for v1, explore the following resources:
37+
38+
- [Multi-Tenancy Challenges, Lessons Learned, and Design Shifts](project/olmv1_design_decisions.md)
39+
- [OLM v1 Roadmap](project/olmv1_roadmap.md)

docs/project/olmv1_architecture.md

Lines changed: 40 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -3,16 +3,16 @@ hide:
33
- toc
44
---
55

6-
# OLM V1 Architecture
6+
## OLM v1 Architecture
77

8-
This document describes the OLM v1 architecture. OLM v1 consists of two main components:
8+
This document provides an overview of the architecture of OLM v1, which consists of two primary components:
99

10-
* [operator-controller](https://github.com/operator-framework/operator-controller)
11-
* [catalogD](https://github.com/operator-framework/catalogd)
10+
1. [operator-controller](https://github.com/operator-framework/operator-controller)
11+
2. [catalogD](https://github.com/operator-framework/catalogd)
1212

13-
The diagram below illustrates the OLM v1 architecture and its components, and the following sections describe each of the components in detail.
13+
The diagram below visually represents the architecture of OLM v1, followed by descriptions of each component and its role within the system.
1414

15-
### Diagram
15+
### Architecture Diagram
1616

1717
```mermaid
1818
flowchart TB
@@ -53,39 +53,48 @@ flowchart TB
5353
A -- pushed to --> B
5454
```
5555

56-
**Note**: The direction of the arrow indicates the active part of communication i.e. if arrow starts from A and points to B that means A consumes the information from B unless specifically mentioned.
56+
**Note**: The direction of the arrows represents the flow of communication. If an arrow starts from A and points to B, it indicates that A retrieves or consumes information from B, unless otherwise specified.
5757

58-
### Operator-controller:
58+
---
59+
60+
### operator-controller
61+
62+
The `operator-controller` is the core component of OLM v1. Its responsibilities include:
5963

60-
operator-controller is the central component of OLM v1. It is responsible:
64+
- Managing a cache of catalog metadata provided by catalogD through its HTTP server.
65+
- Ensuring the catalog metadata cache is kept up-to-date with the latest catalog state.
66+
- Identifying the appropriate `registry+v1` bundle that meets the constraints defined in the `ClusterExtension` resource (e.g., package name, version, channel) based on the cluster's current state.
67+
- Unpacking and applying bundle manifests (e.g., installing or updating the operator).
6168

62-
* managing a cache of catalog metadata provided by catalogd through its HTTP server
63-
* keeping the catalog metadata cache up-to-date with the current state of the catalogs
64-
* locating the right `registry+v1` bundle, if any, that meet the constraints expressed in the `ClusterExtension` resource, such as package name, version range, channel, etc. given the current state of the cluster
65-
* unpacking the bundle
66-
* applying the bundle manifests: installing or updating the content.
67-
68-
It has three main sub-components:
69+
The operator-controller has three key sub-components:
6970

70-
* Cluster Extension Controller:
71-
* Queries the catalogd (catalogd HTTP Server) to get catalog information.
72-
* Once received the catalog information is saved to catalog-cache. The cache will be updated automatically if a Catalog is noticed to have a different resolved image reference.
73-
* Reaches out to the registry to download the bundle container images, saves it to the bundle cache, unpacks it and applies the bundle manifests to the cluster.
74-
* It is also Responsible for figuring out which bundle to upgrade
75-
* Resolver:
76-
* Helps the cluster extension controller to filter the bundle reference after applying the user restrictions (e.g. name, priority etc) and returns the bundle reference to the extension controller.
77-
* Bundle Cache:
78-
* Bundle cache returns the cache for the bundle. If a cache does not already exist, a new one will be created.
71+
1. **Cluster Extension Controller**:
72+
- Queries catalogD (via its HTTP server) to retrieve catalog information.
73+
- Saves catalog information in the catalog cache and automatically updates the cache if a catalog has a new image reference.
74+
- Downloads bundle container images from the registry, saves them to the bundle cache, unpacks them, and applies the bundle manifests to the cluster.
75+
- Handles bundle upgrades by determining which bundle is the correct one to apply.
7976

80-
### Catalogd:
77+
2. **Resolver**:
78+
- Assists the Cluster Extension Controller by filtering bundle references according to user-defined restrictions (e.g., package name, priority). It returns the filtered bundle reference to the extension controller.
79+
80+
3. **Bundle Cache**:
81+
- Stores previously unpacked bundles. If a bundle is not already cached, it downloads and caches it for future use.
82+
83+
---
8184

82-
Catalogd unpacks [file-based catalog (FBC)](https://olm.operatorframework.io/docs/reference/file-based-catalogs/#docs) content that is packaged and shipped in container images, for consumption by clients on-clusters (unpacking from other sources, like git repos, OCI artifacts etc, are in the roadmap for catalogD). It serves the extension metadata, provided by the extension authors, found in the FBC, making it possible for on-cluster clients to discover installable content.
85+
### catalogd
8386

84-
* Catalogd can be broken down in to three sub-components i.e. ClusterCatalog controller, catalogd http server, catalogd content cache.
85-
* Catalog controller is responsible for pulling FBC based catalog images from registry and unpacking them into the catalog content cache. It is also responsible for reconciling the latest changes in the cluster catalog.
86-
* Catalogd http server is responsible for serving catalog information to clients e.g. cluster extension controller.
87-
* Catalogd content cache is maintained by the catalog controller and used by the catalogd http server to answer queries from clients.
87+
catalogd is responsible for unpacking [file-based catalog (FBC)](https://olm.operatorframework.io/docs/reference/file-based-catalogs/#docs) content, which is packaged and delivered as container images. It allows on-cluster clients to discover installable content by providing access to this metadata. In the future, catalogD will also support other sources like Git repositories and OCI artifacts.
8888

89+
catalogd has three main sub-components:
8990

91+
1. **ClusterCatalog Controller**:
92+
- Pulls FBC-based catalog images from the registry and unpacks them into the catalog content cache.
93+
- Reconciles any changes in the catalog and ensures the latest content is reflected in the cluster.
94+
95+
2. **CatalogD HTTP Server**:
96+
- Serves catalog information to clients, such as the Cluster Extension Controller.
9097

98+
3. **CatalogD Content Cache**:
99+
- A cache maintained by the Catalog Controller that stores unpacked catalog data, which the CatalogD HTTP Server uses to respond to client queries.
91100

docs/project/olmv1_limitations.md

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,23 +3,22 @@ hide:
33
- toc
44
---
55

6-
## OLM v0 Extension Support
6+
## Content Support
77

8-
Currently, OLM v1 supports installing cluster extensions that meet the following criteria:
9-
10-
* The extension must support installation via the `AllNamespaces` install mode.
11-
* The extension must not use webhooks.
12-
* The extension must not declare dependencies using any of the following file-based catalog properties:
8+
Currently, OLM v1 only supports installing operators packaged in [OLM v0 bundles](https://olm.operatorframework.io/docs/tasks/creating-operator-bundle/)
9+
, also known as `registry+v1` bundles. Additionally, the bundled operator, or cluster extension:
1310

11+
* **must** support installation via the `AllNamespaces` install mode.
12+
* **must not** use webhooks.
13+
* **must not** declare dependencies using any of the following file-based catalog properties:
1414
* `olm.gvk.required`
1515
* `olm.package.required`
1616
* `olm.constraint`
1717

18-
When you install an extension, OLM v1 validates that the bundle you want to install meets these constraints. If you try to install an extension that does not meet these constraints, an error message is printed in the cluster extension's conditions.
18+
OLM v1 verifies these criteria at install time and will surface violations in the `ClusterExtensions`'s `.status.conditions`.
1919

2020
!!! important
2121

2222
OLM v1 does not support the `OperatorConditions` API introduced in legacy OLM.
2323

24-
Currently, there is no testing to validate against this constraint. If an extension uses the `OperatorConditions` API, the extension does not install correctly. Most extensions that rely on this API fail at start time, but some might fail during reconcilation.
25-
24+
Currently, there is no testing to validate against this constraint. If an extension uses the `OperatorConditions` API, the extension does not install correctly. Most extensions that rely on this API fail at start time, but some might fail during reconcilation.

docs/project/olmv1_roadmap.md

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -153,7 +153,3 @@ OLM 1.0 does not support managing bundles or extension versions that do not supp
153153
- Migration scripting is provided to mass-convert existing installed extensions (“Subscription” / “OperatorGroup” objects) on existing clusters to the new OLM 1.0 model assuming they are compatible
154154

155155
- Extension authors that are also SRE/Managed PaaS administrators are incentivized to make their extension compatible with the requirements of OLM 1.0 to reap the operational benefits
156-
157-
# TODO
158-
- Definition of "extension"
159-
- Does OLM become ELM? Does this provide of provisioning bundles that do not add APIs?

0 commit comments

Comments
 (0)