[Master Node - Control Plane]
It also known as master node OR head node.
It manages the worker nodes in the cluster.
● API Server
It is the Gatekeeper of the cluster by providing Authentication, Authorization, Validation of all requests to perform CRUD (create, read, update, delete) functions in the cluster.
It responds to requests from the worker nodes.
● ETCD
Kubernetes uses etcd as its database to store all cluster data.
It uses key-value pairs to store cluster data.
The data stored in this is as key-value pair.
ETCD Storage is a key-value data store that can be accessed by all nodes in the cluster. 
It stores configuration data about the cluster’s state.
It stores information about the state of the Cluster, the information Nodes and every other resources created with in the cluster.
● Controller Manager
Node Controllers : It is responsible for noticing and responding when nodes go down.
Replication Controllers : It maintains the number of pods. 
                          It controls how many identical copies of a pod should be running somewhere on the cluster.
Endpoint Controllers : Joins services and pods together.
Replicaset Controllers : Ensure number of replication of pods always running.
Daemonsets Controllers : Ensure all nodes run a copy of specific pods.
● Scheduler
It monitors resource utilization across the cluster and schedules pods of containers accordingly.
It assigns pods to worker nodes based on criteria such as nodeName, nodeSelector, affinity and anti-affinity, taints and tolerations.

[Worker Node]
Also known as worker node or compute node.
Kubernetes cluster needs at least one worker node, but normally have many.
It can scale up and scale down cluster by adding and removing nodes.
● Kubelet
It maintain to register the node with the cluster.
Kubelet is the primary node agent runs on all nodes and reads the container manifests which ensures that containers are running and healthy.
It will send periodic health check so that the API server know that compute nodes (worker nodes) are healthy.
It will also create and destroy workloads as directed by Kube API server.
It makes sure that containers are running in a pod.
It doesn't manage containers which were not created by Kubernetes.
● Kube Proxy
kube-proxy maintains network rules on nodes. 
These network rules allow network communication to Pods from inside or outside of cluster.
Communication within cluster taken care by kube-proxy.
It is responsible for communication between master node and worker nodes.
● Container Runtime Interface (CRI)
Each node must have a container runtime, such as Docker, rkt, or another container runtime to process instructions from the master server to run containers.
