{"id":13481340,"url":"https://github.com/operator-framework/operator-lifecycle-manager","last_synced_at":"2025-05-14T22:06:17.245Z","repository":{"id":37664566,"uuid":"100052573","full_name":"operator-framework/operator-lifecycle-manager","owner":"operator-framework","description":"A management framework for extending Kubernetes with Operators","archived":false,"fork":false,"pushed_at":"2025-05-07T10:41:10.000Z","size":89209,"stargazers_count":1770,"open_issues_count":285,"forks_count":555,"subscribers_count":51,"default_branch":"master","last_synced_at":"2025-05-07T21:58:22.948Z","etag":null,"topics":["crd","kubernetes","kubernetes-applications","kubernetes-operator","olm"],"latest_commit_sha":null,"homepage":"https://olm.operatorframework.io","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/operator-framework.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"code-of-conduct.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2017-08-11T16:47:06.000Z","updated_at":"2025-05-07T08:46:49.000Z","dependencies_parsed_at":"2023-10-17T04:26:15.415Z","dependency_job_id":"26258b37-572c-4ef2-b83e-d55c1a02d142","html_url":"https://github.com/operator-framework/operator-lifecycle-manager","commit_stats":{"total_commits":2940,"total_committers":160,"mean_commits":18.375,"dds":0.7112244897959183,"last_synced_commit":"47d6aa1cfcfed08a81ba105d9ca358d0c1283d6a"},"previous_names":[],"tags_count":42,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/operator-framework%2Foperator-lifecycle-manager","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/operator-framework%2Foperator-lifecycle-manager/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/operator-framework%2Foperator-lifecycle-manager/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/operator-framework%2Foperator-lifecycle-manager/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/operator-framework","download_url":"https://codeload.github.com/operator-framework/operator-lifecycle-manager/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254235694,"owners_count":22036963,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["crd","kubernetes","kubernetes-applications","kubernetes-operator","olm"],"created_at":"2024-07-31T17:00:50.987Z","updated_at":"2025-05-14T22:06:12.212Z","avatar_url":"https://github.com/operator-framework.png","language":"Go","readme":"\u003cimg src=\"logo/logo.svg#gh-light-mode-only\" height=\"125px\" alt=\"Operator Lifecycle Manager\"\u003e\u003c/img\u003e\n\u003cimg src=\"logo/logo-dark-mode.svg#gh-dark-mode-only\" height=\"125px\" alt=\"Operator Lifecycle Manager\"\u003e\u003c/img\u003e\n\n[![Container Repository on Quay.io](https://quay.io/repository/operator-framework/olm/status \"Container Repository on Quay.io\")](https://quay.io/repository/operator-framework/olm)\n[![License](http://img.shields.io/:license-apache-blue.svg)](http://www.apache.org/licenses/LICENSE-2.0.html)\n[![Go Report Card](https://goreportcard.com/badge/github.com/operator-framework/operator-lifecycle-manager)](https://goreportcard.com/report/github.com/operator-framework/operator-lifecycle-manager)\n[![Slack Channel](https://img.shields.io/badge/chat-4A154B?logo=slack\u0026logoColor=white \"Slack Channel\")](https://kubernetes.slack.com/archives/C0181L6JYQ2)\n\n---\n\u003e [!WARNING]  \n\u003e This repository is associated with **Operator Lifecycle Manager** version 0 (v0) which is in maintenance mode. The community is excited to be working on a new design (v1) which intends to overcome a number of limitations of the v0 architecture, the primary repository for which is [operator controller](https://www.github.com/operator-framework/operator-controller).  \n\nIn maintenance mode, we have the following changes to support expectations:\n1. We will accept no new features.\n2. We will accept no non-critical outage issues, defined here as a cluster-wide outage with no workaround.\n3. We will close backlog issues which do not meet the above criteria.\n4. We will continue to update the project to address emergent vulnerabilities on a best-effort basis.\n\nIf you have any questions, please engage with us: [![Slack Channel](https://img.shields.io/badge/chat-4A154B?logo=slack\u0026logoColor=white \"Slack Channel\")](https://kubernetes.slack.com/archives/C0181L6JYQ2)\n\n---\n\n## Documentation\n\nUser documentation can be found on the [OLM website][olm-docs].\n\n## Overview\n\nThis project is a component of the [Operator Framework](https://github.com/operator-framework), an open source toolkit to manage Kubernetes native applications, called Operators, in an effective, automated, and scalable way. Read more in the [introduction blog post](https://operatorhub.io/what-is-an-operator) and learn about practical use cases at the [OLM website][olm-docs].\n\nOLM extends Kubernetes to provide a declarative way to install, manage, and upgrade Operators and their dependencies in a cluster. It provides the following features:\n\n### Over-the-Air Updates and Catalogs\n\nKubernetes clusters are being kept up to date using elaborate update mechanisms today, more often automatically and in the background. Operators, being cluster extensions, should follow that. OLM has a concept of catalogs from which Operators are available to install and being kept up to date. In this model OLM allows maintainers granular authoring of the update path and gives commercial vendors a flexible publishing mechanism using channels.\n\n### Dependency Model\n\nWith OLMs packaging format Operators can express dependencies on the platform and on other Operators. They can rely on OLM to respect these requirements as long as the cluster is up. In this way, OLMs dependency model ensures Operators stay working during their long lifecycle across multiple updates of the platform or other Operators.\n\n### Discoverability\n\nOLM advertises installed Operators and their services into the namespaces of tenants. They can discover which managed services are available and which Operator provides them. Administrators can rely on catalog content projected into a cluster, enabling discovery of Operators available to install.\n\n### Cluster Stability\n\nOperators must claim ownership of their APIs. OLM will prevent conflicting Operators owning the same APIs being installed, ensuring cluster stability.\n\n### Declarative UI controls\n\nOperators can behave like managed service providers. Their user interface on the command line are APIs. For graphical consoles OLM annotates those APIs with descriptors that drive the creation of rich interfaces and forms for users to interact with the Operator in a natural, cloud-like way.\n\n## Prerequisites\n\n- [git][git_tool]\n- [go][go_tool] version v1.12+.\n- [docker][docker_tool] version 17.03+.\n  - Alternatively [podman][podman_tool] `v1.2.0+` or [buildah][buildah_tool] `v1.7+`\n- [kubectl][kubectl_tool] version v1.11.3+.\n- Access to a Kubernetes v1.11.3+ cluster.\n\n## Getting Started\n\nCheck out the [Getting Started][olm-getting-started] section in the docs.\n\n### Installation\n\nInstall OLM on a Kubernetes cluster by following the [installation guide][installation-guide].\n\nFor a complete end-to-end example of how OLM fits into the Operator Framework, see the [Operator Framework website](https://operatorframework.io/about/) and the [Getting Started guide on OperatorHub.io](https://operatorhub.io/getting-started).\n\n## Contributing your Operator\n\nHave an awesome Operator you want to share? Checkout the [publishing docs](https://operatorhub.io/contribute) to learn about contributing to [OperatorHub.io](https://operatorhub.io/).\n\n## Subscribe to a Package and Channel\n\nCloud Services can be installed from the catalog by subscribing to a channel in the corresponding package.\n\n## Kubernetes-native Applications\n\nAn Operator is an application-specific controller that extends the Kubernetes API to create, configure, manage, and operate instances of complex applications on behalf of a user.\n\nOLM requires that applications be managed by an operator, but that doesn't mean that each application must write one from scratch. Depending on the level of control required you may:\n\n- Package up an existing set of resources for OLM with [helm-app-operator-kit](https://github.com/operator-framework/helm-app-operator-kit) without writing a single line of go.\n- Use the [operator-sdk](https://github.com/operator-framework/operator-sdk) to quickly build an operator from scratch.\n\nThe primary vehicle for describing operator requirements with OLM is a [`ClusterServiceVersion`](https://github.com/operator-framework/operator-lifecycle-manager/blob/master/doc/design/building-your-csv.md). Once you have an application packaged for OLM, you can deploy it with OLM by creating its `ClusterServiceVersion` in a namespace with a supporting [`OperatorGroup`](https://github.com/operator-framework/operator-lifecycle-manager/blob/master/doc/design/operatorgroups.md).\n\nClusterServiceVersions can be collected into `CatalogSource`s which will allow automated installation and dependency resolution via an `InstallPlan`, and can be kept up-to-date with a `Subscription`.\n\nLearn more about the components used by OLM by reading about the [architecture] and [philosophy].\n\n# Key Concepts\n\n## CustomResourceDefinitions\n\nOLM standardizes interactions with operators by requiring that the interface to an operator be via the Kubernetes API. Because we expect users to define the interfaces to their applications, OLM currently uses CRDs to define the Kubernetes API interactions.\n\nExamples: [EtcdCluster CRD](https://github.com/redhat-openshift-ecosystem/community-operators-prod/blob/main/operators/etcd/0.9.4/manifests/etcdclusters.etcd.database.coreos.com.crd.yaml),\n[EtcdBackup CRD](https://github.com/redhat-openshift-ecosystem/community-operators-prod/blob/main/operators/etcd/0.9.4/manifests/etcdbackups.etcd.database.coreos.com.crd.yaml)\n\n## Descriptors\n\nOLM introduces the notion of “descriptors” of both `spec` and `status` fields in kubernetes API responses. Descriptors are intended to indicate various properties of a field in order to make decisions about their content. For example, this can drive connecting two operators together (e.g. connecting the connection string from a mysql instance to a consuming application) and be used to drive rich interactions in a UI.\n\n[See an example of a ClusterServiceVersion with descriptors](https://github.com/redhat-openshift-ecosystem/community-operators-prod/blob/main/operators/etcd/0.9.2/etcdoperator.v0.9.2.clusterserviceversion.yaml)\n\n## Dependency Resolution\n\nTo minimize the effort required to run an application on kubernetes, OLM handles dependency discovery and resolution of applications running on OLM.\n\nThis is achieved through additional metadata on the application definition. Each operator must define:\n\n- The CRDs that it is responsible for managing.\n  - e.g., the etcd operator manages `EtcdCluster`.\n- The CRDs that it depends on.\n  - e.g., the vault operator depends on `EtcdCluster`, because Vault is backed by etcd.\n\nBasic dependency resolution is then possible by finding, for each “required” CRD, the corresponding operator that manages it and installing it as well. Dependency resolution can be further constrained by the way a user interacts with catalogs.\n\n### Granularity\n\nDependency resolution is driven through the `(Group, Version, Kind)` of CRDs. This means that no updates can occur to a given CRD (of a particular Group, Version, Kind) unless they are completely backward compatible.\n\nThere is no way to express a dependency on a particular version of an operator (e.g. `etcd-operator v0.9.0`) or application instance (e.g. `etcd v3.2.1`). This encourages application authors to depend on the interface and not the implementation.\n\n## Discovery, Catalogs, and Automated Upgrades\n\nOLM has the concept of catalogs, which are repositories of application definitions and CRDs.\n\nCatalogs contain a set of Packages, which map “channels” to a particular application definition. Channels allow package authors to write different upgrade paths for different users (e.g. alpha vs. stable).\n\nExample: [etcd package](https://github.com/redhat-openshift-ecosystem/community-operators-prod/blob/main/operators/etcd/etcd.package.yaml)\n\nUsers can subscribe to channels and have their operators automatically updated when new versions are released.\n\nHere's an example of a subscription:\n\n```yaml\napiVersion: operators.coreos.com/v1alpha1\nkind: Subscription\nmetadata:\n  name: etcd\n  namespace: olm\nspec:\n  channel: singlenamespace-alpha\n  name: etcd\n  source: operatorhubio-catalog\n  sourceNamespace: olm\n```\n\nThis will keep the etcd `ClusterServiceVersion` up to date as new versions become available in the catalog.\n\nCatalogs are served internally over a grpc interface to OLM from [operator-registry](https://github.com/operator-framework/operator-registry) pods.  Catalog data such as `bundles` are documented [there](https://github.com/operator-framework/operator-registry#manifest-format) as well.\n\n## Samples\n\nTo explore any operator samples using the OLM, see the [https://operatorhub.io/](https://operatorhub.io/) and its resources in [Community Operators](https://github.com/k8s-operatorhub/community-operators/tree/main/operators).\n\n## Community and how to get involved\n\n- [Operator framework community][operator-framework-community]\n- [Communication channels][operator-framework-communication]\n- [Project meetings][operator-framework-meetings]\n\n## Contributing\n\nCheck out the [contributor documentation][contributor-documentation]. Also, see the [proposal docs][proposals_docs] and issues for ongoing or planned work.\n\n## Reporting bugs\n\nSee [reporting bugs][bug_guide] for details about reporting any issues.\n\n## Reporting flaky tests\n\nSee [reporting flaky tests][flaky_test_guide] for details about reporting flaky tests.\n\n## License\n\nOperator Lifecycle Manager is under Apache 2.0 license. See the [LICENSE][license_file] file for details.\n\n[architecture]: /doc/design/architecture.md\n[philosophy]: /doc/design/philosophy.md\n[proposals_docs]: ./doc/contributors/design-proposals\n[license_file]:./LICENSE\n[bug_guide]:./doc/dev/reporting_bugs.md\n[flaky_test_guide]:./doc/dev/reporting_flakes.md\n[git_tool]:https://git-scm.com/downloads\n[go_tool]:https://golang.org/dl/\n[docker_tool]:https://docs.docker.com/install/\n[podman_tool]:https://github.com/containers/libpod/blob/master/install.md\n[buildah_tool]:https://github.com/containers/buildah/blob/master/install.md\n[kubectl_tool]:https://kubernetes.io/docs/tasks/tools/install-kubectl/\n[olm-docs]: https://olm.operatorframework.io/\n[operator-framework-community]: https://github.com/operator-framework/community\n[operator-framework-communication]: https://github.com/operator-framework/community#get-involved\n[operator-framework-meetings]: https://github.com/operator-framework/community#meetings\n[contributor-documentation]: ./CONTRIBUTING.md\n[olm-getting-started]: https://olm.operatorframework.io/docs/getting-started/\n[installation-guide]: doc/install/install.md\n","funding_links":[],"categories":["Go","kubernetes","HarmonyOS","Kubernetes Operators"],"sub_categories":["Windows Manager"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Foperator-framework%2Foperator-lifecycle-manager","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Foperator-framework%2Foperator-lifecycle-manager","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Foperator-framework%2Foperator-lifecycle-manager/lists"}