- Pre-requisites
- Step 1 - Downloading the operating system
- Step 2 - Write the image file to removable media
- Step 3 - Enable ssh at startup
- Step 4 - Enable wifi at startup
This file serves as a complete step by step guide for creating a bare metal raspberry pi kubernetes cluster.
Pre-requisites
- This guide uses the k3s distribution of kubernetes from Rancher. I chose this distribution because it is a CNCF certified production grade implementation that is optimised for lightweight implementations such as ARM.
- For this guide I am using three Raspberry Pi 4 4GB machines. The cluster will have one leader node and two worker nodes. For resiliency puposes in future I will update the cluster to run with two leader nodes.
- This guide requires each Raspberry Pi to have a removable SD card or other removable boot media. I am use three 32GB SD Cards though any USB or SD card at least 8GB in size should work fine.
Step 1 - Downloading the operating system
Our first step is to download an image of the latest version of raspbian lite. This is a minimal debian based distribution optimised for rapsberry pis.
Note: There the raspberry pi download site provide a SHA-256 hash that can be used to verify downloads. While not covered in this guide this is reccomended to ensure the image you download is genuine.
cd ~/Downloads/
wget 'https://downloads.raspberrypi.org/raspbian_lite_latest'
Step 2 - Write the image file to removable media
Our next step is to write the downloaded image file to our removable media. This step needs to be repeated for each raspberry pi in the cluster.
Note: As my development environment is based on wsl I need to use
a third party tool to write the image. If you are on a standard linux
distribution you can use the dd utility to write the image.
The image writing utility I use is balena etcher. After downloading the latest version:
- Insert your removable media.
- Select the image file you downloaded earlier.
- Select your removable media and start writing the image.
Step 3 - Enable ssh at startup
As our cluster will be headless, i.e. have no screen keyboard or mouse plugged in we need to ensure ssh is configured from boot so that we can remotely connect.
To do this we just need to add an empty file named ssh to our newly
created sd card
sudo mkdir /media/sdcard
sudo mount /dev/[SDCARD] /media/sdcard -o umask=000
sudo touch /media/sdcard/ssh
Step 4 - Enable wifi at startup
For this guide we are running our cluser wirelessly. To ensure we can access our pi's once they boot we need to ensure they boot with a wifi configuration that will connect to our desired network.
To achieve this we need to set a configuration for the wpa_supplicant application that our raspberry pi's use for managing wireless.
For security reasons I don't store wireless access point details here. Instead they are retrieved at runtime of the code block using the bitwarden command line utility.
export WIRELESS_SSID=`bw get username wifi`
export WIRELESS_PASS=`bw get password wifi`
cat > /media/sdcard/wpa_supplicant.conf << EOF
country=nz
update_config=1
ctrl_interface=/var/run/wpa_supplicant
network={
scan_ssid=1
ssid=$WIRELESS_SSID
psk=$WIRELESS_PASS
}
EOF
After writing the file we will use cat to verify the details.
If all details are correct you can unmount and remove the media.