k8s controllers are control loops that watch over the current state of a cluster and request changes (or make them directly) based on a desired state, specified under the spec field of k8s objects. They are embedded into the kube-controller-manager as a single binary. A controller tracks at least one resource1 type.
Examples of such controllers are (the list is not exhaustive):
- Node Controller,
- Deployment Controller,
- Job Controller,
- ServiceAccount Controller
Built-in controllers, like the ones above, bring the cluster closer to the desired state via the kube-apiserver (don’t make changes directly).
Sources
- https://kubernetes.io/docs/concepts/architecture/controller/
- https://kubernetes.io/docs/concepts/architecture/controller/#controller-pattern