Content Oriented Web
Contact info
Apply for two complimentary expert hours
Get two complimentary hours of DevOps expertise
Make one more step towards digital transformation
What Is Kubernetes and How to Use It?
20.08.2020
Complete Guide to Kubernetes
Complete Guide to Kubernetes
It has been more than six years since Google open-sourced Kubernetes, and to this day it has maintained its status as one of the top orchestration tools. How? This complete Kubernetes guide will answer a lot of questions: what business concerns does k8s solve, what components does it consist of, how to use Kubernetes, and, most importantly, how to deploy a Kubernetes cluster? So, let's dig into a short history on how businesses used to manage application deployment.
Through the History to Containerization
Check out the table below to see why Kubernetes became so usefull.
History of appplication deployment
As you see in the picture above, early on, organizations ran applications on physical servers with an installed operating system on top of them. Defining resource boundaries became an issue as it was just impossible to do it. Thus, the resource allocation issue came up. Simply put, when one server ran several applications and took most of the resources, the other would underperform. Logically, a perfect solution would be running apps on separate servers. However, organizations would have to pay multiple times more. Not only is this costly, but also it would take a lot of room to keep all those servers. Well, this is what they call — a traditional deployment.

Then, virtualization came to the rescue. The solution offered to run Virtual Machines on the server's CPU. VMs are complete machines that run all components of applications and their operating system on top of the hardware (see picture above). This solved the resource allocation issue since organizations could deploy multiple applications on one server while still keeping them in isolated environments so that the resources spread out.

Virtualization allowed businesses to add, update, and scale applications without paying for extra servers.

Once the resources allocation issue was fixed, another solution came along — containerization. Being very similar to virtualization, it addressed several issues: application manageability, scalability, and fault-tolerance. Isolating application components made them lightweight, portable between clouds, and increased application manageability.

Kubernetes containers are isolated from the underlying infrastructure. This is why containerized applications are more secure and manageable. Unlike VMs, containers have their filesystem, CPU, memory, process space, etc. while sharing one operating system among applications (see picture above).

Now that you understand containerization, you are ready to find out what Kubernetes is and why it is used.
What is Kubernetes Used for?
Here you are — coming closer to what Kubernetes is and how to use it. First of all, you need to remember that Kubernetes is an orchestration tool, don't confuse it with Docker (see next chapter).

So, what is k8s? It's a machine that runs the container management for you. Isn't it liberating when a machine has your back when a container fails? This is exactly why we use Kubernetes — automatic scaling, failover, deployment patterns, canary and other zero-downtime deployments, and more.

Here is a short introduction to what Kubernetes orchestration opens the door to:

  • Load balancing
If a container is receiving high traffic, Kubernetes will start additional containers and balance the traffic among them so that the service is stable.

  • Storage management
With the Kubernetes platform, you aren't tied to the local storage but can use any network, cloud, or other storages. It gives you flexibility in managing storage with code and requesting the size you need for your application.

  • Rollback automation
You can set Kubernetes to control the result of deploying an application and automatically rollback to the previous version if anything goes wrong with a new one.

  • Self-healing
This feature is one of the most essential tricks that Kubernetes offers — when a container fails (we know it can happen at the most inconvenient time), k8s launches a new identical container, routes traffic to the new one, and kills the inactive container.

  • Configuration management
Kubernetes allows teams to store and manage passwords, OAuth tokens, and SSH key sensitive information that needs a secure management solution. You can also avoid exposing your secrets in your stack configuration when deploying or updating your application.
Difference Between Docker and Kubernetes
The best way to realize the difference is by understanding what Kubernetes and Docker are. This question is quite misleading as Kubernetes and Docker are not even direct competitors. Docker offers containerization, Kubernetes organizes those containers.

You might have heard the phrase 'to dockerize an application.' This means that you pack an application in separate images that are easier to manage and result in higher fault-tolerance. So, you docker your app, and then what? Then you have to orchestrate it somehow: schedule and operate your containers. For this, we have an orchestration platform — Kubernetes. With Docker and Kubernetes together, your infrastructure is easily manageable and highly fault-tolerant.

