Kubernetes Architecture has the following main components:
- Master nodes
- Worker/Slave nodes
- Distributed key-value store(etcd.)
Master Node
It is the entry point for all administrative tasks which is responsible for managing the Kubernetes cluster. There can be more than one master node in the cluster to check for fault tolerance. More than one master node puts the system in a High Availability mode, in which one of them will be the main node which we perform all the tasks.
For managing the cluster state, it uses etcd in which all the master nodes connect to it.
Let us discuss the components of a master node. As you can see in the diagram it consists of 4 components:
API server:
- Performs all the administrative tasks through the API server within the master node.
- In this REST commands are sent to the API server which validates and processes the requests.
- After requesting, the resulting state of the cluster is stored in the distributed key-value store.
Scheduler:
- The scheduler schedules the tasks to slave nodes. It stores the resource usage information for each slave node.
- It schedules the work in the form of Pods and Services.
- Before scheduling the task, the scheduler also takes into account the quality of the service requirements, data locality, affinity, anti-affinity, etc.
Controller manager:
- Also known as controllers.
- It is a daemon which regulates the Kubernetes cluster which manages the different non-terminating control loops.
- It also performs lifecycle functions such as namespace creation and lifecycle, event garbage collection, terminated-pod garbage collection, cascading-deletion garbage collection, node garbage collection, etc.
- Basically, a controller watches the desired state of the objects it manages and watches their current state through the API server. If the current state of the objects it manages does not meet the desired state, then the control loop takes corrective steps to make sure that the current state is the same as the desired state.
What is the ETCD?
- etcd is a distributed key-value store which stores the cluster state.
- It can be part of the Kubernetes Master, or, it can be configured externally.
- etcd is written in the Go programming language. In Kubernetes, besides storing the cluster state (based on the Raft Consensus Algorithm) it is also used to store configuration details such as subnets, ConfigMaps, Secrets, etc.
- A raft is a consensus algorithm designed as an alternative to Paxos. The Consensus problem involves multiple servers agreeing on values; a common problem that arises in the context of replicated state machines. Raft defines three different roles (Leader, Follower, and Candidate) and achieves consensus via an elected leader
Now you have understood the functioning of Master node. Let’s see what is the Worker/Minions node and its components.
Worker Node (formerly minions)
It is a physical server or you can say a VM which runs the applications using Pods (a pod scheduling unit) which is controlled by the master node. On a physical server (worker/slave node), pods are scheduled. For accessing the applications from the external world, we connect to nodes.
Let’s see what are the following components:
Container runtime:
- To run and manage a container’s lifecycle, we need a container runtime on the worker node. Some examples of container runtimes are:
- Sometimes, Docker is also referred to as a container runtime, but to be precise, Docker is a platform which uses containers as a container runtime.
Kubelet:
- It is an agent which communicates with the Master node and executes on nodes or the worker nodes. It gets the Pod specifications through the API server and executes the containers associated with the Pod and ensures that the containers described in those Pod are running and healthy.
- The kubelet connects to the container runtime using Container Runtime Interface (CRI). The Container Runtime Interface consists of protocol buffers, gRPC API, and libraries.
Kube-proxy:
- It is the network proxy which runs on each worker node and listens to the API server for each Service endpoint creation/deletion.
- For each Service endpoint, kube-proxy sets up the routes so that it can reach to it.
So, that’s the Kubernetes architecture in a simple fashion