此内容没有您所选择的语言版本。
Chapter 4. Catalogs
4.1. File-based catalogs 复制链接链接已复制到粘贴板!
Operator Lifecycle Manager (OLM) v1 in OpenShift Container Platform supports file-based catalogs for discovering and sourcing cluster extensions, including Operators, on a cluster.
4.1.1. Highlights 复制链接链接已复制到粘贴板!
File-based catalogs are the latest iteration of the catalog format in Operator Lifecycle Manager (OLM). It is a plain text-based (JSON or YAML) and declarative config evolution of the earlier SQLite database format, and it is fully backwards compatible. The goal of this format is to enable Operator catalog editing, composability, and extensibility.
- Editing
With file-based catalogs, users interacting with the contents of a catalog are able to make direct changes to the format and verify that their changes are valid. Because this format is plain text JSON or YAML, catalog maintainers can easily manipulate catalog metadata by hand or with widely known and supported JSON or YAML tooling, such as the
jq
CLI.This editability enables the following features and user-defined extensions:
- Promoting an existing bundle to a new channel
- Changing the default channel of a package
- Custom algorithms for adding, updating, and removing upgrade paths
- Composability
File-based catalogs are stored in an arbitrary directory hierarchy, which enables catalog composition. For example, consider two separate file-based catalog directories:
catalogA
andcatalogB
. A catalog maintainer can create a new combined catalog by making a new directorycatalogC
and copyingcatalogA
andcatalogB
into it.This composability enables decentralized catalogs. The format permits Operator authors to maintain Operator-specific catalogs, and it permits maintainers to trivially build a catalog composed of individual Operator catalogs. File-based catalogs can be composed by combining multiple other catalogs, by extracting subsets of one catalog, or a combination of both of these.
NoteDuplicate packages and duplicate bundles within a package are not permitted. The
opm validate
command returns an error if any duplicates are found.Because Operator authors are most familiar with their Operator, its dependencies, and its upgrade compatibility, they are able to maintain their own Operator-specific catalog and have direct control over its contents. With file-based catalogs, Operator authors own the task of building and maintaining their packages in a catalog. Composite catalog maintainers, however, only own the task of curating the packages in their catalog and publishing the catalog to users.
- Extensibility
The file-based catalog specification is a low-level representation of a catalog. While it can be maintained directly in its low-level form, catalog maintainers can build interesting extensions on top that can be used by their own custom tooling to make any number of mutations.
For example, a tool could translate a high-level API, such as
(mode=semver)
, down to the low-level, file-based catalog format for upgrade paths. Or a catalog maintainer might need to customize all of the bundle metadata by adding a new property to bundles that meet a certain criteria.While this extensibility allows for additional official tooling to be developed on top of the low-level APIs for future OpenShift Container Platform releases, the major benefit is that catalog maintainers have this capability as well.
4.1.2. Directory structure 复制链接链接已复制到粘贴板!
File-based catalogs can be stored and loaded from directory-based file systems. The opm
CLI loads the catalog by walking the root directory and recursing into subdirectories. The CLI attempts to load every file it finds and fails if any errors occur.
Non-catalog files can be ignored using .indexignore
files, which have the same rules for patterns and precedence as .gitignore
files.
Example .indexignore
file
Catalog maintainers have the flexibility to choose their desired layout, but it is recommended to store each package’s file-based catalog blobs in separate subdirectories. Each individual file can be either JSON or YAML; it is not necessary for every file in a catalog to use the same format.
Basic recommended structure
This recommended structure has the property that each subdirectory in the directory hierarchy is a self-contained catalog, which makes catalog composition, discovery, and navigation trivial file system operations. The catalog can also be included in a parent catalog by copying it into the parent catalog’s root directory.
4.1.3. Schemas 复制链接链接已复制到粘贴板!
File-based catalogs use a format, based on the CUE language specification, that can be extended with arbitrary schemas. The following _Meta
CUE schema defines the format that all file-based catalog blobs must adhere to:
_Meta
schema
No CUE schemas listed in this specification should be considered exhaustive. The opm validate
command has additional validations that are difficult or impossible to express concisely in CUE.
An Operator Lifecycle Manager (OLM) catalog currently uses three schemas (olm.package
, olm.channel
, and olm.bundle
), which correspond to OLM’s existing package and bundle concepts.
Each Operator package in a catalog requires exactly one olm.package
blob, at least one olm.channel
blob, and one or more olm.bundle
blobs.
All olm.*
schemas are reserved for OLM-defined schemas. Custom schemas must use a unique prefix, such as a domain that you own.
4.1.3.1. olm.package schema 复制链接链接已复制到粘贴板!
The olm.package
schema defines package-level metadata for an Operator. This includes its name, description, default channel, and icon.
Example 4.1. olm.package
schema
4.1.3.2. olm.channel schema 复制链接链接已复制到粘贴板!
The olm.channel
schema defines a channel within a package, the bundle entries that are members of the channel, and the upgrade paths for those bundles.
If a bundle entry represents an edge in multiple olm.channel
blobs, it can only appear once per channel.
It is valid for an entry’s replaces
value to reference another bundle name that cannot be found in this catalog or another catalog. However, all other channel invariants must hold true, such as a channel not having multiple heads.
Example 4.2. olm.channel
schema
When using the skipRange
field, the skipped Operator versions are pruned from the update graph and are longer installable by users with the spec.startingCSV
property of Subscription
objects.
You can update an Operator incrementally while keeping previously installed versions available to users for future installation by using both the skipRange
and replaces
field. Ensure that the replaces
field points to the immediate previous version of the Operator version in question.
4.1.3.3. olm.bundle schema 复制链接链接已复制到粘贴板!
Example 4.3. olm.bundle
schema
4.1.3.4. olm.deprecations schema 复制链接链接已复制到粘贴板!
The optional olm.deprecations
schema defines deprecation information for packages, bundles, and channels in a catalog. Operator authors can use this schema to provide relevant messages about their Operators, such as support status and recommended upgrade paths, to users running those Operators from a catalog.
When this schema is defined, the OpenShift Container Platform web console displays warning badges for the affected elements of the Operator, including any custom deprecation messages, on both the pre- and post-installation pages of the OperatorHub.
An olm.deprecations
schema entry contains one or more of the following reference
types, which indicates the deprecation scope. After the Operator is installed, any specified messages can be viewed as status conditions on the related Subscription
object.
Type | Scope | Status condition |
---|---|---|
| Represents the entire package |
|
| Represents one channel |
|
| Represents one bundle version |
|
Each reference
type has their own requirements, as detailed in the following example.
Example 4.4. Example olm.deprecations
schema with each reference
type
- 1
- Each deprecation schema must have a
package
value, and that package reference must be unique across the catalog. There must not be an associatedname
field. - 2
- The
olm.package
schema must not include aname
field, because it is determined by thepackage
field defined earlier in the schema. - 3
- All
message
fields, for anyreference
type, must be a non-zero length and represented as an opaque text blob. - 4
- The
name
field for theolm.channel
schema is required. - 5
- The
name
field for theolm.bundle
schema is required.
The deprecation feature does not consider overlapping deprecation, for example package versus channel versus bundle.
Operator authors can save olm.deprecations
schema entries as a deprecations.yaml
file in the same directory as the package’s index.yaml
file:
Example directory structure for a catalog with deprecations
my-catalog └── my-operator ├── index.yaml └── deprecations.yaml
my-catalog
└── my-operator
├── index.yaml
└── deprecations.yaml
4.1.4. Properties 复制链接链接已复制到粘贴板!
Properties are arbitrary pieces of metadata that can be attached to file-based catalog schemas. The type
field is a string that effectively specifies the semantic and syntactic meaning of the value
field. The value can be any arbitrary JSON or YAML.
OLM defines a handful of property types, again using the reserved olm.*
prefix.
4.1.4.1. olm.package property 复制链接链接已复制到粘贴板!
The olm.package
property defines the package name and version. This is a required property on bundles, and there must be exactly one of these properties. The packageName
field must match the bundle’s first-class package
field, and the version
field must be a valid semantic version.
Example 4.5. olm.package
property
4.1.4.2. olm.gvk property 复制链接链接已复制到粘贴板!
The olm.gvk
property defines the group/version/kind (GVK) of a Kubernetes API that is provided by this bundle. This property is used by OLM to resolve a bundle with this property as a dependency for other bundles that list the same GVK as a required API. The GVK must adhere to Kubernetes GVK validations.
Example 4.6. olm.gvk
property
4.1.4.3. olm.package.required 复制链接链接已复制到粘贴板!
The olm.package.required
property defines the package name and version range of another package that this bundle requires. For every required package property a bundle lists, OLM ensures there is an Operator installed on the cluster for the listed package and in the required version range. The versionRange
field must be a valid semantic version (semver) range.
Example 4.7. olm.package.required
property
4.1.4.4. olm.gvk.required 复制链接链接已复制到粘贴板!
The olm.gvk.required
property defines the group/version/kind (GVK) of a Kubernetes API that this bundle requires. For every required GVK property a bundle lists, OLM ensures there is an Operator installed on the cluster that provides it. The GVK must adhere to Kubernetes GVK validations.
Example 4.8. olm.gvk.required
property
4.1.5. Example catalog 复制链接链接已复制到粘贴板!
With file-based catalogs, catalog maintainers can focus on Operator curation and compatibility. Because Operator authors have already produced Operator-specific catalogs for their Operators, catalog maintainers can build their catalog by rendering each Operator catalog into a subdirectory of the catalog’s root directory.
There are many possible ways to build a file-based catalog; the following steps outline a simple approach:
Maintain a single configuration file for the catalog, containing image references for each Operator in the catalog:
Example catalog configuration file
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Run a script that parses the configuration file and creates a new catalog from its references:
Example script
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.1.6. Guidelines 复制链接链接已复制到粘贴板!
Consider the following guidelines when maintaining file-based catalogs.
4.1.6.1. Immutable bundles 复制链接链接已复制到粘贴板!
The general advice with Operator Lifecycle Manager (OLM) is that bundle images and their metadata should be treated as immutable.
If a broken bundle has been pushed to a catalog, you must assume that at least one of your users has upgraded to that bundle. Based on that assumption, you must release another bundle with an upgrade path from the broken bundle to ensure users with the broken bundle installed receive an upgrade. OLM will not reinstall an installed bundle if the contents of that bundle are updated in the catalog.
However, there are some cases where a change in the catalog metadata is preferred:
-
Channel promotion: If you already released a bundle and later decide that you would like to add it to another channel, you can add an entry for your bundle in another
olm.channel
blob. -
New upgrade paths: If you release a new
1.2.z
bundle version, for example1.2.4
, but1.3.0
is already released, you can update the catalog metadata for1.3.0
to skip1.2.4
.
4.1.6.2. Source control 复制链接链接已复制到粘贴板!
Catalog metadata should be stored in source control and treated as the source of truth. Updates to catalog images should include the following steps:
- Update the source-controlled catalog directory with a new commit.
-
Build and push the catalog image. Use a consistent tagging taxonomy, such as
:latest
or:<target_cluster_version>
, so that users can receive updates to a catalog as they become available.
4.1.7. CLI usage 复制链接链接已复制到粘贴板!
For instructions about creating file-based catalogs by using the opm
CLI, see Managing custom catalogs.
For reference documentation about the opm
CLI commands related to managing file-based catalogs, see CLI tools.
4.1.8. Automation 复制链接链接已复制到粘贴板!
Operator authors and catalog maintainers are encouraged to automate their catalog maintenance with CI/CD workflows. Catalog maintainers can further improve on this by building GitOps automation to accomplish the following tasks:
- Check that pull request (PR) authors are permitted to make the requested changes, for example by updating their package’s image reference.
-
Check that the catalog updates pass the
opm validate
command. - Check that the updated bundle or catalog image references exist, the catalog images run successfully in a cluster, and Operators from that package can be successfully installed.
- Automatically merge PRs that pass the previous checks.
- Automatically rebuild and republish the catalog image.
4.2. Red Hat-provided catalogs 复制链接链接已复制到粘贴板!
Red Hat provides several Operator catalogs that are included with OpenShift Container Platform by default.
4.2.1. About Red Hat-provided Operator catalogs 复制链接链接已复制到粘贴板!
The Red Hat-provided catalog sources are installed by default in the openshift-marketplace
namespace, which makes the catalogs available cluster-wide in all namespaces.
The following Operator catalogs are distributed by Red Hat:
Catalog | Index image | Description |
---|---|---|
|
| Red Hat products packaged and shipped by Red Hat. Supported by Red Hat. |
|
| Products from leading independent software vendors (ISVs). Red Hat partners with ISVs to package and ship. Supported by the ISV. |
|
| Certified software that can be purchased from Red Hat Marketplace. |
|
| Software maintained by relevant representatives in the redhat-openshift-ecosystem/community-operators-prod/operators GitHub repository. No official support. |
During a cluster upgrade, the index image tag for the default Red Hat-provided catalog sources are updated automatically by the Cluster Version Operator (CVO) so that Operator Lifecycle Manager (OLM) pulls the updated version of the catalog. For example during an upgrade from OpenShift Container Platform 4.8 to 4.9, the spec.image
field in the CatalogSource
object for the redhat-operators
catalog is updated from:
registry.redhat.io/redhat/redhat-operator-index:v4.8
registry.redhat.io/redhat/redhat-operator-index:v4.8
to:
registry.redhat.io/redhat/redhat-operator-index:v4.9
registry.redhat.io/redhat/redhat-operator-index:v4.9
4.3. Managing catalogs 复制链接链接已复制到粘贴板!
Cluster administrators can add catalogs, or curated collections of Operators and Kubernetes extensions, to their clusters. Operator authors publish their products to these catalogs. When you add a catalog to your cluster, you have access to the versions, patches, and over-the-air updates of the Operators and extensions that are published to the catalog.
You can manage catalogs and extensions declaratively from the CLI by using custom resources (CRs).
File-based catalogs are the latest iteration of the catalog format in Operator Lifecycle Manager (OLM). It is a plain text-based (JSON or YAML) and declarative config evolution of the earlier SQLite database format, and it is fully backwards compatible.
Kubernetes periodically deprecates certain APIs that are removed in subsequent releases. As a result, Operators are unable to use removed APIs starting with the version of OpenShift Container Platform that uses the Kubernetes version that removed the API.
If your cluster is using custom catalogs, see Controlling Operator compatibility with OpenShift Container Platform versions for more details about how Operator authors can update their projects to help avoid workload issues and prevent incompatible upgrades.
4.3.1. About catalogs in OLM v1 复制链接链接已复制到粘贴板!
You can discover installable content by querying a catalog for Kubernetes extensions, such as Operators and controllers, by using the catalogd component. Catalogd is a Kubernetes extension that unpacks catalog content for on-cluster clients and is part of the Operator Lifecycle Manager (OLM) v1 suite of microservices. Currently, catalogd unpacks catalog content that is packaged and distributed as container images.
4.3.2. Red Hat-provided Operator catalogs in OLM v1 复制链接链接已复制到粘贴板!
Operator Lifecycle Manager (OLM) v1 includes the following Red Hat-provided Operator catalogs on the cluster by default. If you want to add an additional catalog to your cluster, create a custom resource (CR) for the catalog and apply it to the cluster. The following custom resource (CR) examples show the default catalogs installed on the cluster.
Red Hat Operators catalog
- 1
- Specify the interval in minutes for polling the remote registry for newer image digests. To disable polling, do not set the field.
Certified Operators catalog
Red Hat Marketplace catalog
Community Operators catalog
The following command adds a catalog to your cluster:
Command syntax
oc apply -f <catalog_name>.yaml
$ oc apply -f <catalog_name>.yaml
- 1
- Specifies the catalog CR, such as
my-catalog.yaml
.
4.3.3. Adding a catalog to a cluster 复制链接链接已复制到粘贴板!
To add a catalog to a cluster for Operator Lifecycle Manager (OLM) v1 usage, create a ClusterCatalog
custom resource (CR) and apply it to the cluster.
Procedure
Create a catalog custom resource (CR), similar to the following example:
Example
my-redhat-operators.yaml
fileCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- The catalog is automatically labeled with the value of the
metadata.name
field when it is applied to the cluster. For more information about labels and catalog selection, see "Catalog content resolution". - 2
- Optional: Specify the priority of the catalog in relation to the other catalogs on the cluster. For more information, see "Catalog selection by priority".
- 3
- Specify the interval in minutes for polling the remote registry for newer image digests. To disable polling, do not set the field.
- 4
- Specify the catalog image in the
spec.source.image.ref
field.
Add the catalog to your cluster by running the following command:
oc apply -f my-redhat-operators.yaml
$ oc apply -f my-redhat-operators.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Example output
clustercatalog.olm.operatorframework.io/my-redhat-operators created
clustercatalog.olm.operatorframework.io/my-redhat-operators created
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
Verification
Run the following commands to verify the status of your catalog:
Check if you catalog is available by running the following command:
oc get clustercatalog
$ oc get clustercatalog
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Example output
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Check the status of your catalog by running the following command:
oc describe clustercatalog my-redhat-operators
$ oc describe clustercatalog my-redhat-operators
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Example output
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.3.4. Deleting a catalog 复制链接链接已复制到粘贴板!
You can delete a catalog by deleting its custom resource (CR).
Prerequisites
- You have a catalog installed.
Procedure
Delete a catalog by running the following command:
oc delete clustercatalog <catalog_name>
$ oc delete clustercatalog <catalog_name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Example output
clustercatalog.olm.operatorframework.io "my-redhat-operators" deleted
clustercatalog.olm.operatorframework.io "my-redhat-operators" deleted
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
Verification
Verify the catalog is deleted by running the following command:
oc get clustercatalog
$ oc get clustercatalog
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.3.5. Disabling a default catalog 复制链接链接已复制到粘贴板!
You can disable the Red Hat-provided catalogs that are included with OpenShift Container Platform by default.
Procedure
Disable a default catalog by running the following command:
oc patch clustercatalog openshift-certified-operators -p \ '{"spec": {"availabilityMode": "Unavailable"}}' --type=merge
$ oc patch clustercatalog openshift-certified-operators -p \ '{"spec": {"availabilityMode": "Unavailable"}}' --type=merge
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Example output
clustercatalog.olm.operatorframework.io/openshift-certified-operators patched
clustercatalog.olm.operatorframework.io/openshift-certified-operators patched
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
Verification
Verify the catalog is disabled by running the following command:
oc get clustercatalog openshift-certified-operators
$ oc get clustercatalog openshift-certified-operators
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Example output
NAME LASTUNPACKED SERVING AGE openshift-certified-operators False 6h54m
NAME LASTUNPACKED SERVING AGE openshift-certified-operators False 6h54m
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.4. Catalog content resolution 复制链接链接已复制到粘贴板!
When you specify the cluster extension you want to install in a custom resource (CR), Operator Lifecycle Manager (OLM) v1 uses catalog selection to resolve what content is installed.
You can perform the following actions to control the selection of catalog content:
- Specify labels to select the catalog.
- Use match expressions to perform complex filtering across catalogs.
- Set catalog priority.
If you do not specify any catalog selection criteria, Operator Lifecycle Manager (OLM) v1 selects an extension from any available catalog on the cluster that provides the requested package.
During resolution, bundles that are not deprecated are preferred over deprecated bundles by default.
4.4.1. Catalog selection by name 复制链接链接已复制到粘贴板!
When a catalog is added to a cluster, a label is created by using the value of the metadata.name
field of the catalog custom resource (CR). In the CR of an extension, you can specify the catalog name by using the spec.source.catalog.selector.matchLabels
field. The value of the matchLabels
field uses the following format:
Example label derived from the metadata.name
field
- 1
- A label derived from the
metadata.name
field and automatically added when the catalog is applied.
The following example resolves the <example_extension>-operator
package from a catalog with the openshift-redhat-operators
label:
Example extension CR
4.4.2. Catalog selection by labels or expressions 复制链接链接已复制到粘贴板!
You can add metadata to a catalog by using labels in the custom resource (CR) of a cluster catalog. You can then filter catalog selection by specifying the assigned labels or using expressions in the CR of the cluster extension.
The following cluster catalog CR adds the example.com/support
label with the value of true
to the catalog-a
cluster catalog:
Example cluster catalog CR with labels
The following cluster extension CR uses the matchLabels
selector to select catalogs with the example.com/support
label and the value of true
:
Example cluster extension CR with matchLabels
selector
You can use the matchExpressions
field to perform more complex filtering for labels. The following cluster extension CR selects catalogs with the example.com/support
label and a value of production
or supported
:
Example cluster extension CR with matchExpression
selector
If you use both the matchLabels
and matchExpressions
fields, the selected catalog must satisfy all specified criteria.
4.4.3. Catalog exclusion by labels or expressions 复制链接链接已复制到粘贴板!
You can exclude catalogs by using match expressions on metadata with the NotIn
or DoesNotExist
operators.
The following CRs add an example.com/testing
label to the unwanted-catalog-1
and unwanted-catalog-2
cluster catalogs:
Example cluster catalog CR
Example cluster catalog CR
The following cluster extension CR excludes selection from the unwanted-catalog-1
catalog:
Example cluster extension CR that excludes a specific catalog
The following cluster extension CR selects from catalogs that do not have the example.com/testing
label. As a result, both unwanted-catalog-1
and unwanted-catalog-2
are excluded from catalog selection.
Example cluster extension CR that excludes catalogs with a specific label
4.4.4. Catalog selection by priority 复制链接链接已复制到粘贴板!
When multiple catalogs provide the same package, you can resolve ambiguities by specifying the priority in the custom resource (CR) of each catalog. If unspecified, catalogs have a default priority value of 0
. The priority can be any positive or negative 32-bit integer.
- During bundle resolution, catalogs with higher priority values are selected over catalogs with lower priority values.
- Bundles that are not deprecated are prioritized over bundles that are deprecated.
- If multiple bundles exist in catalogs with the same priority and the catalog selection is ambiguous, an error is printed.
Example cluster catalog CR with a higher priority
Example cluster catalog CR with a lower priority
4.4.5. Troubleshooting catalog selection errors 复制链接链接已复制到粘贴板!
If bundle resolution fails because of ambiguity or because no catalog is selected, an error message is printed in the status.conditions
field of the cluster extension.
Perform the following actions to troubleshoot catalog selection errors:
- Refine your selection criteria using labels or expressions.
- Adjust your catalog priorities.
- Ensure that only one bundle matches your package name and version requirements.
4.5. Creating catalogs 复制链接链接已复制到粘贴板!
Catalog maintainers can create new catalogs in the file-based catalog format for use with Operator Lifecycle Manager (OLM) v1 on OpenShift Container Platform.
4.5.1. Creating a file-based catalog image 复制链接链接已复制到粘贴板!
You can use the opm
CLI to create a catalog image that uses the plain text file-based catalog format (JSON or YAML), which replaces the deprecated SQLite database format.
Prerequisites
-
You have installed the
opm
CLI. -
You have
podman
version 1.9.3+. - A bundle image is built and pushed to a registry that supports Docker v2-2.
Procedure
Initialize the catalog:
Create a directory for the catalog by running the following command:
mkdir <catalog_dir>
$ mkdir <catalog_dir>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Generate a Dockerfile that can build a catalog image by running the
opm generate dockerfile
command:opm generate dockerfile <catalog_dir> \ -i registry.redhat.io/openshift4/ose-operator-registry-rhel9:v4.18 -i registry.redhat.io/openshift4/ose-operator-registry-rhel9:v4.18
$ opm generate dockerfile <catalog_dir> \ -i registry.redhat.io/openshift4/ose-operator-registry-rhel9:v4.18
1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- Specify the official Red Hat base image by using the
-i
flag, otherwise the Dockerfile uses the default upstream image.
The Dockerfile must be in the same parent directory as the catalog directory that you created in the previous step:
Example directory structure
. ├── <catalog_dir> └── <catalog_dir>.Dockerfile
.
1 ├── <catalog_dir>
2 └── <catalog_dir>.Dockerfile
3 Copy to Clipboard Copied! Toggle word wrap Toggle overflow Populate the catalog with the package definition for your Operator by running the
opm init
command:Copy to Clipboard Copied! Toggle word wrap Toggle overflow This command generates an
olm.package
declarative config blob in the specified catalog configuration file.
Add a bundle to the catalog by running the
opm render
command:opm render <registry>/<namespace>/<bundle_image_name>:<tag> \ --output=yaml \ >> <catalog_dir>/index.yaml
$ opm render <registry>/<namespace>/<bundle_image_name>:<tag> \
1 --output=yaml \ >> <catalog_dir>/index.yaml
2 Copy to Clipboard Copied! Toggle word wrap Toggle overflow NoteChannels must contain at least one bundle.
Add a channel entry for the bundle. For example, modify the following example to your specifications, and add it to your
<catalog_dir>/index.yaml
file:Example channel entry
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- Ensure that you include the period (
.
) after<operator_name>
but before thev
in the version. Otherwise, the entry fails to pass theopm validate
command.
Validate the file-based catalog:
Run the
opm validate
command against the catalog directory:opm validate <catalog_dir>
$ opm validate <catalog_dir>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Check that the error code is
0
:echo $?
$ echo $?
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Example output
0
0
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
Build the catalog image by running the
podman build
command:podman build . \ -f <catalog_dir>.Dockerfile \ -t <registry>/<namespace>/<catalog_image_name>:<tag>
$ podman build . \ -f <catalog_dir>.Dockerfile \ -t <registry>/<namespace>/<catalog_image_name>:<tag>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Push the catalog image to a registry:
If required, authenticate with your target registry by running the
podman login
command:podman login <registry>
$ podman login <registry>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Push the catalog image by running the
podman push
command:podman push <registry>/<namespace>/<catalog_image_name>:<tag>
$ podman push <registry>/<namespace>/<catalog_image_name>:<tag>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.5.2. Updating or filtering a file-based catalog image 复制链接链接已复制到粘贴板!
You can use the opm
CLI to update or filter a catalog image that uses the file-based catalog format. By extracting the contents of an existing catalog image, you can modify the catalog as needed, for example:
- Adding packages
- Removing packages
- Updating existing package entries
- Detailing deprecation messages per package, channel, and bundle
You can then rebuild the image as an updated version of the catalog.
Alternatively, if you already have a catalog image on a mirror registry, you can use the oc-mirror CLI plugin to automatically prune any removed images from an updated source version of that catalog image while mirroring it to the target registry.
For more information about the oc-mirror plugin and this use case, see the "Keeping your mirror registry content updated" section, and specifically the "Pruning images" subsection, of "Mirroring images for a disconnected installation using the oc-mirror plugin".
Prerequisites
You have the following on your workstation:
-
The
opm
CLI. -
podman
version 1.9.3+. - A file-based catalog image.
A catalog directory structure recently initialized on your workstation related to this catalog.
If you do not have an initialized catalog directory, create the directory and generate the Dockerfile. For more information, see the "Initialize the catalog" step from the "Creating a file-based catalog image" procedure.
-
The
Procedure
Extract the contents of the catalog image in YAML format to an
index.yaml
file in your catalog directory:opm render <registry>/<namespace>/<catalog_image_name>:<tag> \ -o yaml > <catalog_dir>/index.yaml -o yaml > <catalog_dir>/index.yaml
$ opm render <registry>/<namespace>/<catalog_image_name>:<tag> \ -o yaml > <catalog_dir>/index.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow NoteAlternatively, you can use the
-o json
flag to output in JSON format.Modify the contents of the resulting
index.yaml
file to your specifications:ImportantAfter a bundle has been published in a catalog, assume that one of your users has installed it. Ensure that all previously published bundles in a catalog have an update path to the current or newer channel head to avoid stranding users that have that version installed.
- To add an Operator, follow the steps for creating package, bundle, and channel entries in the "Creating a file-based catalog image" procedure.
To remove an Operator, delete the set of
olm.package
,olm.channel
, andolm.bundle
blobs that relate to the package. The following example shows a set that must be deleted to remove theexample-operator
package from the catalog:Example 4.9. Example removed entries
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
To add or update deprecation messages for an Operator, ensure there is a
deprecations.yaml
file in the same directory as the package’sindex.yaml
file. For information on thedeprecations.yaml
file format, see "olm.deprecations schema".
- Save your changes.
Validate the catalog:
opm validate <catalog_dir>
$ opm validate <catalog_dir>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Rebuild the catalog:
podman build . \ -f <catalog_dir>.Dockerfile \ -t <registry>/<namespace>/<catalog_image_name>:<tag>
$ podman build . \ -f <catalog_dir>.Dockerfile \ -t <registry>/<namespace>/<catalog_image_name>:<tag>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Push the updated catalog image to a registry:
podman push <registry>/<namespace>/<catalog_image_name>:<tag>
$ podman push <registry>/<namespace>/<catalog_image_name>:<tag>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
Verification
-
In the web console, navigate to the OperatorHub configuration resource in the Administration
Cluster Settings Configuration page. Add the catalog source or update the existing catalog source to use the pull spec for your updated catalog image.
For more information, see "Adding a catalog source to a cluster" in the "Additional resources" of this section.
-
After the catalog source is in a READY state, navigate to the Operators
OperatorHub page and check that the changes you made are reflected in the list of Operators.
4.6. Disconnected environment support in OLM v1 复制链接链接已复制到粘贴板!
To support cluster administrators that prioritize high security by running their clusters in internet-disconnected environments, especially for mission-critical production workloads, Operator Lifecycle Manager (OLM) v1 includes cluster extension lifecycle management functionality that works within these disconnected environments, starting in OpenShift Container Platform 4.18.
Operator Lifecycle Manager (OLM) v1 supports disconnected environments starting in OpenShift Container Platform 4.18. After using the oc-mirror plugin for the OpenShift CLI (oc
) to mirror the images required for your cluster to a mirror registry in your fully or partially disconnected environments, OLM v1 can function properly in these environments by utilizing either of the following sets of resources, depending on which oc-mirror plugin version you are using:
-
ImageContentSourcePolicy
resources, which are automatically generated by oc-mirror plugin v1, andClusterCatalog
resources, which must be manually created after using oc-mirror plugin v1 -
ImageDigestMirrorSet
,ImageTagMirrorSet
, andClusterCatalog
resources, which are all automatically generated by oc-mirror plugin v2
Starting in OpenShift Container Platform 4.18, oc-mirror plugin v2 is the recommended version for mirroring.
For more information and procedures, see the Disconnected environments guide for the oc-mirror plugin version you plan to use.