Please visit my website and subscribe to my youtube channel for more articles
Thank you for Subscribing! If you have not, Subscribe now! DevOps4Solutions helps in providing end to end solution and…
Kubernetes is an open source container management tool. You can set up a Kubernetes cluster on a Linux-based OS to deploy, manage, and scale Docker container applications on multiple hosts.
Kubernetes is made up of the following components:
- Kubernetes master
- Kubernetes nodes
- Kubernetes network
These components are connected via a network, as shown in the following diagram:
- Kubernetes master: It connects to etcd via HTTP or HTTPS to store the data
- Kubernetes nodes: It connect to the Kubernetes master via HTTP or HTTPS to get a command and report the status
- Kubernetes network: It L2, L3 or overlay make a connection of their container applications
The Kubernetes master is the main component of the Kubernetes cluster. It serves several functionalities, such as the following:
- Authorization and authentication
- RESTful API entry point
- Container deployment scheduler to Kubernetes nodes
- Scaling and replicating controllers
- Reading the configuration to set up a cluster
API server (kube-apiserver)
The API server provides an HTTP- or HTTPS-based RESTful API, which is the hub between Kubernetes components, such as kubectl, the scheduler, the replication controller, the etcd data store, the kubelet and kube-proxy, which runs on Kubernetes nodes, and so on.
The scheduler helps to choose which container runs on which nodes. It is a simple algorithm that defines the priority for dispatching and binding containers to nodes. For example:
- How many containers are running?
Controller manager (kube-controller-manager)
The controller manager performs cluster operations. For example:
- Manages Kubernetes nodes
- Creates and updates the Kubernetes internal information
- Attempts to change the current status to the desired status
Command-line interface (kubectl)
After you install the Kubernetes master, you can use the Kubernetes command-line interface, kubectl, to control the Kubernetes cluster.
//see the nodes
# kubectl get nodes
NAME LABELS STATUS AGE
kub-node1 kubernetes.io/hostname=kub-node1 Ready 26d
kub-node2 kubernetes.io/hostname=kub-node2 Ready 26d
The Kubernetes node is a slave node in the Kubernetes cluster. It is controlled by the Kubernetes master to run container applications using Docker.
The following diagram displays the role and tasks of daemon processes in the node:
The node also has two daemon processes, named kubelet and kube-proxy, to support its functionalities.
kubelet is the main process on the Kubernetes node that communicates with the Kubernetes master to handle the following operations:
- Periodically accesses the API controller to check and report
- Performs container operations
- Runs the HTTP server to provide simple APIs
The proxy handles the network proxy and load balancer for each container. It changes Linux iptables rules (nat table) to control TCP and UDP packets across the containers.
etcd is the distributed key-value data store. It can be accessed via the RESTful API to perform CRUD operations over the network. Kubernetes uses etcd as the main data store.
Network communication between containers is the most difficult part. Because Kubernetes manages multiple nodes (hosts) running several containers, those containers on different nodes may need to communicate with each other.
If the container’s network communication is only within a single node, you can use Docker network or Docker compose to discover the peer. However, along with multiple nodes, Kubernetes uses an overlay network or container network interface (CNI) to achieve multiple container communication.