The Microsoft Open Technologies, Inc. engineering team has been hard at work bringing Docker and Kubernetes support to Microsoft Azure, as we promised in July. Today we are announcing that Kubernetes can be used to manage your Docker containers on Microsoft Azure. In addition the Azure team has released the Azure Kubernetes Visualizer project which builds upon this work and makes it much easier to experiment with and learn Kubernetes on Azure.
Docker is an open-source engine that automates the deployment of any application as a portable, self-sufficient container that will run almost anywhere. Kubernetes is an open source cluster management tool, a declarative technology supporting orchestration and scheduling of Docker containers. With these latest contributions to the Kubernetes toolset, developers can transparently deploy and manage container clusters on Azure.
The key features we have implemented are documented in the Kubernetes project and can be summarized as:
- Build a container and publish it to Azure Storage
- Deploy an Azure cluster using container images from Azure Storage or the Docker Hub
- Configure an Azure cluster
- Update the Kubernetes application on an existing cluster
- Tear down an Azure cluster
Whilst these features enable the deployment and management of complex application clusters, doing so requires an understanding of some key concepts introduced by Kubernetes.
Understanding the Language of Kubernetes
Kubernetes uses a variety of terms to describe an application consisting of a cluster of containers on Azure. Some of the most frequent include:
- Container: A portable, lightweight runtime that enables apps to be quickly assembled.
- Master: This term is used to identify the machine which manages the application as a whole. A master manages one or more minions.
- Minion: A virtual machine that runs Docker containers and thus the end-user workloads. A minion will run one or more Pods.
- Pod: An individual application, or part of an application, that runs on a single minion (VM). Pods are balanced across the minions by the master to support scalability.
- Label: An arbitrary set of key-value pairs attached to pods that are used to help organize your clusters.
- Replication controller: Manage failures and scalability by ensuring that an appropriate number of Pod deployments are available in the data center at any given time.
Unfortunately, merely defining the words used in managing a container cluster is not enough to build an understanding of how Kubernetes works. To this end, we are pleased to report that the Microsoft Azure team has created some software that helps to visualize Kubernetes deployments on Azure.
Learning With the Azure Kubernetes Visualizer
The Azure team have built the Azure Kubernetes Visualizer, which is also being released today. This open source project provides a web application, written in node.js, that automatically creates a pod definition and replication controller file that is then used by Kubernetes developers to deploy to an existing cluster of Virtual Machines running Docker.
The applications user interface provides helpful visual representations of what is happening on your cluster. Furthermore, users can edit the automatically generated files and watch as Kubernetes updates the cluster configuration.
The project is described in more detail on the Microsoft Azure blog and is a great example of how the Kubernetes project is enabling further experimentation and innovation. This visualizer work was primarily driven by Michael Blouin, an intern who brought a bright idea to a recent Microsoft hackathon, The subsequent collaboration between MS Open Tech and Microsoft Azure staff and interns has delivered software that validates our work on Kubernetes and is useful to those wanting to explore Kubernetes on Microsoft Azure.
Within MS Open Tech we are excited to see our ongoing work on Docker and Kubernetes helping to build a community that is driving interoperability and innovation in container cluster management. We hope it will benefit those of you who wish to leverage this improved interoperability across cloud platforms.