Cloud-based infrastructure, containers, microservices, and new programming platforms are dominating the media and sweeping across IT departments around the world. For example, the use of Docker containers has exploded in the last few months. In our Introduction to Docker blog, we noted they have delivered 2 billion image “pulls”; in November of 2015, that total was at 1.2 billion. This is a clear indication of the growth of container technology in organizations ranging from large international companies to smaller start-ups.
Overview of Cluster Management Tools
Clearly, containers are an exciting new advancement in creating and delivering applications. However, controlling a vast deployment of containers presents some complications. Containers must be matched with resources. Failures have to be resolved quickly. These challenges have led to a concurrent demand for cluster management and orchestration tools.
A cluster management tool is a software program that helps you manage a group of clusters through a graphical user interface or by accessing a command line. With this tool, you can monitor nodes in the cluster, configure services and administer the entire cluster server. Cluster management can vary from low-involvement activities such as sending work to a cluster to high-involvement work such as load-balancing and availability. In this article, we’re going to look at Swarm and three other popular cluster management tools and discuss their strengths and challenges.
1. Swarm – Docker
Docker Swarm lets you cluster a number of Docker engines into one virtual engine. In a distributed application environment, as the compute elements must also be distributed. Swarm allows you cluster Docker engines natively. With a single engine, applications can be scaled out faster and more effectively. Swarm can scale up to 50,000 containers and 1,000 nodes with no effect on performance as new containers are added to the cluster.
In addition, Swarm acts as the Docker API. Any tool that can operate with the Docker daemon can tap the power of Docker Swarm to scale across many hosts. These included disparate hosts like Flynn, Compose, Jenkins, and Drone.
Swarm can also be used as a frontend Docker client while running Mesos or Kubernetes in the backend. Swarm is a simple system at its heart: every host runs a Swarm agent and manager. The manager handles the operation and scheduling of containers. You can run it in high-availability situations – it uses Consul, ZooKeeper or etcd to send fail-over events to a backup system.
One of the advantages of Docker Swarm is that it is a native solution – you can implement Docker networking, plugins and volumes using Docker commands. The Swarm manager creates several masters and specific rules for leader election. These regulations are implemented in the event of a primary master failure. The Swarm scheduler features a variety of filters including affinity and node tags. Filters can attach containers to underlying nodes for better resource utilization and enhanced performance.
2. Fleet – Core OS
CoreOS was created to allow you to scale and manage compute capacity. Rather than installing a package through apt or yum, CoreOS leverages Linux containers to handle services at a higher abstraction level, providing advantages similar to virtual machines, but with the concentration on applications rather than complete virtualized hosts.
Fleet allows you to conceptualize a CoreOS cluster in a scenario where it shares an individual init system. With fleet, every machine has an agent and an engine. A single engine is active at any time in the cluster, but the entire community of engines is active at all times. Fleet also can handle socket activation — containers can be activated to take care of a connection on a specific port. This allows the system to create processes when needed as opposed to waiting for demand.
Your DevOps personnel spend their time focusing on managing containers that are the building blocks of a service without worrying about potential problems that could crop up on single machines. Fleet makes sure containers stay in operation on a cluster. In the event of a machine failure, the containers are automatically moved to healthy machines.
3. Kubernetes – Google
Developed by Google, Kubernetes allows you to manage containerized applications across many different hosts. It gives you the tools to deploy, scale and maintain applications. The developers of Kubernetes focused on keeping it accessible, lightweight and easy to use. It can be used in a number of cloud environments including private, public, multi-cloud and hybrid. Designed to repair itself on the fly, it features auto-replication, auto-restart, and auto-placement. Endlessly extensible, it was built to be hookable, pluggable and modular. Completely open source, Google first announced its development in 2014, and version one was released in the summer of 2015. Despite its recent vintage, Kubernetes was created based on Google’s experience with containers for many years.
Kubernetes uses pods that act as groups of containers and are scheduled and deployed at the same time. Pods are the basic configuration for scheduling because, in contrasting systems, a single container is considered the base unit. Most pods have up to five containers that make up a service. Pods are built and eliminated in real time as demand and requirements change.
Kubernetes is a set of loosely coupled primitives that can operate under many different workloads. It relies heavily on the Kubernetes API for extensibility. The API is used internally, and also externally by containers and extensions running on top of the system. Organizations that have implemented Kubernetes include: Wikimedia Foundation moved from a homegrown set-up to Kubernetes; eBay runs Kubernetes and containers on top of Openstack, and Viacom is building an advanced containerization infrastructure using Kubernetes.
4. Mesos – Apache
Conceived and developed at the Berkeley campus of the University of California, Apache Mesos is a cluster manager that focuses on effective isolation of resources and sharing of applications across distributed networks or frameworks. An open source system, it gives managers the ability to share resources and improve the utilization of clusters. Companies currently using Apache Mesos include Apple, Airbnb, and Twitter.
Apache Mesos is an abstraction layer for computing elements such as CPU, Disk, and RAM. It runs on every machine with one machine designated as the master running all the others. Any Linux program can run on Mesos. One of the advantages of Mesos is providing an extra layer of safeguards against failure.
Mesos was designed to handle thousands of hosts. It supports workloads from a wide variety of tenants. In a Mesos configuration, you might find Docker running side-by-side with Hadoop. Mesos gained visibility when it became the system supporting the rapid expansion of Twitter several years ago.
Mesos uses a system of agent nodes to run tasks. The agents send a list of available resources to a master. At any one time, there can be hundreds to thousands of agent nodes in operation. In turn, the master distributes tasks to the agents.
Comparing Different Container Orchestration Tools
Kubernetes is a full-bore container management platform with scheduling, upgrades on-the-fly, auto-scaling and constant health monitoring. In comparison, Docker Swarm concentrates on providing a system-wide view of a cluster from a single Docker engine.
Mesos and Kubernetes are similar because they were developed to solve the problems of running applications in clustered environments. Mesos does not concentrate as much as Kubernetes on running clusters, focusing instead on features like its strong scheduling capabilities and its ability to be plugged in a wide variety of schedulers. This is partly because Mesos was developed before the recent rise in popularity of containers — it was modified in certain areas to support containers.
Fleet utilizes etcd, a key-value pair that comes with CoreOS, and systemd, a system and service manager for Linux. Systemd is designed for a single machine, but Fleet expands its capabilities to a cluster of machines. Fleet helps protect against failure by allowing you to run several instances of a service. It can deploy an individual container to any location, run containers on one machine or several and deploy multiple instances of the same container.
On the other hand, Fleet is not as adept at handling some situations that arise in a distributed microservices environment such as service registration, scheduling based on utilization, service discovery or communications between containers. Fleet positions itself among these four tools as a low-profile cluster engine, so it is best situated as a layer where other solutions like Kubernetes can operate on top.
Orchestration Tools Meeting Increasing Demand
Today’s enterprises need redundant systems that can meet their computing needs without fail. In addition, big data and data mining require massive resources to sift through mountains of information. Unless companies adapt and modify their approach to information systems, they will quickly lose ground to speedier and more flexible competitors.
In this era of high-speed web scale computing, fixing individual machines is not an effective approach. Distributed systems allow you to quickly dispatch broken machines to the dustbin and reallocate resources to healthy nodes on a cluster. This is why it is important to manage cluster of Docker and other containers.
In this blog, we’ve looked at several powerful cluster management and orchestration tools which can effectively maintain, configure and scale containers in a distributed environment. Choosing the best one is a function of which one best meets the challenges of your computing environment. Use this discussion as a starting point to find the solution that will help position your organization for success in the fast-developing world of containerization and microservices.
This blog was originally posted at AppDynamics Blog.