<p>As I understand the purpose of the <em>Kubernetes Controller</em> is to make sure that current state is equal to the desired state. Nevertheless, <em>Kubernetes Operator</em> does the same job.</p>
<p>The list of controller in the <em>Control-Plane</em>:</p>
<ul>
<li>Deployment</li>
<li>ReplicaSet</li>
<li>StatefulSet</li>
<li>DaemonSet</li>
<li>etc</li>
</ul>
<p>From the Google Search, I found out that there are <em>K8s Operators</em> such as</p>
<ul>
<li>etcd Operator</li>
<li>Prometheus Operator</li>
<li>kong Operators</li>
</ul>
<p>However, I was not able to understand why it cannot be done using Controller?</p>
<p>Is Operator complementing the Controllers?</p>
<p>What's the difference between these two design as a purpose and functionality.</p>
<p>What certain things need to keep in mind to choose between Controller and Operator? ?</p>

<p>I believe the term &quot;kubernetes operator&quot; was introduced by <a href="https://coreos.com/operators/" rel="noreferrer">the CoreOS people here</a></p>
<blockquote>
<p>An Operator is an application-specific controller that extends the Kubernetes API to create, configure and manage instances of complex stateful applications on behalf of a Kubernetes user. It builds upon the basic Kubernetes resource and controller concepts, but also includes domain or application-specific knowledge to automate common tasks better managed by computers.</p>
</blockquote>
<p>So basically, a kubernetes operator is the name of a pattern that consists of a kubernetes controller that adds new objects to the Kubernetes API, in order to configure and manage an application, such as Prometheus or etcd.</p>
<p>In one sentence: An operator is a domain specific controller.</p>
<h2>Update</h2>
<p>There is <a href="https://github.com/tensorflow/k8s/issues/300" rel="noreferrer">a new discussion on Github</a> about this very same topic, linking to the same blog post. Relevant bits of the discussion are:</p>
<blockquote>
<p>All Operators use the controller pattern, but not all controllers are Operators. It's only an Operator if it's got: controller pattern + API extension + single-app focus.</p>
<p>Operator is a customized controller implemented with CRD. It follows the same pattern as built-in controllers (i.e. watch, diff, action).</p>
</blockquote>
<h2>Update 2</h2>
<p>I found <a href="https://octetz.com/posts/k8s-controllers-vs-operators" rel="noreferrer">a new blog post</a> that tries to explain the difference as well.</p>
