MetalLB
Set up MetalLB by following the upstream guide: MetalLB documentation.
The rest of this page covers how to deploy MetalLB on a Kairos node with K3s.
In this tutorial, we'll walk through the steps of setting up a Kairos node on your local network using the 192.168.1.10-192.168.1.20 IP range, with MetalLB and K3s.
MetalLB is a load balancer implementation for bare metal Kubernetes clusters that uses standard routing protocols. It's particularly useful when used with K3s in Kairos, as it provides load balancing for bare metal clusters and helps manage IP addresses within the cluster. K3s is a lightweight Kubernetes distribution that is easy to install and maintain.
Check out the bundle example to configure MetalLB with bundles. Bundles provides a streamlined way to publish and re-use configuration between nodes.
To get started, you'll need to use the standard images, which include k3s. We'll be using the k3s manifest method to deploy MetalLB.
Follow the Installation documentation, and use the following cloud config file with Kairos:
#cloud-config
hostname: metal-{{ trunc 4 .MachineID }}
users:
- name: kairos
# Change to your pass here
passwd: kairos
groups:
- admin
ssh_authorized_keys:
# Add your github user here!
- github:mudler
k3s:
enabled: true
args:
- --disable=traefik,servicelb
# Additional manifests that are applied by k3s on boot
write_files:
- path: /var/lib/rancher/k3s/server/manifests/metallb.yaml
permissions: "0644"
content: |
apiVersion: v1
kind: Namespace
metadata:
name: metallb-system
---
apiVersion: helm.cattle.io/v1
kind: HelmChart
metadata:
name: metallb
namespace: metallb-system
spec:
chart: https://github.com/metallb/metallb/releases/download/metallb-chart-0.13.7/metallb-0.13.7.tgz
- path: /var/lib/rancher/k3s/server/manifests/addresspool.yaml
permissions: "0644"
content: |
apiVersion: metallb.io/v1beta1
kind: IPAddressPool
metadata:
name: default
namespace: metallb-system
spec:
addresses:
- 192.168.1.10-192.168.1.20
---
apiVersion: metallb.io/v1beta1
kind: L2Advertisement
metadata:
name: default
namespace: metallb-system
spec:
ipAddressPools:
- default
There are a few things to note in this configuration file:
- In the
k3sblock, we use the--disableflag to disabletraefikandservicelb, which are the default load balancers for k3s. - In the
write_filesblock, we write manifests (in/var/lib/rancher/k3s/server/manifests/see docs) to deploy MetalLB and configure it to use the192.168.1.10-192.168.1.20IP range. Make sure to choose an IP range that doesn't interfere with your local DHCP network.
And that's it! You should now have MetalLB and K3s set up on your Kairos node.