What is Kubernetes?
Kubernetes is an open source orchestration system for Docker containers. It manages containerized applications across multiple hosts and provides basic mechanisms for deployment, maintenance, and scaling of applications.
It allows the user to provide declarative primitives for the desired state, for example “need 5 WildFly servers and 1 MySQL server running”. Kubernetes self-healing mechanisms, such as auto-restarting, re-scheduling, and replicating containers then ensure this state is met. The user just define the state and Kubernetes ensures that the state is met at all times on the cluster.
How is it related to Docker?
Docker provides the lifecycle management of containers. A Docker image defines a build time representation of the runtime containers. There are commands to start, stop, restart, link, and perform other lifecycle methods on these containers. Containers can be manually linked as shown in Tech Tip #66 or orchestrated using Fig as shown in Tech Tip #68. Containers can run on multiple hosts as well as shown in Tech Tip #69.
Kubernetes uses Docker to package, instantiate, and run containerized applications.
How does Kubernetes simplify containerized application deployment?
A typical application would have a cluster of containers across multiple hosts. For example, your web tier (Apache or Undertow) might run on a set of containers. Similarly, your application tier (WildFly) would run on a different set of containers. The web tier would need to delegate the request to application tier. In some cases, or at least to begin with, you may have your web and application server packaged together in the same set of containers. The database tier would generally run on a separate tier anyway. These containers would need to talk to each other. Using any of the solutions mentioned above would require scripting to start the containers, and monitoring/bouncing if something goes down. Kubernetes does all of that for the user after the application state has been defined.
Kubernetes is cloud-agnostic. This allows it run on public, private or hybrid clouds. Any cloud provider such as Google Cloud Engine. OpenShift v3 is going to be based upon Docker and Kubernetes. It can even run on a variety of hypervisors, such as VirtualBox.
Key concepts of Kubernetes
At a very high level, there are three key concepts:
- Pods are the smallest deployable units that can be created, scheduled, and managed. Its a logical collection of containers that belong to an application.
- Master is the central control point that provides a unified view of the cluster. There is a single master node that control multiple minions.
- Minion is a worker node that run tasks as delegated by the master. Minions can run one or more pods. It provides an application-specific “virtual host” in a containerized environment.
A picture is always worth a thousand words and so this is a high-level logical block diagram for Kubernetes:
After the 50,000 feet view, lets fly a little lower at 30,000 feet and take a look at how Kubernetes make all of this happen. There are a few key components at Master and Minion that make this happen.
- Replication Controller is a resource at Master that ensures that requested number of pods are running on minions at all times.
- Service is an object on master that provides load balancing across a replicated group of pods.
- Label is an arbitrary key/value pair in a distributed watchable storage that the Replication Controller uses for service discovery.
- Kubelet: Each minion runs services to run containers and be managed from the master. In addition to Docker, Kubelet is another key service installed there. It reads container manifests as YAML files that describes a pod. Kubelet ensures that the containers defined in the pods are started and continue running.
- Master serves RESTful Kubernetes API that validate and configure Pod, Service, and Replication Controller.
Kubernetes Design Overview provides great summary of all the key components as shown below.
Extensive docs are already available at github.com/GoogleCloudPlatform/kubernetes/tree/master/docs. A subsequent blog will explain a Kubernetes version of Tech Tip #66.
OpenShift v3 uses Kubernetes and Docker to provide the next level of PaaS platform.
As a fun fact, “Kubernetes” is actually a Greek word written as κυβερνήτης and means “helmsman of a ship”. In that sense, Kubernetes serves that role for your Docker containers.
Thanks, there are nice pictures here!
hi arun,
” A subsequent blog will explain a Kubernetes version of Tech Tip #66.”
It would be useful to your readers how to separate an application/service so that they could deploy it on a cluster(1 or more hosts, doesn’t matter) of docker nodes using micro-services architecture.
BR,
~A
Anjan,
This is already explained at: http://blog.arungupta.me/kubernetes-design-patterns/
Let me know if that serves your need.
Arun
Nice and great article. Indeed useful information for docker and kubernetes beginneres
Great Information Provided by You, Really Thanks For Posting….
Well done! It is so well written and interactive. Keep writing such brilliant piece of work. Glad i came across this post. Last night even i saw similar wonderful DevOps tutorial on youtube so you can check that too for more detailed knowledge on DevOps.https://www.youtube.com/watch?v=wz6tzaOhu58
Nice post ! very infromative blog for docker & Kubernetes aspirants.Post more blogs like this on different tools.Thank you for sharing
Nice article. Your collection is very helpful. Thanks for sharing…
Thanks for sharing Very Use ful Blog..
Great Article !! Thanks for sharing..
The information you’ve shared is really helpful. Take a wider look on this site in which I have seen some other useful article https://www.janbasktraining.com/ You can take a look at it. Happy reading!