DEV Community

Ahmet Öz
Ahmet Öz

Posted on

k8s makes deployment easy

A couple of months ago I was trying to understand and describe the value of Kubernetes, starting to read about it and come off some notes as below, maybe it could be helpful for other developers to understand the value of it. For me, as described in the title I described it to my self as k8s makes the deployment easy.

"Kubernetes does the things that the very best system administrator would do: automation, failover, centralized logging, monitoring. It takes what we've learned in the DevOps community and makes it the default, out of the box."
@kelseyhightower

Docker makes the development easy, lets us build containers locally, push them to or pull them from a container registry, and run container images locally on our machine. Kubernetes makes deployment easy, lets us orchestrate clusters in a pragmatic way. Actually, after the adaption of tools like docker and k8s, there are no big distinctions as before between software engineers and operations engineers. It’s all just software now, and we’re all engineers. So those tools improve the quality of the processes, as said by Amazon CTO Werner Vogels, "You build it, you run it".

K8s cluster has a brain called control plane, it maintains all the tasks, scheduling containers, managing services, serving API requests, and so on for us, that part is running on master nodes, and other workloads of the cluster are running on worker nodes. For a typical production use case, k8s would need min 3 master nodes (virtual machines) to avoid the single point of failures, also most of the professionals suggest to not manage clusters manually (I guess here the reason is simple, cluster management is not an easy task which requires a significant investment of time, effort, and expertise and also it could not be cost-effective) instead suggest the usage of a managed services. Run less software philosophy could be a piece of good advice to consider before you decide to run Kubernetes on-premise. For learning/testing purposes we could use Docker Desktop which lets us run a small (single-node) Kubernetes cluster on our laptops.

Kubernetes control plane components working together as a state machine. K8s has a process called reconciliation loop trying to reconcile the actual state with the desired state. The desired state is stored in an internal database (etcd) as a specification/manifest file in k8s like deployment, and controller components of the application continually check the desired state for each K8s resource and make necessary adjustments to keep the state machine in sync with manifests. K8s scheduler on master node watches the unscheduled deployments (desired state) and schedules the node for the pod, after scheduling the kubelet process running on that node picks it up and takes care of actually starting its containers.

Top comments (0)