Giter Club home page Giter Club logo

olm-oci's Introduction

Use OCI registries to store OLM artifacts

What artifacts are related to OLM?

Catalog

A catalog is a collection of package references that together represent a repository of cluster extensions. A catalog can also have metadata associated with it (e.g. publisher, display name, deprecation status).

Package

A package represents a single product. It contains a collection of channels that help users consume upgrades. A package author can include multiple channels in their package to give their users different upgrade strategies. In addition to channels, a package also contains metadata such as icon, description, maintainers, URLs, keywords, display name, deprecation status, etc.

Channel

A channel defines a supported upgrade graph that connects versions of the package. A channel lists the bundles that are present in the channel along with upgrade edge metadata specific to the channel for each of those bundles. In addition, a channel include metadata such as a description and a deprecation status.

Bundle

A bundle is an installable unit capable of being deployed on a Kubernetes cluster. It contains content, metadata, and image references necessary to enable bundle-aware tooling to unpack, deploy, mirror, and provide other package management utilities.

Bundle content is extensible and can be distinguished based on its media type. Examples of bundle content include OLM's registry+v1 bundles, rukpak's plain+v0 bundles, and helm charts.

Bundle metadata consists of both properties and constraints, which are useful for cluster package managers to provide capabilities around package discovery, dependency/conflict resolution, version pinning, etc.

Lastly a bundle references all container images that a user of the bundle would potentially need to run.

OCI Index Images & Image Manifests

(aka manifests lists and container images)

The typical thing you think of pushing and pulling from image registries. These are generally the container images that are eventually deployed onto a Kubernetes cluster as a Pod directly or via another workload API.

Why?

Using OCI artifacts to store and share catalogs, packages, channels, and bundles is a natural fit. We think using cloud-native storage for cloud-native content makes a lot of sense. There are many benefits, but here are a few:

  1. Different catalogs can reference the same packages, channels can reference the same bundles, bundles can reference the same container images (e.g. sidecar images, operand images, etc.). OCI registries are very good at de-duplicating these shared artifacts, which makes them optimal for this use case where lots of sharing occurs.
  2. Actions like channel promotion don't involve a complete rebuild of the catalog. You would push a single channel artifact update with the new bundle reference, a new package artifact update with the updated channel reference, and a new catalog artifact with the updated package reference. Only a very small sliver of the overall catalog would change, which means less bandwidth required to push the change and less bandwidth required for users to pull or mirror the change.
  3. There's no concern about a mismatch between what’s in the catalog and what’s in the bundle. The catalog is simply the root node of a directed acyclic graph of artifacts, where any change must be reflected back to the root to have an affect to a catalog consumer. Immutability is built-in.
  4. Identity is easy. Each artifact has a digest-based OCI artifact reference.
  5. Clients don't have to fetch the entire catalog, packages, channels, bundles, and container images. They can instead query the registry for just what they need.
  6. Using OCI artifact and nesting constructs make mirroring a simple, straightforward process using off the shelf OCI-compliant tools.
  7. We no longer have to ship binaries around in catalog images that are currently require to serve the content from those images. In many cases, those binaries are larger than the catalog itself.

olm-oci's People

Contributors

joelanford avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.