Kubernetes definition
Kubernetes is an open source system for managing containerized applications and provides mechanisms to deploy, maintain and scale them accross multiple hosts spread accross on premise and cloud. It is more than a container orchestration platform because it also takes care of managing the compute, network and storage infrastructure
What problems does Kubernetes solves?
Imagine an application consisting of 10 different containerized RESTful APIs written in different languages such as Java, PHP and NodeJS. You need to deploy these containers such that :
- They are deployed in multiple servers to handle load balancing and high availablilty.
- They can be scaled as required.
- They can be upgraded without any downtime or with minimal downtime.
- The services can easily talk to each other and discover each others end points.
- The deployment as well as number of replicas can be maintained as code.
- The whole platform can be maintained as code and accross bare metal and cloud platforms.
Kubernetes : Bare metal or cloud ?
Many companies are moving towards cloud since it reduces to overall time to market, reduces cost, makes it easy to manage capacity and quickly try out new technologies. Kubernetes deployment on cloud has been increasing. Look at this article to learn how to start a Kubernetes cluster on AWS using KOPS. You have the choice of either setting up your own cluster or using AWS managed cluster, known as EKS. With EKS , AWS takes care of managing your cluster for you.
However, not all enterprises are ready to move to cloud or they have specific reasons to stay on premise, such as security or existing investment in bare metal infrastructure. In such cases, its easy to install Kubernetes on premise too. Kubernetes makes it easy to add and remove nodes to the cluster. You start with a few nodes cluster and as your requirement increases you can start adding more nodes to it and Kubernetes takes care of distributing the load to the new node.
What is Kubernetes in simpler terms?
If you are more confused about what Kubernetes is after reading the definition then here’s a simpler explaination. Have you heard about docker containers? If not, then I would recommend that you read this article on docker first. Now imagine you have hundreds of docker containers. How do you make sure that your setup always has a minimum number of docker containers up and running all the time? How do you distribute the containers to multiple machines such that even if one machine goes down your application is always up? How can the outside world connect to applications that are deployed on multiple machines? Kubernetes takes care of all of this by taking responsibility of maintaining a specified number of docker containers in a number of machines and taking care of the networking and storage requirements for those containers. You just deploy an application and instruct Kuberenetes to make sure that the application is always available and works reliably under varying loads and absorbs hardware failures.
How many nodes and containers are we talking about?
Kubernetes supports upto 5000 nodes and 300000 containers. That’s a lot! You can have multiple environments in a single cluster by separating the environments using namespaces. Each environment is secure and the cpu and memory can be constrained per environment by using ResourceQuota.
Is Kubernetes here to stay?
Kubernetes has evolved from Google’s Borg System and made open source by Google around 2015. In late 2018 it reached the ninth most commited project in Github. It has around 50K stars in Github.
However, the real reason why Kubernetes is going to stay for a long time is that many enterprises have started investing heavily into it. Its not easy to enterprises to migrate to newer technologies and once they do, they stick to it for a few decades. The demand for Kubernetes engineers is increasing daily and it would make sense to get up to speed on it .. asap.