Kubernetes follows a client–server architecture consisting of a control plane (master) and worker nodes. The control plane includes components such as the API Server, Scheduler, Controller Manager, and etcd for cluster state storage.

Worker nodes run application workloads and include kubelet for communication with the control plane, kube-proxy for networking, and a container runtime (such as containerd or Docker) to manage containers.
Control Plane Components
It is basically a collection of various components that help us in managing the overall health of a cluster. For example, if you want to set up new pods, destroy pods, scale pods, etc. Basically, 4 services run on the Control Plane:
1. Kube-API server
The API server is a component of the Kubernetes control plane that exposes the Kubernetes API. It is like an initial gateway to the cluster that listens to updates or queries via CLI like Kubectl.
- Kubectl communicates with API Server to inform what needs to be done like creating pods or deleting pods etc. It also works as a gatekeeper.
- It generally validates requests received and then forwards them to other processes.
- No request can be directly passed to the cluster, it has to be passed through the API Server.
2. Kube-Scheduler
- Watches for newly created Pods that have no assigned node.
- Selects the best Worker Node for a Pod based on resource requirements, policy constraints, and hardware/software limits.
3. Kube-Controller-Manager
- Runs controller processes that maintain the "desired state" of the cluster.
- Node Controller: Monitors node health.
- Replication Controller: Ensures the correct number of Pod replicas are running.
4. etcd
- A consistent, high-availability key-value store.
- Stores all cluster data (the "Source of Truth"). If it isn't in etcd, it doesn't exist in Kubernetes.
Worker Node Components
These are the nodes where the actual work happens. Each Node can have multiple pods and pods have containers running inside them. There are 3 processes in every Node that are used to Schedule and manage those pods. The following are the some of the components related to Node:
1. Container runtime
- The software responsible for actually running the containers (e.g., containerd, CRI-O).
- It pulls images from a registry and starts/stops the containers.
2. kubelet
- An agent that runs on each node in the cluster.
- Ensures that containers are running in a Pod by following instructions (PodSpecs) from the Control Plane.
- Reports the health and status of the node back to the API server.
3. kube-proxy
- A network proxy that maintains network rules on nodes.
- Allows network communication to your Pods from inside or outside of the cluster.
- Handles service discovery and load balancing.
Addons Plug-in
Kubernetes add-ons are plug-ins that enhance the cluster's functionality, often installed as Kubernetes resources like DaemonSets, Deployments, and more. These add-ons are typically deployed within the kube-system namespace, providing cluster-level capabilities and extending the native features of Kubernetes.
- CoreDNS: A flexible, extensible DNS server that provides name resolution services for Kubernetes clusters, ensuring efficient service discovery and network routing.
- KubeVirt: Allows the running of virtual machines alongside containers, providing a unified management platform for both VMs and containerized applications.
- ACI (Application Containerization Interface): Facilitates the integration and management of containers across different environments, improving the portability and scalability of applications.
- Calico: A network policy engine that provides secure, high-performance networking for Kubernetes clusters, supporting both network policy enforcement and advanced routing capabilities.
Commands for Kubectl
Here are some common commands for interacting with a Kubernetes cluster:
To view a list of all the pods in the cluster, you can use the following command:
kubectl get pods
To view a list of all the nodes in the cluster, you can use the following command:
kubectl get nodes
To view a list of all the services in the cluster, you can use the following command:
kubectl get services