<p>What is the difference and benefit of the Operator Lifecycle Manager (OLM) vs Helm?</p>

<p>OLM - <a href="https://github.com/operator-framework/operator-lifecycle-manager" rel="nofollow noreferrer">https://github.com/operator-framework/operator-lifecycle-manager</a></p>

<p>Helm - <a href="https://helm.sh/" rel="nofollow noreferrer">https://helm.sh/</a></p>

<p>I understand that Helm is a general purpose package manager for Kubernetes where as OLM is specific to operators. But, Helm can be used to deploy operators. So, how is OLM different/better than Helm for operators?</p>

<p><strong>Helm</strong> provides the ability to install applications onto Kubernetes via Helm Charts, which themselves are a collection of templatized K8s manifests. It handles only the basic lifecycle of these applications (install/delete/rollback/upgrade) by rendering these templates and feeding them to the K8s API server.  Based on the version of Helm, there are limitations related to dependency management and which resources can be created in which namespaces.</p>
<p><strong>OLM</strong> (Operator Lifecycle Manager), as the previous user mentioned, is a declarative based system which is meant to support installation of Operators, which themselves are responsible for providing the logic and instructions to manage the lifecycle of an application (install/create/delete/upgrade). OLM is an opinionated approach to managing the lifecycle and packaging of these Operators.  There is also an SDK which help users create Operators from Helm/Ansible/Go to fit into this system.  It has various components which talk to each other through the K8s APIServer, heavily leveraging CRDs and custom resources to make this all happen.</p>
<p><strong>Benefits/differences:</strong></p>
<p>Both can be used to install/delete/rollback/upgrade an Operator, but OLM offers a model whereby you can craft various methods of deployment operations for your application deployment (think alpha vs stable) into different subscribable &quot;channels&quot;. As you update these the methods in these &quot;channels&quot;, those that are subscribed automatically gain the ability to upgrade/install a newer version according to these methods.  Dependencies in OLM are also handled in a different way, and you can have a chain of dependent Operators installed, in order, in various namespaces. Helm is a bit more restricted in this regard.</p>
<p>Lastly OLM make the assumption that your container images are publicly reachable and their use in manifests are built into containers (CatalogSource, Operators, etc), whereas Helm charts much more easily modifiable using various Helm based CLI commands (or 3rd party tools) to override template values before creation.</p>
