Microsoft Taps Google's Kubernetes for Windows Container Orchestration
Docker has given rise to Linux and Windows containers but Microsoft is also championing Kubernetes, the popular open source container orchestration system developed by Google.
- By Michael Otey
Containers are one of the newest IT development and deployment technologies and they provide several advantages over legacy and monolithic-style applications such as most ASP.NET and MVC applications. A growing number of organizations have started using new tools and platforms that simplify the development of these container-based applications because they're better suited for building modern and portable cloud-native apps.
Docker Inc., the company largely responsible for bringing modern container development and deployment to the forefront, predicts a 30x growth of container apps over the next two years. Similarly, Gartner Inc. predicts that by 2018 more than 50 percent of new workloads will be deployed into containers. Containers essentially provide virtualization at the OS level and they have a much smaller footprint than a VM, which virtualizes at the hardware level. Further, containers have become the basis for a new type of microservice application model.
Traditional monolithic applications consist of large executable programs that are complex and can be difficult to deploy and update. In contrast, container-based microservice applications are composed of many small independent services running in containers that enable the organization to deploy and update granular microservices individually without impacting the entire application. This microservice architecture potentially makes these applications more resilient, as well as easier to deploy and update.
While containers have been available in the Linux and open source world for some time, they're new to Windows-based organizations. Thanks to its tight integration with Windows Server 2016, most administrators have at least heard of Docker. Docker providers the container runtime support, as well as a container management framework for Windows. However, Docker isn't the only container management technology around. One of the other prominent container management systems is Kubernetes. Microsoft's recent expanded support for Kubernetes shows that Microsoft is planning to make Kubernetes a more significant component in its future application development strategy.
What Is Kubernetes?
Kubernetes is an open source container orchestration system developed by Google Inc. Kubernetes provides automated deployment, scaling and operations for containers. It provides a management control plane for containers that works above the container level. Google started the Kubernetes project in 2014 and it was released on July 21, 2015. The name Kubernetes comes from the Greek word for helmsman or pilot. Kubernetes is sometimes referred to as K8S, where the eight letters of "ubernete" are replaced by the number 8.
Essentially, Kubernetes is used for managing distributed application containers across clusters of physical or virtual machines. It supports a range of different container tools including support for Docker. Kubernetes allows you to combine multiple containers that make up an application into logical groups for easier management. It's designed to enable you to easily deploy, update and scale your applications, as well as optionally limiting hardware utilization.
Kubernetes is a container management framework and it manages the container application level -- not the underlying system hardware. Like Docker Swarm, it provides load balancing, logging and monitoring. Kubernetes is not a Platform-as-a-Service (PaaS) system or a monolithic framework. Kubernetes can run on various platforms ranging from laptops, bare metal servers, VMs and cloud provider services. It uses a loosely coupled service-style architecture that's composed of a set of independent control processes that are designed to drive the current state toward a specified desired state. The Kubernetes platform consists of several key components (see the Kubernetes architecture in Figure 1).
The Master node is the cluster's control plane and is responsible for the management of Kubernetes cluster. The Master node contains:
- API Server: Used to control the cluster. The API Server exposes the Kubernetes API, which accepts the REST commands issued by kubectl to control the cluster.
- Scheduler: Controls the deployment of configured pods and selects the nodes that they'll run on.
- Etcd: Provides back-end storage for the cluster. Etcd is a simple, distributed key-value store. It's used for storing shared configurations, job schedules, deployed pod and service states, namespaces, and replication information.
- Controller-Manager: Runs the Kubernetes controllers. Controllers are background threads that handle routine tasks in the cluster. Controllers include a Node controller, Replication controllers, Route Controller and Namespace controller.
- Kubectl: A command-line management tool that communicates with the Master node's API Server using REST commands.
The Worker node is used to run pods. There can be multiple Worker nodes. The Worker node provides services that manage the networking between the containers, as well as assigning resources to containers and communicating with the master node. The Worker nodes contain:
- Kubelet: A worker service that's responsible for communicating between the Worker node and the Master node. It runs the pod's containers using Docker, mounts the pod's required volumes, tests for container status, and reports pod and node stats back to the Master node.
- Kube-proxy: Acts as a network proxy and a load balancer for the Worker node. It handles network routing and connection forwarding.
- Docker: Docker is on each of the worker nodes and it's used to run the configured pods. Docker handles downloading container images and starting containers.
- Pods: Pods are the basic container grouping mechanism for Kubernetes. The pod essentially groups together one or more containers that can be managed as a single unit. The containers in a pod are co-located and share resources such as storage, namespaces and IP addresses.
- Service: An abstraction on top of the number of pods. A Kubernetes service is a set of pods that work together, for instance, as a tier in a multi-tier application. Services enable communication between pods.
The goal behind the Kubernetes architecture is to provide a management layer on top of Docker containers that makes container application easier and more robust by providing automated scaling, resilience and updating.
Microsoft Azure Support for Kubernetes
As many organizations have begun adopting container technologies, the Google Kubernetes container management system has become an important component in this new container management framework. In its widespread embrace of open source and its cloud-first push, Microsoft has been quick to adopt Kubernetes support on Azure. Microsoft is fully behind Kubernetes on Azure in its push to make Azure the best place to run containerized workloads. One month after demonstrating the deployment of Docker directly into an Azure Linux VM using Azure extensions, as well as with the Chef orchestration platform (marking the beginning of its extensive collaboration with the company), Microsoft announced support for Kubernetes.
Microsoft agreed with Google and Docker to support both the Kubernetes and libswarm open source projects on Azure. Microsoft is also one of several vendors who actively contribute to the Kubernetes open source project. To further its Kubernetes support Microsoft hired Kubernetes co-founder Brendan Burns from Google and he now leads the Azure Container Services team at Microsoft. Earlier this February 2017, Microsoft made Kubernetes generally available on its own Azure Container Service (ACS). ACS is a cloud service designed to support container applications and allows you to create, configure and manage a cluster of VMs that are preconfigured to run containers. ACS supports three open source container orchestrators: DC/OS, Docker Swarm and Kubernetes clusters. Microsoft also recently released its new Azure Container Registry (ACR) to enable businesses to create and maintain Azure container registries to store Docker container images. The ACR integrates with the container orchestration providers supported by the ACS, as well as with other Azure services like Service Fabric.
To further strengthen its Kubernetes support on Azure Microsoft recently acquired Deis. Deis offers three tools for working with Kubernetes container management technologies: Helm, Workflow and Steward. Helm is a package manager that helps you install and upgrade Kubernetes-based container applications. Microsoft released an open source tool called Draft based on the Deis tooling (see "Microsoft Seeks to Make Kubernetes Easier with Draft"). Workflow is a CLI-based application deployment tool that helps enable Kubernetes container release and rollback capabilities. Steward is a service broker tool for Kubernetes that acts as a gateway between apps and services inside and outside the Kubernetes cluster. You can learn more about deploying Kubernetes cluster on ACS here.
Windows Server 2016 and Kubernetes
In addition to their support for Kubernetes on Azure, Microsoft and Kubernetes have also worked to make Kubernetes 1.5, which was released in December 2016, available on Windows Server 2016. This enables Kubernetes support to span both Windows Server and Linux hosts. In version 1.5, the Kubernetes Master node control plane (API Server, Scheduler, Controller-Manager) must still run on Linux. The Kubernetes Worker node's kubelet and kube-proxy can be run on Windows Server 2016. The new Kubernetes 1.5 support for Windows Server 2016 is currently called an Alpha feature and it provides the following capabilities:
- Windows Server 2016 Only: Kubernetes support is only available on the latest version of Windows Server 2016 that supports Docker.
- Container Orchestration for Heterogeneous IT Infrastructures: Kubernetes support for Windows Server 2016 enables it to be expanded beyond its former Linux-only base to include the numerous Windows Server infrastructure systems.
- Support for Both Windows Server Containers and Hyper-V Containers: Unlike Linux, Windows Server 2016 provides two different types of containers -- Windows Server and Hyper-V. Windows Server containers are very much like containers on Linux and they share the kernel of the host OS. Hyper-V Containers provide host/container isolation by running each container in its own specialized lightweight VM, where each container has its own copy of the kernel. Kubernetes support for Windows Server 2016 extends to both types of containers.
- Orchestration for .NET Applications: Kubernetes support for Windows enables new orchestration capabilities for Windows IIS, .NET, Windows Services, ASP.NET and .NET Core applications running in containers on Windows Server 2016.
Microsoft has posted documentation with more extensive details on how to run Kubernetes on Windows Server 2016, which can be found here.
Michael Otey is president of TECA, a technical content production, consulting and software development company in Portland, Ore., and has written several books on SQL Server and .NET development. He's a former SQL Server MVP and was senior technical director for Windows IT Pro and SQL Server Pro. He covers key Microsoft infrastructure offerings including Windows PowerShell and .NET development, VMware virtualization, and is a presenter at numerous technical conferences and webcasts.