These higher-level Objects are ran and managed by Controllers, which actually perform the actions that manipulate the Objects.
For example, when we create a Deployment, a Deployment controller manages the Pods and ReplicaSet specified from the configuration. It is the controller who is responsible for making changes to get the actual state to the desired state.
Most Objects have a corresponding Controller—a ReplicaSet object is managed by a ReplicaSet controller, a DaemonSet is managed by the DaemonSet controller, and so on.
Apart from these, there are numerous other Controllers, with the most common ones listed as follows:
- Node Controller: Responsible for noticing and responding when nodes go down
- Replication Controller: Responsible for maintaining the correct number of pods for every replication controller object in the system
- Route Controller
- Volume Controller
- Service Controller: Works on the load balancer and direct requests to the corresponding Pods
- Endpoints Controller: Populates the Endpoints object that links Service Objects and Pods
- Service Account and Token Controllers: Creates default accounts and API access tokens for new namespaces
These higher-level objects, and the Controllers that implements them, manage basic Objects on your behalf, providing additional conveniences that you'd come to expect when working with Cluster Management Tools. We will demonstrate the use of these Objects as we migrate our application to run on Kubernetes later in this chapter.