Introduction to Basic Concept of Kubernetes
What is Kubernetes?
Kubernetes is an open-source platform/tool created by Google. It is written in GO-Lang. So currently Kubernetes is an open-source project under Apache 2.0 license. Sometimes in the industry, Kubernetes is also known as “K8s”. With Kubernetes, you can run any Linux container across private, public, and hybrid cloud environments. Kubernetes provides some edge functions, such as Loadbalancer, Service discovery, and Roled Based Access Control(RBAC).
Why we need Kubernetes?
The answer is to help us manage containers. When we run our production environments using a microservice pattern with many containers, we need to make sure many things. Such as health check, version control, scaling, and rollback mechanism. It will be very frustrating to make sure all of these things still be ok. Kubernetes gives you the orchestration and management capabilities required to deploy containers, at scale. Kubernetes orchestration allows you to build application services that span multiple containers, schedule those containers across a cluster, scale those containers, and manage the health of those containers over time. In nutshell, I can say Kubernetes is more like a manager that has many subordinates(containers). What manager does is maintain what subordinates need to do.
Before used Kubernetes, you need to prepare your infrastructure to deploy a new microservice. I believe it cost you a few days or weeks. Without Kubernetes, large teams would have to manually script the deployment workflows. With Kubernetes, you don’t need to create your deployment script manually and it will reduce the amount of time and resources spent on DevOps.
Key feature of Kubernetes:
· Canary Deployment
How Kubernetes Works?
When you start the Kubernetes by reading the official documentation, you might be overwhelmed to encounter a lot of terminologies. Sometimes we need the overview to get a better understanding of the concept. Here I show you the complete overview diagram of Kubernetes Architecture. I hope this helps.
The sequence of deployment:
DevOps -> API Server -> Scheduler -> Cluster ->Nodes -> Kubelet -> Container Engine -> Spawn Container in Pod
The sequence of App user request:
App user -> Kube proxy -> Pod -> Container (Your app is run here)
Master is the controlling element of the cluster. Master has 3 parts:
· API Server: The application that serves Kubernetes functionality through a RESTful interface and stores the state of the cluster.
· Scheduler: Scheduler watches API server for new Pod requests. It communicates with Nodes to create new pods and to assign work to nodes while allocating resources or imposing constraints.
· Controller Manager: Component on the master that runs controllers. Includes Node controller, Endpoint Controller, Namespace Controller, etc.
Slave(Nodes) / Worker Node
These machines perform the requested, assigned tasks. The Kubernetes master controls them. There 4 component inside Nodes:
· Pod: All containers will run in a pod. Pods abstract the network and storage away from the underlying containers. Your app will run here.
· Kubelet: Kubectl registering the nodes with the cluster, watches for work assignments from the scheduler, instantiate new Pods, report back to the master.
· Container Engine: Responsible for managing containers, image pulling, stopping the container, starting the container, destroying the container, etc.
· Kube Proxy: Responsible for forwarding app user requests to the right pod.