Skip to main content
Confusion often comes from two engineers using different words for what looks like the same thing: One says, “We need a controller.”
Another replies, “We need an operator.”
Both can be partly correct, but the distinction matters before you design or build anything. This guide explains what a controller does, how an operator extends that mechanism, and when to choose one over the other. Think of a controller like a home thermostat. You set a desired temperature, the thermostat reads the actual room temperature, and it kicks on the A/C to close the gap.
The image compares a desired temperature of 21°C with an actual temperature of 25°C, indicating that it is "Too warm."
At its core, a Kubernetes controller implements an observe-and-fix loop: it constantly watches a resource, compares the actual cluster state to the desired state expressed in YAML, and acts when they don’t match.
The image depicts a circular loop labeled "The Same Loop, in Kubernetes," with three stages: "Observe" (Read the resource), "Compare" (Desired vs actual), and "Act" (Fix the gap).
Example: the built-in Deployment controller inspects the desired replica count in a Deployment and makes sure that exact number of Pods exist. These built-in controllers are intentionally generic: they need not understand whether your workload is a distributed database or a static website. Their job is to reconcile state (e.g., replica count, pod status, etc.) until actual state matches desired state.
The image illustrates the concept of a built-in deployment controller, showing a process from a desired state of 3 replicas to the creation of 3 actual pods.
An operator uses the same controller mechanism but adds application-specific domain knowledge. For example, cert-manager understands X.509 certificates: you create a Certificate custom resource, and cert-manager’s controller knows how to request a certificate from a CA, renew it before expiry, and store it in a Secret. For an application operator, the domain knowledge includes the application’s topology, lifecycle rules, and recovery procedures. A user might declare a custom resource like this:
The operator’s controller translates that WebApp CR into the appropriate Kubernetes resources (Deployment, Service, ConfigMap, etc.) and manages them according to the application’s rules: upgrades, backups, scaling semantics, and failure recovery.
The image explains that an "Operator" is the combination of a "Controller" and "Application knowledge," using a cert-manager to manage certificates through requesting, renewing, and storing processes.
Quick rule:
  • A controller is the mechanism — the reconcile loop that observes, compares, and acts.
  • An operator is a controller that embodies domain or application knowledge, typically exposing that knowledge via a Custom Resource Definition (CRD).
Therefore: every operator is a controller, but not every controller is an operator.
Summary: Controllers provide the generic reconcile loop. Operators add domain-specific logic and APIs (CRDs) to manage complex application lifecycle and behavior.
Quick comparison References and further reading The two main pieces that make an operator are the controller (the reconcile logic) and the custom resource (the API surface provided by a CRD).

Watch Video