Docker Swarm vs Kubernetes: Home Lab Comparison
For those wanting to get starting running containers in their home lab environments, many options are available, including Docker Desktop, Rancher Desktop, and Minikube, among others. Yet, for enthusiasts looking to venture into building out systems resembling production environments, Docker Swarm clusters and Kubernetes emerge as widely favored container orchestration tools. Each carries distinctive strengths that make them suitable for home lab configurations along with production. Let’s compare Docker Swarm vs Kubernetes within the home lab setting.
Table of contents
- Running containers in the home lab
- Recommendation for home lab
- Introduction to Docker Swarm
- Advantages of Docker Swarm
- Disadvantages of Docker Swarm
- Introduction to Kubernetes
- The advantages of Kubernetes
- Kubernetes disadvantages
- Installing a Docker Swarm cluster
- Installing Kubernetes
- Docker Swarm vs Kubernetes: Which to Choose?
Running containers in the home lab
Running containers in the home lab is a great way to get your feet wet with containerized workloads and the options for running these. Recently, I wrote a topic comparing virtual machine vs container in the home lab and why you would run one over the other. If you want to understand those concepts better, start there.
Also, I have several pieces of content comparing Kubernetes distributions, such as k0s vs k3s and k3s vs k8s, to understand your various options better when spinning up a Kubernetes cluster.
Check out this post: k0s vs k3s – Battle of the Tiny Kubernetes distros
Also, this post: K3s vs K8s: The Best Kubernetes Home Lab Distribution
One of the incentives for running containers in the home lab is containers allow running many more services without the resource requirements of VMs. However, some services (like web apps) better fit containerized workloads than others.
While a standalone Docker host works very well in a lab, many may want to experiment with Kubernetes from the start. However, there is a “middle option,” allowing another option for high-availability containers. That option is Docker Swarm.
Recommendation for home lab
If I could make a recommendation for home lab containers, it would be to follow a natural progression, including the following steps:
- Spin up a standalone Docker container host – this will allow you to experience how Docker works on a standalone server and gain proficiency working with the Docker CLI
- Get into running a Docker Swarm cluster and see how these work together – Docker Swarm is a great way to run containers with high-availability without the complexity of Kubernetes
- Get started with a simple Kubernetes distro like Microk8s, Minikube, k3s – once you get to the point of wanting to delve into Kubernetes, start with small and easier distros to start understanding how Kubernetes works.
Introduction to Docker Swarm
Docker Swarm is a native clustering and orchestration tool for running Docker containers. It’s an integral part of the Docker ecosystem and leverages the Docker engine to coordinate multiple Docker instances, creating a Docker Swarm cluster. A Docker Swarm cluster comprises worker nodes and manager nodes that carry out orchestration tasks and load-balancing Docker Swarm nodes.
Many have said Docker Swarm is dead. However, to the contrary, Docker Swarm is alive and well, even in the enterprise. Especially for home lab users, it provides a way to run containers in high-availability mode without all the complexities of Kubernetes.
For home lab users, Docker Swarm integrates seamlessly with existing Docker tools running in your operating system, simplifying deploying containerized applications running on multiple containers. You can leverage Docker CLI, Docker Compose, and Docker API to manage containers and deploy applications in your swarm cluster.
Below is a view of initializing a Docker Swarm cluster, using the command:
docker swarm init
After joining two other nodes, we are listing out the Docker Swarm cluster nodes. You can view the nodes in a Docker swarm cluster, using the command:
docker node list
Advantages of Docker Swarm
Docker Swarm excels in ease of use. The Docker CLI provides a straightforward command line interface, and Docker Swarm’s architecture is more straightforward than other container orchestration tools. Docker Swarm maintains an intuitive feel even for more complex cluster structures, making it less daunting for home lab enthusiasts.
One key feature of Docker Swarm is service discovery. It automatically assigns a DNS name to each service in the swarm, simplifying the process of inter-service communication. This automatic feature extends to load balancing as well. Docker Swarm offers automated load balancing, distributing tasks across different worker nodes.
Disadvantages of Docker Swarm
While Docker Swarm excels in simplicity, users can sometimes encounter challenges when dealing with intricate deployment situations. Docker Swarm’s straightforward nature is an Achilles heel when dealing with demanding workloads. It may not provide detailed controls in other, more elaborate container orchestration platforms like Kubernetes.
Moreover, Docker Swarm does not inherently come with shared storage provisioned. So, for those desiring to execute a high-availability cluster utilizing Docker Swarm, managing the storage backend is important. It also doesn’t provide as granular of controls over security constructs as Kubernetes.
In Docker Swarm, there are several compelling choices for addressing this. Glusterfs is one popular option that many use.
Introduction to Kubernetes
Commonly abbreviated as K8s, Kubernetes is a container orchestration solution, an invention of Google, currently under the maintenance of the Cloud Native Computing Foundation. Contrary to Docker Swarm, Kubernetes is equipped to manage more intricate workloads and cluster architectures with its focus on services and APIs for control.
Like Swarm, a Kubernetes cluster includes multiple nodes, partitioned into worker nodes and manager nodes. It introduces many features useful for a home lab setting, such as automatic scaling, load balancing, and service discovery. Like Swarm, it doesn’t come out of the box with shared storage.
The advantages of Kubernetes
Kubernetes provides exceptional features when compared to Docker Swarm, particularly in the realm of handling intricate applications. It automatically handles scaling and load balancing for active containers, which adds to its strengths. It does this in a superior way than Docker Swarm, offering auto-scaling features that take things like CPU usage into account.
Kubernetes has also been engineered to operate with a wide range of cloud service providers out of the box, including the likes of the Google Cloud Platform. It has a robust and dependable security architecture for sophisticated systems requiring rigorous security protocols. You can effectively implement role-based access controls in Kubernetes environments and it has extensive security capabilities that involve secret management, network policies, and service accounts that go beyond what Swarm can do.
Kubernetes disadvantages
Kubernetes presents a more challenging learning curve compared to Docker Swarm. This could be an obstacle for home lab enthusiasts. The installation process of Kubernetes is more convoluted than that of Docker Swarm, and managing Kubernetes requires more intimate knowledge of its structure and command line interface.
However, I will say that many Kubernetes projects out there now, like k0s, k3s, minikube, and microk8s have very easy installations. Portainer will even spin up a Microk8s cluster for you: Mikrok8s Automated Kubernetes Install with new Portainer Feature.
Also too, challenges are what many expect in home lab environments, so this shouldn’t deter you from installing and playing around with Kubernetes.
Installing a Docker Swarm cluster
Creating a Docker Swarm Cluster is as simple as having your existing nodes in place. First you will want to get Docker installed and then running using the following commands:
To install Docker on Ubuntu:
sudo apt-get update
sudo apt-get install
ca-certificates
curl
gnupg
lsb-release -y &&
sudo mkdir -m 0755 -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg &&
echo
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null &&
sudo apt-get update &&
sudo chmod a+r /etc/apt/keyrings/docker.gpg
sudo apt-get update &&
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y
Next, to create the Docker swarm cluster, add a worker and a manager node:
#Initialize a Docker swarm cluster, first node will be the manager
docker swarm init
#Join a worker node, once you init, it will display the worker join token
docker swarm join --token
#Join a new manager node if you want to have more than one which you should
docker swarm join-token manager
Installing Kubernetes
With Kubernetes, as mentioned there are great projects out there that have easy installations. But you will find a much more varied set of commands across different distros than the standardized Docker Swarm commands you run.
If you want to use Kubeadm and install Vanilla Kubernetes, you can follow my guide here:
For information on k3s and k3sup, follow my post here:
If you want to use Kubespray, you can follow my post here:
You can also check out my video here on building a Kubernetes cluster from scratch,showing the kubeadm approach:
Docker Swarm vs Kubernetes: Which to Choose?
Deciding between Docker Swarm and Kubernetes is guided by the requirements of your home lab environment or where you are in your learning journey. Docker Swarm is the best option if ease of operation and user-friendliness are high on your list. I think it is probably a better option to start with than jumping straight into Kubernetes.
Its integration capabilities with the Docker engine and existing Docker tools make it a great option for administering and deploying containerized applications with HA and little effort.
On the other hand, if your home lab configuration incorporates more complex applications or you want to start learning the concepts of cloud-native environments and production container management with more control over security, Kubernetes is the better choice.
Nevertheless, it is worth noting that both Kubernetes and Docker Swarm have unique advantages and drawbacks as we have covered.
Depending on your home lab’s specific needs (honestly you probably don’t need either one ๐ and you are probably just keen on learning) Kubernetes and Docker Swarm are both excellent.