One extremely important reason why Kubernetes is a top orchestrator on the market is that k8s is continuously developing. The orchestration war was won when Docker adopted the Kubernetes platform and brought it into the fold. This made Kubernetes much easier to implement in the organization's infrastructure.

There is another question, though. How is Kubernetes different from Docker Swarm, which is a native clustering solution for Docker containers coordination. It productively integrates with Docker containers.

But there is also Kubernetes, developed by Google to simplify the workload using containers. It gives an ability to automate deployment, scheduling, and scaling. Kubernetes supports a lot of containerization tools, including Docker. Now it is open-source.

How different is Kubernetes from Docker Swarm?

  1. Setup and configuration. Kubernetes is quite easy to set up. However, you will have to learn specific commands to use them in case you decide to scale. You need to know how to set up a Kubernetes cluster, define an environment, create a dashboard, host the cluster, etc. When it comes to Docker Swarm, it is already functioning on your Docker CLI. So, you only need to know one tool to set up and configure environments.

  2. Building and running containers. Kubernetes uses its API, client, and YAML, so it's not possible to use Docker Compose and Docker CLI to define containers. Swarm can be challenging to work with when container configuration is limited — even though it has the same API.

  3. Logging and Monitoring. Kubernetes has multiple integrated third party tools that can be used to spin up monitoring and logging. Docker Swarm has such integrations too, however, because of the community size they are less tested and functional.

  4. Scalability. Even though scalability in Kubernetes is a bit slower than the one in Docker Swarm due to its complexity, it is still way ahead Swarm thanks to its ability to analyze the server load and scale up and down according to the user's requirements.

  5. GUI. This point is absolutely FOR Kubernetes as it offers quite a reliable dashboard making the cluster control effortless. To do this with Docker Swarm, you will need to involve a third-party tool, e.g., Portainer.io.

As every IT infrastructure is different and every company has its own business needs, why bother trying to figure it out? OpsWorks Co.' DevOps engineers can analyze your system and develop the most beneficial DevOps solution for your business!

If you are integrating k8s with your resources, you'll need to know what language Kubernetes uses and how to speak it. Below you will find the components that you will work with.
Kubernetes Components
Even though Kubernetes operates as a cohesive package, it consists of several components, and each of them has its role and purpose. By figuring them out, you will enrich your knowledge in the cloud/container vocabulary too.

While Kubernetes deployment, you get a cluster that consists of worker machines (nodes) that run containerized applications. Each k8s cluster has at least one worker machine.
Kubernetes components
Pods operate inside of worker nodes; they are the components of the app workload.

So, let's decompose Kubernetes.

  • Master: the machine that manages minions
  • Minion: a slave that runs tasks assigned by the user and Kubernetes master
  • Pod: an application that runs on a minion. This is the basic unit of operation in Kubernetes.
  • Replication Controller: ensures that the requested number of pods is running on minions at all times
  • Control Plane: this is where assignments generate. CP controls Kubernetes pods.
  • Label: an arbitrary key/value pair that the Replication Controller uses for service discovery
  • kubecfg: the command line config tool
  • Service: an endpoint that provides load balancing across a replicated group of pods
OpsWorks Co. Newsletter
Subscribe to our email newsletter for weekly DevOps insights
Kubernetes Deployment
There are several ways to conduct Kubernetes deployment: templated cloud, on-premise deployment or customized deployment.

Kubernetes is an open-source orchestration tool, which means all the source code is available to download on Microsoft's Github. The easy way of starting Kubernetes is downloading the utility that will automatically deploy on your machine. With cloud computing, it's even easier: you visit The Kubernetes Engine Workloads, press deploy, choose the Existing Container Image, and tick options you need to complete the desired state of the cluster.

From the development perspective, deployment of an application in Kubernetes doesn't depend on what cloud service you use (AWS, Azure, or GCP). This is quite an advantage in the matter of multi cloud paradigm.

