Controllers
- watch the resources.
- reconcile the actual state and desired state.
Deployment
- Supervise and schedule programs.
- has
- the name of the container image,
- the number of replicas
- and whatever else to start the container.
- creates an associated object ReplicaSet.
$ kubectl get deploy
$ kubectl describe deploy xyz
Pods
- represents a group of one or more containers.
- schedules a set of containers together, running on the same node, and communicating locally.
ReplicaSets
-
manages a group of identical pods, or replicas.
-
starts containers if the specified replica not met.
-
restarts containers if crashed.
-
Deployment creates ReplicaSets.
-
ReplicaSet create Pods.

Scheduler
The Kubernetes scheduler watches for a Pod that isn’t yet running on any node, finds a suitable node for it, and instructs the kubelet on that node to run the Pod.
How does the Kubernetes scheduler work?
Services

- provides a single, unchanging IP address or DNS name for Pods.
- defines a list of ports, plus a selector and a type. Requests will be forwarded to any Pods matching the specified set of labels.
- Resources like Deployments are represented by records in Kubernetes’s internal database. Externally, these resources can be represented by text files (known as manifests) in YAML format. The manifest is a declaration of the desired state of the resource.
- kubectl is the main tool for interacting with Kubernetes, allowing you to apply manifests, query resources, make changes, delete resources, and do many other tasks.