<p>Can anyone explain in simple terms what is the difference between deploying Prometheus through Kubernetes operator and Prometheus helm chart or manifest file?
The question is not just pertaining to Prometheus alone but in general</p>

Hound
<p>In general Helm is like a <strong>package manager</strong> for kubernetes whereas operator is a <strong>controller</strong> which <strong>manages</strong> the life cycle of particular kubernetes resource(s).</p>
<p>Operator is a combination of &quot;Custom Resource&quot; and a &quot;Controller&quot; managing the custom resource. There are many native kubernetes resources like pods, deployments, statefulsets, services etc. Each of resources have a corresponding <strong>controller process running</strong> (currently inside the controller manager). When you create/modify instance of one of the native kubernetes resources using <code>kubectl apply</code> for example, the new/updated object will stored in etcd and api-server will notify the controller about change. The specification in etcd is called the desired state. The job of the controller is to identify the actual state of the cluster and to reconcile it with desired state.</p>
<p>Similar to native kubernetes resources, kubernetes also allows you to create new types of resources using &quot;Custom Resource Definitions&quot;. You can also write a controller whose job is to reconcile the your new custom resource. This is called an operator. Usually operators are written to manage the deployment, lifecycle of applications on kubernetes. So Prometheus guys have created a custom resource called <code>Prometheus</code> (using which you can express the desired state of a Prometheus cluster) and a controller which reconciles the desired state with actual state. This controller is called Prometheus operator.</p>
<p>Helm is <strong>package manager</strong> for kubernetes resources which are generally declared as yaml based manifests. Helm allows you to template these yaml manifests so that you can substitute different values for these templated snippets when deploying the resources in an actual cluster. You can <strong>deploy</strong> various kubernetes resources including all native resources like pods, services, deployments etc. Operators also run as pods on kubernetes cluster, so helm can be used to deploy operators as well.</p>
<p>You can read about custom resources and custom controllers here - <a href="https://kubernetes.io/docs/concepts/extend-kubernetes/api-extension/custom-resources/#custom-resources" rel="noreferrer">https://kubernetes.io/docs/concepts/extend-kubernetes/api-extension/custom-resources/#custom-resources</a></p>
