2021-03-13 00:23:06 +00:00
2021-03-13 00:23:06 +00:00
2021-03-14 09:51:17 +00:00
2021-03-13 00:23:06 +00:00
2021-03-13 00:23:06 +00:00

Raspberry Pi kubernetes cluster on Alpine linux setup

This repository is supposed to help if I'd EVER AGAIN destroy the whole cluster by accident. Code is a result of 6 hours coding marathon, but will be improved and patched in future.

Usage

Memory card preparations [step1]

To prepare memory cards check the step1 directory. If your Pi memory card is present under /dev/disk5 - you don't need to change anything, otherwise change it to the device of your choice.

PI_CARD="/dev/disk5"

Run the following script which will:

  • Format memory card
  • Split it into two partitions (1G + remaining)
  • Copy basic Alpine system onto 1G partition
  • Add an overlay allowing ethernet interface get up and SSH root access without the password
001-prepare-card.sh

Cluster preparations [step2]

Before

  • Modify pi-hosts.txt file and adjust it to your setup.
  • Modify address class in step2/static/k8s-metallb-dashboard-config.yaml to suit your network

Add following to your ~/.ssh/config file

Host pi?
  User root
  Hostname %h.local

Prepare your nodes for Ansible

001-prepare-ansible.sh

Run the playbook

ansible-playbook rpi.yaml -f 10

K8S definitions [step3]

Use makefile from step3 to apply / destroy resources

Required environment variables:

TRAEFIK_API_KEY // Traefik API key
GH_USER // GitHub user
GH_PAT // GitHub Personal Access Token

Outcome

  • Raspberry Pi cluster running Alpine linux as a base
  • MetalLB for load balancing in your LAN
  • Kubernetes dashboard installed and exposed via MetalLB
  • Traefik managing the.. traffic
Languages
Shell 57.1%
HCL 40.2%
Makefile 1.6%
Go Template 1.1%