Merge branch 'pi-docker-swarm' into 'main'
Pi docker swarm See merge request AHMZA/blog!3
This commit is contained in:
@@ -0,0 +1,172 @@
|
|||||||
|
---
|
||||||
|
title: Building a Docker Swarm With Pi's
|
||||||
|
date: 2021-12-12T17:23:32Z
|
||||||
|
author: "ahmza"
|
||||||
|
draft: true
|
||||||
|
weight:
|
||||||
|
|
||||||
|
tags: ["Homelab","Docker","Docker Swarm","Raspberry Pi","Pi4"]
|
||||||
|
description: "Pis are very capable computers, when banded together they're almost unstoppable"
|
||||||
|
canonicalURL: "https://blog.ahmza.com/Page%28/posts/building-a-docker-swarm-with-pis.md%29"
|
||||||
|
|
||||||
|
cover:
|
||||||
|
image: "/img/pi-docker-swarm/pi-swarm.gif" # image path/url
|
||||||
|
alt: "Pi Docker Swarm" # alt text
|
||||||
|
caption: "<text>" # display caption under cover
|
||||||
|
relative: false # when using page bundles set this to true
|
||||||
|
showtoc: true
|
||||||
|
searchHidden: false
|
||||||
|
---
|
||||||
|
|
||||||
|
## **Intro**
|
||||||
|
The _Raspberry Pi_ from it's first iteration has been a great hit.
|
||||||
|
Adopted by many as the computer of choice for projects, and for
|
||||||
|
very good reason. The Pi is a fully fledged computer that fits in
|
||||||
|
your pocket and the most recent edition has blown fans away with
|
||||||
|
the flagship model boasting an ARM64 CPU and 8GB of RAM.
|
||||||
|
|
||||||
|
Now one _Raspberry Pi 4 8GB_ is more than powerful enough for most
|
||||||
|
workloads and in some cases totally unnecessary, **so you may even
|
||||||
|
get away with a single 4GB model**. However taking into consideration
|
||||||
|
their relatively low price and power consumption why not go all out
|
||||||
|
and build a cluster.
|
||||||
|
|
||||||
|
> **You can never have too many _Raspberry Pis_, just
|
||||||
|
not enough Ideas**
|
||||||
|
|
||||||
|
My excuse to build a Pi cluster is, I would like to migrate the
|
||||||
|
services currently running on a **bare metal server that sucks
|
||||||
|
a lot of power to a low power solution.** What better way to do that
|
||||||
|
than a Pi cluster.
|
||||||
|
|
||||||
|
### **My Setup**
|
||||||
|
* 4 x _Raspberry Pi 4 8GB_
|
||||||
|
* 4 x 32GB SD cards
|
||||||
|
* 4 x PoE hats
|
||||||
|
* 1 x 5 port PoE Switch
|
||||||
|
|
||||||
|
![Insert Image of cluster here]()
|
||||||
|
|
||||||
|
### **Point of this post**
|
||||||
|
Hopefully after following this post you will have setup _Docker
|
||||||
|
swarm_ on a cluster of Pis **- stay even if you currently only have
|
||||||
|
one -** and understand how to bend it to your will 🦾.
|
||||||
|
|
||||||
|
### **Why** ***Docker Swarm*** 🧐
|
||||||
|
While we can manage each docker node - _Raspberry Pi_ - individually
|
||||||
|
, **_Docker swarm_ enables us to manage all the devices from a single
|
||||||
|
main node** making managing the cluster a lot easier.
|
||||||
|
|
||||||
|
Think of _Docker swarm_ as a set of 🤖 hands which will run tasks on
|
||||||
|
each individual node for us. These tasks can consist of:
|
||||||
|
* Cluster Management
|
||||||
|
* Deployment and Scaling across the cluster
|
||||||
|
* Multi-host networking
|
||||||
|
* load balancing
|
||||||
|
* etc...
|
||||||
|
|
||||||
|
### **Well why not** ***Kubernetes***
|
||||||
|
Although _Kubernetes_ is awesome, **it adds a bunch of complexity that
|
||||||
|
is simply not needed in a home lab environment** where we only have
|
||||||
|
a small cluster. As well as that, from my experience creating
|
||||||
|
```docker-compose``` files is a lot easier than writing manifests.
|
||||||
|
**_Docker swarm_ can do everything I want it to and requires less
|
||||||
|
effort** which is great if you're like me 🥱 😂
|
||||||
|
|
||||||
|
### **Required Stuff**
|
||||||
|
> The links below are reccomendations/stuff I used
|
||||||
|
* [_Raspberry Pi_ 4B](https://thepihut.com/products/raspberry-pi-4-model-b?variant=31994565689406) (Reccomend 4-8 @ 8GB)
|
||||||
|
* [_Raspberry Pi_ PoE Hats](https://thepihut.com/products/power-over-ethernet-poe-hat-d-for-raspberry-pi) (If you can find the [PoE+](https://thepihut.com/products/raspberry-pi-poe-plus-hat) version get them)
|
||||||
|
* [Cluster Case](https://thepihut.com/products/cluster-case-for-raspberry-pi) (Get any case you want)
|
||||||
|
* [PoE switch](https://www.amazon.co.uk/gp/product/B076982FVC/) (Get one that has enough ports for the nuber of pis you want)
|
||||||
|
* [RJ45 Ethernet Cable](https://www.amazon.co.uk/gp/product/B00C4U030G) (Reccomend short cables as it will look neater)
|
||||||
|
* [Micro SD cards](https://www.amazon.co.uk/gp/product/B08J4HJ98L) (Get enough cards for the number of Pis, Get the biggest cards you can afford)
|
||||||
|
|
||||||
|
**This is without a doubt an expensive project**, however in my eyes
|
||||||
|
it's the cost of another server 😂 and the best part about this
|
||||||
|
project is **you can add to the cluster over time** spreding the cost
|
||||||
|
which is how I managed to purchase all the hardware. A suggestion
|
||||||
|
would be to **buy equipment that allows you room to grow** so an 8 port
|
||||||
|
PoE switch instead of a 4 port if you know you will scale to 8
|
||||||
|
nodes
|
||||||
|
|
||||||
|
If you build this then you can safely say another server is not
|
||||||
|
needed. This cluster should be more than capable to serve all your
|
||||||
|
home needs even if you only have 2 nodes. Put it this way, if you
|
||||||
|
have 4 8GB nodes then you have a combined total of:
|
||||||
|
* 32GB of RAM
|
||||||
|
* 16 physical CPU cores @ 1.5GHz
|
||||||
|
|
||||||
|
#### **Money Saving Tips**
|
||||||
|
* Just get 1-2 nodes to start
|
||||||
|
* cut PoE and use normal power cables
|
||||||
|
* Use Raspberry Pis with less memmory eg 4GB
|
||||||
|
* Grab a really cheap case or make one using [these](https://www.amazon.co.uk/dp/B091KJNZLB/)
|
||||||
|
* Use smaller SD Cards try not to go below 32GB (Reccomended 64GB If money saved elsewhere)
|
||||||
|
|
||||||
|
## **BUILD TIME !!**
|
||||||
|
Pull yourself up by your bootstraps were jumping into this one
|
||||||
|
runnig 💨
|
||||||
|
|
||||||
|
### **Image the SD Cards**
|
||||||
|
So interesting fact the CPUs used in the raspberry pi 4 use an ARM64
|
||||||
|
archetecture. When looking for images of Raspbian you will only find
|
||||||
|
32bit variants which will work however will not make use of all the
|
||||||
|
hardware which is just a waste. 64bit images exist however are well
|
||||||
|
hidden, Dont fear 😨 **you can download the latest images from the
|
||||||
|
[raspberrypi.org index](https://downloads.raspberrypi.org/raspios_arm64/images/)**
|
||||||
|
|
||||||
|
To write the cards I use the [**Raspberry Pi imager**](https://www.raspberrypi.com/software/).
|
||||||
|
once you have **rpi-imager** installed and you have the 64bit raspbian
|
||||||
|
image, open ```sudo rpi-imager``` and on the "CHOOSE OS" section go to
|
||||||
|
the bottom and select use custom image.
|
||||||
|
|
||||||
|
> We dont need to unzip the file as the tool is clever enough to
|
||||||
|
handle that for us
|
||||||
|
|
||||||
|
**Before removing the SD card, mount the boot partition - usually the
|
||||||
|
first partition, look for a file called cmdline.txt - and create an
|
||||||
|
empty file called ssh** ```sudo touch ssh``` this basically enables
|
||||||
|
SSH on the Pis first boot allowing us to access the Pis in a totally
|
||||||
|
headless manner.
|
||||||
|
|
||||||
|
### Assemble the cluster
|
||||||
|
So assembly is very dependant on the kit you bought, and more
|
||||||
|
often than not the stuff needed here comes with instructions or is
|
||||||
|
self explanitory. So go ahead and assemble the cluster 🛠
|
||||||
|
|
||||||
|
**There is an order of operations that I reccomend:**
|
||||||
|
* Install PoE hats onto the Pis
|
||||||
|
* Install the SD Cards into the Pis
|
||||||
|
* Assemble the case and install Pis
|
||||||
|
* plug in ethernet cables
|
||||||
|
|
||||||
|
**Now allow the Pis to boot for a few minutes so it can resize the
|
||||||
|
file system**
|
||||||
|
|
||||||
|
### **Sort out the Network bits**
|
||||||
|
This is the easy part, there are two methods we can use to set a
|
||||||
|
static IP address, one is on your DHCP server and the other is on
|
||||||
|
the device itself. Personally I prefer to set static IPs on the
|
||||||
|
device itself so I will cover that here.
|
||||||
|
|
||||||
|
To find the current ip of your Pis you can go to your DHCP server
|
||||||
|
and look for the DHCP leases for the Pis.
|
||||||
|
|
||||||
|
**SSH to the Pi** then open and edit the following files
|
||||||
|
* /etc/hosts
|
||||||
|
* edit this line with your hostname: ```127.0.1.1 mainpi```
|
||||||
|
* /etc/hostname
|
||||||
|
* edit this file with your hostname: ```mainpi```
|
||||||
|
* /etc/dhcpcd.conf
|
||||||
|
* knowing we will be using only static IPs here I delete
|
||||||
|
everything in the file add the following
|
||||||
|
* ```
|
||||||
|
interface eth0
|
||||||
|
static ip_address=10.10.10.20/24
|
||||||
|
static routers=10.10.10.1
|
||||||
|
static domain_name_servers=10.10.10.1
|
||||||
|
```
|
||||||
|
**Now reboot the pi** ```sudo shutdown -r now```
|
||||||
|
|
||||||
|
|
||||||
Executable
BIN
Binary file not shown.
|
After Width: | Height: | Size: 185 KiB |
Reference in New Issue
Block a user