Business logic implementing control loop within cluster
Move Kubernetes cluster from current state closer to desired state
Often send messages to API server to update state
e.g. Job controller schedules Pod to be run via API. Pod then becomes desired state for other components in the control plane. When Pod completed, Job controller updates Job object to “Finished”
Can also update external resources—e.g. to increase the number of nodes in the cluster
Built-in controllers (e.g. Deployment, Job) run on control plane—resilient
Can extend Kubernetes by running custom controllers outside of control plane—e.g. as a set of Pods or externally to Kubernetes