Sahan Serasinghe

Senior Software Engineer | Master of Data Science

Automating Raspberry Pi K3s provisioning with Ansible

2021-12-15iot 3 min read

In this article, we will be looking at how we can automate most of the steps involved in installing a Raspberry Pi+K3s cluster by using Ansible.

I explained how to set up a Kubernetes cluster on a Raspberry Pi in my previous article. In case you missed it, you can find it from the following link:

🔗 Building your own private Kubernetes cluster on a Raspberry PI 4 with K3S

If you have a fresh bunch of Raspberry Pis, you might want to follow Step 0 through to Step 8 in the above. However, it’s a one-off setup, so please proceed to the following sections if you already have done them.

In a nutshell, this is what we are trying to automate.

k3s-rapsberrypi-ansible-automation-0.png

Step 1 - Installing Ansible

So what do we need to get started? You need one or more RPis with Raspbian installed (or an OS supported by K3s). We can get to our desired state by using an Ansible playbook.

Ansible is an industry-leading IT automation tool to provision and manage your infrastructure in a declarative form such YAML.

The easiest way to get the steps to installing Ansible would be to head over to the official docs. For most OSs, it can be just installed via pip.

python -m pip install --user ansible

💡 Note: Use the latest version of Python installed on your machine. In my case, I have it set to python3 since Mac OS comes with an older version of Python installed.

Depending on your system and the internet connection, it will a bit of take time to install Ansible. Sometimes even if you installed it, it would still say that it can’t find ansible command. If that’s the case, feel free to follow this link. If you are on a Mac, you could also run a brew install ansible to install ansible.

k3s-rapsberrypi-ansible-automation-1.png

Step 2 - K3s Ansible Playbook

Without writing everything from the ground up, we will be using the k3s-ansible repo.

git clone git@github.com:k3s-io/k3s-ansible.git

Once you have cloned the repo, you can run the following command to create a new playbook for your RPi cluster provisioning. Make sure to replace my-cluster with the desired name for your cluster. In my case, I called it rpi-cluster

cp -R inventory/sample inventory/my-cluster

Next, we need to map out the nodes and master them in the inventory/my-cluster/hosts.ini file. Update the [master] and [node] attributes accordingly.

[master]
10.0.0.100

[node]
10.0.0.101

[k3s_cluster:children]
master
node

Under [node] attribute you could even specify a range of IPs if they are consecutive like so.

[node]
10.0.0.[101:105]

Check the inventory/my-cluster/group_vars/all.yml to set variables such as k3s_version and ansible_user, depending on your environment.

Step 3 - Running the Ansible Playbook

ansible-playbook site.yml -i inventory/rpi-cluster/hosts.ini --ask-pass

k3s-rapsberrypi-ansible-automation-2.png

You can now SSH into the Pi master or nodes and run kubectl commands within it.

if you want to uninstall everything that got installed as part of the playbook:

ansible-playbook reset.yml -i inventory/rpi-cluster/hosts.ini --ask-pass

Conclusion

This article looked at how we can automate provisioning our Raspberry Pi with Ansible. If you are new to DevOps and want to automate provisioning systems, this is a great start. A special shoutout to @itwars for putting this together and doing a lot of heavy lifting creating these scripts.

References

Loading...
Sahan Serasinghe - Engineering Blog

Sahan Serasinghe Senior Software Engineer at Canva | Azure Solutions Architect Expert | Master of Data Science at UIUC | CKAD