Alternative to Kubernetes

Kubernetes, is a solution to manage containerized applications. But have we ever imagined what might be an alternative to Kubernetes ?

Below are few other solutions to manage as well, and these solutions are also popular:

1. Docker Swarm: Docker Swarm is native clustering for Docker. It turns a pool of Docker hosts into a single, virtual Docker host. Because, Docker swarm serves the standard Docker API, any tool that already communicates with a Docker daemon can use Swarm to transparently scale to multiple hosts. Few of the supported tools:

(a) Docker client
(b) Dokku
(c) Docker Compose
(d) Docker Machine
(e) Jenkins

Reference: Docker Swarm Overview

2. Apache Mesos: Apache Mesos is a great platform for fine grained resource sharing in the data center.

Reference: Apache Mesos Intro

3. Nomad: Nomad is a tool for managing a cluster of machines and running applications on them. Nomad abstracts away machines and the location of applications, and instead enable users to declare what they want to run and Nomad handles where they should run and how to run them.

Reference: Nomad Project

4. Marathon: Marathon is the framework that lets you orchestrate containers.

Reference: Marathon Intro

High Level Architecture of Kubernetes

Kubernetes Fundamentals

Kubernetes has six main components that need to be running to get a functioning cluster:
1. The API Server
2. The Scheduler
3. The controller manager
4. The kubelet
5. The proxy (alias kube proxy)
6. An etcd cluster

Each of these components can run as a standard Linux processes on your nodes, or they can run as Docker containers themselves.

kubearch
Image retrieved from @wattsteve Kubernetes training slide.

Components of Kubernetes cluster

Master Node: As seen from the above architectural diagram, the master node runs the API server, the scheduler, and the controller manager. The master node can also be configured in a multi-master highly available setup. The scheduler and controller elect a leader and the API servers can be fronted by a load balancer.

API Server: The API server exposes a REST interface to all of the Kubernetes resources and it is highly configurable.

Scheduler: The Scheduler main responsibility is to place the containers on the node in the cluster according to various policies, metrics, and resource requirements. It is also configurable via the command line flags.

Controller: The controller manager is responsible for reconciling the actual state of the the cluster with the desired state, as specified via the API. In effect, it is a control loop that performs actions based on the observed state of the cluster and the desired state. The main controller is also configurable.

Worker Nodes

All the worker nodes run the *kubelet* and *kube proxy*, as well as the Docker engine.

kubelet: The *kubelet* interacts with the underlying **Docker** engine also installed on all the nodes and makes sure that the containers that need to run are actually running.
kube-proxy: The kube-proxy is in charge of managing the network connectivity to the containers.

As an alternative to running a Docker Engine, you can also run Kubernetes with rkt, For more information on how to do this, you may refer to the documentaion: https://kubernetes.io/docs/getting-started-guides/rkt/