Kubernetes

It might be helpful or at least interesting to describe what we have been working on with the Kubernetes project.

Kubernetes is a open source system for managing containerized applications (Docker processes) across multiple hosts. The Kubernetes project is from Google, so it works with Google Compute Engine (GCE) but also runs on many other cloud environments (AWS, Azure, vSphere).

Containers

Docker and containers are very popular in the IT industry. Containers are similar technology to Virtual Machines (VMs) with some important differences. They share the operating system means that they can be more efficient than a separate VM that has its own operating system. You can create many containers inside a VM or a bare metal creating what the industry calls density.

Docker containers are great but they do have limitations. Since the containers share the operating system containers can only communicate within the host. Running Docker services on different servers requires some additional software to talk with other hosts. Kubernetes packages all the tools to facilitate communication between hosts, also adding software to do load balancing and service discovery to manage containers on different servers.

Kubernetes

Kubernetes is a software project written in go and is a very active project on github at the time of writing. The idea is you should be able to run kube-up.sh for the cloud environment you are using to deploy the software and services you need to run a Kubernetes cluster in a public cloud.

Kubernetes has new concepts and terminology such as master and minions, clusters and pods. That is beyond the scope of this short post, but you can read more about the concepts if you are interested.

Juju does the work, so you do not have to!

Juju is an orchestration tool that makes it easier for people to deploy a Kubernetes environment to multiple clouds. The value to this is we can deploy Kubernetes on different cloud environments that are not yet supported by the Kubernetes project.

Kubernetes in Juju

We have written charms that encapsulate the kubernetes software and related technologies such as flannel and etcd. The charms handle all the requirements and prerequisites for those tools configuring them and setting them up automatically. We also created Juju bundles that make it easier to deploy the Kubernetes servers (using Juju) and relate them on any cloud environment that Juju supports (AWS, Azure, HP public cloud, Joyent, OpenStack, Digital Ocean, and MAAS). The Juju parts also aim to build in operational intelligence that users need to manage a Kubernetes cluster.

My colleague Charles Butler has been working on getting the kube-up.sh script to work with Juju. That work has landed and we contributed the code to the Kubernetes project so everyone can deploy a Kubernetes cluster with Juju.

How can I deploy Kubernetes today?

A very easy way to deploy Kubernetes technologies today is to deploy a bundle. We have instructions on how to get started using Juju.

Once you have Juju Quickstart installed it is just one command:

juju quickstart https://raw.githubusercontent.com/whitmo/bundle-kubernetes/master/bundles.yaml

The basic kubernetes bundle consumes four VMs in the cloud. Juju allows you to easily scale up the minion VMs to create a cluster however large you want.

Please help us!

We are just in the initial stages of the integration with Kubernetes. We are always looking for feedback or contributions. Everything from ideas on better integration with Kubernetes services, to handling standard operational duties on Kubernetes, or ways to make this complex group of software easier to understand.