Monday, October 14, 2019

High Level Introduction to Kubernetes

This article will provide a high level introduction to Kubernetes (for beginners).

What is Kubernetes?

As per wiki definition:


Kubernetes (commonly stylized as k8s) is an open-source container-orchestration system for automating application deployment, scaling, and management. It was originally designed by Google, and is now maintained by the Cloud Native Computing Foundation. It aims to provide a "platform for automating deployment, scaling, and operations of application containers across clusters of hosts". It works with a range of container tools, including Docker.


In simpler terms:
  • It is an open source system for ADSM (Automating deployment, scaling and management).
  • It groups containers that make up an application into logical units for easy management and discovery.
  • Makes it easy to deploy and run applications (in a container)
At a high level, lets try to understand the concepts of Containers and Orchestration.

What are containers?

Traditionally, applications were deployed on physical servers. Running multiple applications caused resource allocation issues.
An application could compete with another for CPU or memory etc in the same physical server.

The solution for the above was to use different standalone physical servers per application.
This was not practical since that would involve many physical servers and some being underutilized.

As an improvement, the next deployment phase was to use VMs (virtual machines).
VMs were deployed on a single server. They had their own memory/CPU assigned and each VM was isolated from the other (from security standpoint).

Containers are similar to VMs. They are light weight since they have relaxed isolation properties to share the OS among applications. 
Like VMs, containers have their own filesystem, CPU and memory etc.
You could read up more on containers and their efficiency.

What is Kubernetes?
In very basic terms:

  • You have a container deployed in production.
  • Containers run applications and you need to ensure that there isn't any downtime.
  • If one containers fails, another should be up and running to distribute the load.
  • This framework - to run distributed load is provided by Kubernetes,
  • Where does Kubernetes help:
    • Load balance and distribute network traffic between containers
    • A new deployment can be as simple as create new containers and remove existing containers. New containers can be thoroughly tested before deployment.
    • Define CPU/Memory per container
    • Restarting stuck containers etc can be automated.
Docker is a very popular tool to deploy applications in a container.

As per wiki:

Docker is a set of platform-as-a-service products that use OS-level virtualization to deliver software in packages called containers. Containers are isolated from one another and bundle their own software, libraries and configuration files; they can communicate with each other through well-defined channels.

No comments:

Post a Comment