To replicate services like you get in AWS or Azure I prefer to have a load balancer. In my Lab I am Running a AVI load balancer but my PI cluster is running in my Home Network Where I do not have the resources available to deploy a dedicated external Load balancer and for this MetalLB is perfect.
The MetalLB installation is 2 step process. Firstly we will deploy all the resources and in step 2 we will do the configuration.
The first part can be done as described in the documentation from MetalLB.
sudo kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.12.1/manifests/namespace.yaml sudo kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.12.1/manifests/metallb.yaml
Awesome, Now we have a new Namespace with MetalLB deployed.
For the configuration we need to create a configmap telling MetalLB what IP range it should use. For this we create a new file called config.yaml with the below code.
Modify the addresses to match a part of your network which MetalLB can control. This should not overlap any DHCP scope.
apiVersion: v1 kind: ConfigMap metadata: namespace: metallb-system name: config data: config: | address-pools: - name: default protocol: layer2 addresses: - 10.30.0.30-10.30.0.50
and we can apply it with
sudo kubectl apply -f config.yaml
Now we have a functioning loadbalancer
if we have a look at the services we can see that before the deployment the external IP for Traefik was pending. this is because we did not use the serviceLB option when deploying K3S
Once MetalLB is deployed and configured we can see that Traefik got an IP from the range we supplied in our configmap
Up Next Monitoring
While doing my research for this project I watch a lot of video made by Jeff Geerling and his Video Series on Pi Clusters was very helpful. As with most open source projects there is a wealth of information out there but the trick is to find the right combination for your project. As part of his project he again piggybacked on some work done by Carlos Eduardo. I use this in all my K3S projects as it just works. So below is the Short of it.
Install the Pre Requisites
sudo apt update && sudo apt install -y build-essential golang
Clone the Project
git clone https://github.com/carlosedp/cluster-monitoring.git cd cluster-monitoring
in the vars.jsonnet file we need to set the K3S options and also update out URL for monitoring.
Here I set the k3s master node URL as well as the Traefik ingress url
I also enabled the armExporter to get stats for my Raspberry PI’s
Now we can build and deploy the solution
make vendor && make && sudo make deploy
Once the deployment is done you should have access to your dashboard on the URL specified in the vars file
The default username and password is admin and admin