Ville is a wizard-level Kubernetes certified developer who mostly does his magic from the wilderness of Kontiolahti
30 Jan 2019 - by Ville Pouhula
Everybody seems to be buzzing about Kubernetes. Sure you have heard about it, but have you already fallen in love with it as I have?
This post is part one of a three article series on Kubernetes. After reading all three parts you should know how to setup a Kubernetes cluster and run your application on it. This first article is a short introduction to Kubernetes, or k8s as it is commonly called, where I also tell you why I am so in love with it.
Treating your servers more as cattle than pets has become more popular during the last years. In the past an autoscaling infrastructure was something only the bigger players could afford. With the advancement of cluster management software this has become a more mainstream option for anybody with three or more servers or a bit more complicated microservice setup.
On the software front the past few years have been a race to the top as developers have had their pick from various cluster management tools such as Docker Swarm, OpenShift and Kubernetes. Finally it seems that k8s won and has been adopted by many of the the other players. This is a good signal on the maturity of the software and an excellent time to put it into use.
Shortly put, k8s is an orchestration tool for running containers in production. It was originally created by Google in the 2014 but nowadays it is open source and maintained by Cloud Native Computing Foundation.
Today, Kubernetes is the de-facto system for managing containerized applications. You can run k8s in various cloud providers’ fully hosted services, cloud computers, bare metal or even in your own laptop.
Kubernetes architecture has some basic components. Firstly, there must be at least two machines which are the master node and worker node. There can be multiple worker nodes, but only one master node. Nodes can be virtual or physical machines, depending on your setup and cloud provider. Each node has different services running: master has its own and worker nodes have their own. Every node needs a container runtime (usually Docker), a kubelet and a kube-proxy. Kubelet is agent which makes sure that containers are running in pods. Kube-proxy maintains networking between pods.
Master node is the part which manages everything in the cluster. There is a kube-apiserver for exposing Kubernetes API. This is the frontend for running actions. Etcd is a key-value store and responsible for storing all the cluster data and state. Kube-scheduler watches all newly created pods and assigns a worker node for them. There are also kube-controller-manager and cloud-controller-manager.
Every different part running in the k8s cluster is called Kubernetes Object. Objects are usually described with .yaml files and given to Kubernetes API. That is how k8s can go towards the desired state. There are lots of different kinds of objects, but the most important are pods. Pods are the basic unit of Kubernetes, and contain one or more containers (usually one). There are also Deployments which consists of Pods and ReplicaSets.
As said, in past few years Kubernetes has become a de-facto standard for running containerized applications in the cloud. The main reasons why I (along with many others) am in love with k8s are:
relatively easy installation, at least if you choose to use it with a service provider,
rolling updates for running software, which means zero downtime when releasing a new version,
a huge community to ask for help in almost any topic.
There are a few turnkey solutions which you can install on top of a running k8s cluster to make them easier to manage: the most popular ones are Rancher 2.0, Kontena Pharaos and OpenShift Container Platform. All these platforms have previously used their own container management system but have shifted to use Kubernetes in the core of their systems.
If you are not familiar with Kubernetes or don´t think installing and maintaining Kubernetes cluster is your cup of tea, feel free to contact us. We at Montel Intergalactic are happy to help you out!
In next part of my three article series of Kubernetes I will dive deeper into kubernetes architecture as well as tell you how to setup k8s cluster with kubeadm-tool and how to use minikube in your local development environment.
Please fill in the contact form underneath or just get directly in contact with me. Talk to you soon!