To conduct Kubernetes deployment for an application, pack it into an image. Create an instruction with the help of dockerfile (describe what libraries the image should use, what binary files it should use for launch, etc.) It will be able to be deployed as a Docker image, but if you want to make it an app deployed in Kubernetes, you have to describe where the databases are, launch parameters, variable environments, APIs, and other components. All this you need to describe in a form of a manifesto.

If you deploy the same application on dev, agent, and prod environments, you have to mention what databases relate to which environment. Thus, you need to create three different manifestos. However, there is a way to eliminate monkey job. You could simply use a template manifesto describing different variables for each environment. At the deploy, the Helm chart transmits values and automatically generates a ready-to-go manifesto with the help of which you launch a pod in Kubernetes. There it is — your application in Kubernetes.
How Does Kubernetes Work?
As you see in the picture above, every Kubernetes cluster can be visualized as a Control Plane, and the compute machines or nodes. Nodes operate on Linux or Windows and can be either physical or virtual machines. Each node runs pods that are made of containers that share IP addresses, IPC, hostname, and other resources.

There is a visible hierarchy between the control plane and compute machines. Control Plane is responsible for the desired state of the cluster: which app is up and which container it's using. Compute machines are working more locally — they run applications themselves and their workloads.
Kubernetes cluster
Kubernetes runs on top of the operating system and holds tasks for pods of containers that are, guess what, running on nodes.

The Kubernetes control plate takes tasks from a DevOps engineer and redirects them to the computing machines. Thus, the process of choosing the node that suits the task is fully automated and saves a lot of time for the engineers. The computer machines assign tasks to the free pods or create them in the node to fulfill the task.

The desired state of the Kubernetes cluster establishes what applications should be running, what resources they need to have access to, what images they use, and other configuration details.

Kubernetes gives you control over containers only on the higher level, eliminating the need to micromanage the pod and nod levels. Your work on containers is limited to defining the nods, pods, and containers. Kubernetes orchestrates all of it for you.

One more advantage of Kubernetes, apart from the automation possibilities, is that you can run it wherever your infrastructure lies: bare metal servers, virtual machines, private, public, or hybrid cloud. Even monolith applications can be placed in one container and managed by Kubernetes. What makes the Kubernetes cluster even easier to manage is that whatever cloud or server hosts your application, the features and configuration practices of Kubernetes are the same for every user.

Now that you are experts in how Kubernetes works let's dig deeper into why Kubernetes is used.
The Business Perspective of Kubernetes
Kubernetes has become quite a breakthrough in the IT world, but why? What does it give to businesses that makes every CTO wonder if their product would benefit from Kubernetes? Let's dig into the reasons.

As an orchestrator, Kubernetes does two things: keeps infrastructure at its desired state and replaces malfunctioning containers with healthy ones. This frees a DevOps engineer from performing routine tasks that can effortlessly be taken over by a machine.

However, there is one more question — when to use Kubernetes? Kubernetes works only with containerized applications. This means that monolithic products will have to configure auto-scaling and load balancing manually using different tools.

What Kubernetes DOES help businesses to achieve is better fault-tolerance and application performance quality. When using a containerized application that is orchestrated by Kubernetes under the hood, you will never encounter such issues as 'Service is unavailable', 'Oops! The server is down', 'Service is not responding. Try again later', which itself will shorten the feedback cycle for the product and leave a positive impression on the user.

Overall, Kubernetes deployment and use eventually involve several factors:

  • manual work automation
  • positive user experience
  • better user retention
  • shorter feedback cycle
  • better operability
As mentioned earlier, non-containerized applications cannot deploy Kubernetes, but they can still achieve all the factors mentioned above without it. Can the containerized apps do it?

Well, yes, they can. The fact is, not all the businesses need or can implement Kubernetes. It does make their life easier, but it's not always necessary. To define if Kubernetes implementation would benefit your business, you need to consider several factors: the complexity of your IT infrastructure, the level of its automation, etc.

To get a full infrastructure audit and recommendations on its optimization, fill out the form below. DevOps engineers at OpsWorks Co. will conduct an in-depth infrastructure analysis to document all the improvements that should be made to achieve your specific business goals.
Get an in-depth analysis for your IT infrastructure.
Get better. Get stronger. Automate.