List of all the essential components
- 4 x Raspberry Pi 4 Model B (RAM is your choice)
- 4 x good value micro sd cards. I use Silicon Power 3D 32GB, as they are relatively cheap and work well with Rpis, but you are free to use whichever you want, just avoid unbranded or used.
- 2 x Power Banks (if you use 3 Pis only, you can try using only one bank, as it is advertised as a triple 15W). Obviously, this is a suitable choice only if you need the cluster up for a few hours, otherwise you need a power outlet capable of 60W+ with 4 x 15W+ outputs. You could also use a PC 5V PSU and power the Pis through GPIO pins. If you have some money to splash out, you can think about buying a PoE switch, along with 4 x Raspberry Pi PoE HAT, to power each board directly from its ethernet cable (total additional cost is around £70).
- 4 x USB cables. You don't need these cables if you're using a PoE switch. Actually, if you buy the power banks I suggested above, they are already included therein (although one is possibly a bit stretched).
- 4 x network RJ45 Cat6 patch cables You can also build them yourself
- 5-port unmanaged Gigabit network switch
- 4-layers Raspberry Pi 4 Stackable Case
- a wired/wireless keyboard, only needed to text the initial command to initiate the
sshservice. - An external laptop/desktop to manage the Pis headless. You can obviously work on the Pis themselves if you so prefer, but in that case you need at least a permanent keyboard and a monitor, switching cables between the Pis when needed.
| Item | Seller | Quantity | Unit Cost | Total Cost |
|====|====|====|====|====|
| Raspberry Pi 4B 4GB | ebay.co.uk | 4 | 42.65 | 170.60 |
| INIU Power Bank 10000mAh Tri-3A Outputs | amazon.co.uk | 2 | 11.99 | 23.98 |
| TP-Link TL-SG105S 5-Port Ethernet Gigabit Switch | amazon.co.uk | 1 | 7.70 | 7.70 |
| Cat 6 Ethernet Cable, Ancable 15cm (4 Pack) Flat | amazon.co.uk | 1 | 6.90 | 6.90 |
| Silicon Power 3D SD Card 32 GB (pack of 5)| amazon.com | 1 | 31.47 | 31.47 |
| GeeekPi Pi Rack Case with Cooling Fan and Heatsink, 4 Layers | aliexpress.com | 1 | 11.20 | 11.20 |
Setup
Flash the most recent Raspberry Pi OS Lite image on each SD card, using BalenaEtcher.
Insert one card in each pi, gear up ethernet, HDMI, keyboard and power cables, then follow the next few steps for each of them.
-
find the Raspberry Pi’s IP address in the booting output log.
-
enable 'ssh' server (use the hardware connected keyboard):
sudo touch /boot/ssh sudo reboot -
once rebooted, you can connect using a terminal
ssh pi@[IP-ADDRESS], or with an appropriate client software, like [Putty]() or [MobaXterm]() on Windows. The default username ispiand the default password israspberry. -
add new user:
sudo su adduser username usermod -aG sudo username reboot -
delete
piuser:{ login as username } sudo userdel -r pi -
change hostname editing the following two files (enter master or worker[x], x = 1,2,3):
sudo nano /etc/hostname sudo nano /etc/hosts sudo reboot -
update the system:
sudo apt update sudo apt -y full-upgrade -
install some prerequisite tools:
sudo apt -y install net-tools ssh ufw dirmngr gnupg apt-transport-https ca-certificates software-properties-common build-essential nano dos2unix man-db git-core libgit2-dev libauthen-oath-perl openssh-server libsocket6-perl -
enable the firewall:
sudo ufw enable sudo ufw allow 22 -
to change the current dynamic ip address with a static one (in my case: 192.168.0.11x, x = 0,1,2,3), start with opening the configuration file:
sudo nano /etc/dhcpcd.confthen scroll down and change the following lines as required by your situation:
interface eth0 static ip_address=192.168.0.11x/24 static routers=192.168.0.1 static domain_name_servers=192.168.0.1 8.8.8.8 8.8.4.4where:
- interface defines which network interface you are setting the configuration for (
eth0is wired,wlan0is wireless) - static ip_address is the IP address that you want to set your device to (make sure you leave the /24 at the end)
- static routers is the IP address of your gateway (probably your router's IP address)
- static domain_name_servers is the IP address of your DNS (your router).
Once finished, reboot the system:
sudo rebootRemember to change the ip address in your ssh connection!
- interface defines which network interface you are setting the configuration for (
-
add credentials to allow automation:
-
create an ssh keypair on your machine, without passphrase, then paste the public part into a text file:
mkdir ~/.ssh nano ~/.ssh/authorized_keys -
add the correct permissions on the above directory and file therein:
chmod 700 ~/.ssh chmod 644 ~/.ssh/authorized_keys -
open the ssh service configuration file for editing:
sudo nano /etc/ssh/sshd_configand change the following lines:
PubkeyAuthentication yes AuthorizedKeysFile %h/.ssh/authorized_keys PasswordAuthentication no ChallengeResponseAuthentication no UsePAM no -
restart the
sshservice:sudo systemctl restart ssh -
check that you can still ssh into the pi before closing the current open connection!
-
-
for any other configuration, run:
sudo raspi-config
K8s with Ansible
-
install ansible
echo "deb http://ppa.launchpad.net/ansible/ansible/ubuntu trusty main" | sudo tee -a /etc/apt/sources.list sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 93C4A3FD7BB9C367 sudo apt update sudo apt install -y ansible -
Lightweight Kubernetes distribution
-
GitHub repo to Build a Kubernetes cluster using k3s via Ansible
-
create a
hosts.inifile as follows:[master] 192.168.0.110 [node] 192.168.0.111 192.168.0.112 192.168.0.113 [k3s_cluster:children] master node