Docker Swarm vs. Kubernetes: Comparison of the Two Giants in Container Orchestration

  • November 15, 2016

Containers have become popular thanks to their focus on consistency across platforms from development to production. The rise in interest to containers has in turn brought in higher demands for their deployment and management. The need for better control attracted a number of software options as solutions for container orchestration, which allows for abstraction of individual containers to services with a number of instances or replicas. Two of the major players developing container orchestration are Docker and Kubernetes. In this post, we will take a look at how these two compare.

Kubernetes

Kubernetes is an open-source platform for container deployment automation, scaling, and operations across clusters of hosts. The production ready orchestrator draws on Google’s extensive experience of years of working with Linux containers.

Kubernetes aims to provide the components and tools to relieve the burden of running applications in public and private clouds by grouping containers into logical units. Their strengths lie in flexible growth, environment agnostic portability, and easy scaling.

Docker Swarm

Swarm is the native clustering for Docker. Originally Docker Swarm did not provide much in the sense of container automation, but with the update to Docker Engine 1.12, container orchestration is now built into its core with first party support.

Docker Swarm is designed around four core principles: simple yet powerful with a “just works” user experience, resilient zero single-point-of-failure architecture, secure by default with automatically generated certificates, and backwards compatibility with existing components. The promise of backwards compatibility is especially important to the existing users. Any tools or containers that work with Docker run equally well in Docker Swarm.

Comparisons

Although both orchestrators provide much of the same functionality to one another, there are fundamental differences in between how the two operate. Below are listed some of the most notable points on where these rivals diverge.

Docker Swarm vs. Kubernetes: Comparison of the Two Giants in Container Orchestration

Installation and cluster configuration

Easy and fast to install and configure

Installing Docker is as simple as any application available on the package manager system of your OS. With Swarm, deploying a node and telling it to join the cluster is all that is required. Along with the ease of use, the Swarm also provides flexibility by allowing any new node to join an existing cluster as either a manager or a worker and seamlessly promote or demote nodes between the two roles.

Takes some work to get up and running

Kubernetes requires a number of manual configurations to tie together its components such as etcd, flannel, and the docker engine. Installation instructions differ from OS to OS and provider to provider. Kubernetes also needs to know much of the cluster configuration in advance like the IP addresses of the nodes, which role each node is going to take, and how many nodes there are in total.

Container setup

Functionality is provided and limited by the Docker API

The Swarm API provides much of the familiar functionality from Docker itself but does not fully encompass all of its commands. It supports many of the tools that work with Docker, however, if Docker API lacks a specific operation there is no easy way around it using Swarm.

Client, API and YAML definitions are unique to Kubernetes

Kubernetes uses its own client, API and YAML definitions which each differ from that of the standard Docker equivalents. In other words, you cannot use Docker CLI nor Docker Compose to define containers. When switch platforms, commands and YAML definitions will need to be rewritten.

Scalability

Quick container deployment and scaling even in very large clusters

Docker Swarm is able to deploy containers faster than Kubernetes even in very large clusters and high cluster fill stages allowing fast reaction times to scaling on demand. New replicas can be started with a single update command.

Provides strong guarantees to cluster states at the expense of speed

Kubernetes is in comparison more of an all-in-one framework for distributed systems. Its complexity stems from offering a unified set of APIs and strong guarantees about the cluster state, which slows down container deployment and scaling.

High availability

High availability is provided through container replication and service redundancy

Kubernetes and Docker Swarm both ensure high availability of services through replication. The same container is deployed to multiple nodes to provide redundancy and redeployed again if a host running the service goes down making the services self-healing. While either of the container orchestrators can be run on a single server, additional nodes are required for true redundancy.

Load balancing

Automated internal load balancing through any node in the cluster

Docker Swarm provides built-in load balancing. All containers within a single cluster join a common network that allows connection from any node to any container. Connection requests through any node in the Swarm are redirected internally to a node running an instance of the service.

Enabling load balancing requires manual service configuration

Kubernetes permits much of the load balancing concept when container pods are defined as services. Each service is accessible through a certain set of pods and policies which allow the setup of load balancer pods that can reach the service without worrying about IP addresses.

Container updates and rollbacks

Process scheduling to maintain services while updating

Docker Swarm container updates are done by telling the scheduler to use a new image instead. The update can then be rolled out in stages preventing service outage and allowing rollback if something goes wrong.

Progressive updates and service health monitoring through the update

Kubernetes handles the update process progressively monitoring service health to retain availability throughout the update process making changes to one pod at the time preventing a service outage.

Data volumes

Simple shared local volumes

Docker data volumes are directories shared within one or more containers. Volumes are created separately or together with containers and can be shared between multiple containers. Data volumes also persist even when containers using them are deleted. Volumes by themselves are however only local to the node they are created on. To create global volumes, Docker engine supports volume plugins.

Volumes shared within pods

Kubernetes volumes are an abstraction to allow containers share data within the same pod. The volumes have an explicit lifetime, they are created and removed together with the pod they are enclosed in. Volumes work in basics just as any other directory, which is accessible to the containers in the same pod. Kubernetes also supports external data volume managers to transfer data between pods.

Networking

Automatically configured TLS authentication and container networking

Docker Swarm forms a multi-host ingress network overlay that connects containers running on all cluster nodes. More inter-container networks can be configured manually. Connections between nodes are also automatically secured through TLS authentication with certificates.

TLS authentication requires manual configuration for security

Kubernetes commonly uses flannel to accomplish container networking. Containers are joined in a virtual network and announced through etcd. TLS authentication is also possible but requires certificates to be generated and installed manually to all nodes.

Service Discovery

Services are discoverable throughout the cluster network

Docker Swarm container networking greatly simplifies service discovery. All containers join the cluster-wide ingress network overlay at deployment. It allows containers to communicate through virtual private IP addresses and service names regardless of the underlying hosts.

Containers can be defined as services that are easily discoverable

Kubernetes relies on etcd and manually defined services for discovery. Containers can announce themselves when started and add the relevant information to the distributed key-value store. An optional cluster addon for DNS server is also supported for easier communication.

Summary

Throughout the comparison, it is possible to note how Kubernetes and Docker Swarm fundamentally differ. Swarm focuses on ease of use with integration with Docker core components while Kubernetes remains open and modular. The same difference can be noticed while installing and configuring each of the orchestrators.

Docker Swarm

Pros

  • Easy and fast setup
  • Works with other existing Docker tools
  • Lightweight installation
  • Open source

Cons

  • Limited in functionality by what is available in the Docker API
  • Limited fault tolerance

 

Kubernetes

Pros

  • Open source and modular
  • Runs well on any operating systems
  • Easy service organisation with pods
  • Backed by years of expert experience

Cons

  • Laborious to install and configure
  • Incompatible with existing Docker CLI and Compose tools

Docker provides a simple solution that is fast to get started with while Kubernetes aims to support higher demands with higher complexity. For much of the same reasons, Docker has been popular among developers who prefer simplicity and fast deployments. At the same time, Kubernetes is used in production environments by many high profile internet companies running popular services.

Getting started with orchestration

Both Docker Swarm and Kubernetes are capable of running many of the same services but may require slightly different approaches to certain details. Getting to know each of the software can help make the decision when choosing the right tool for you container orchestration. You can find our guide on how to deploy Kubernetes on CoreOS cluster at our support section as well as a quick introduction to Docker Swarm orchestration.

Not on UpCloud yet? Sign up for a free trial!

We provide all new users with a completely free trial, no strings attached.

Start your free trial now!