====== MetalLB Setup on ZEDEDA EVE-K ======
===== Overview =====
MetalLB provides load balancer functionality for bare-metal Kubernetes clusters.
On ZEDEDA EVE-K, the MetalLB operator is installed manually via kubectl.
The IP pool and L2 advertisement are managed via ZedCloud GitOps (Fleet).
----
===== Installation =====
==== Step 1 — Install MetalLB Operator (manual) ====
MetalLB must be installed manually on the cluster. Fleet cannot manage the
operator directly because its manifest includes the namespace definition,
which creates a bootstrap conflict with Helm.
kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.14.5/config/manifests/metallb-native.yaml
Verify the operator is running:
kubectl get pods -n metallb-system
==== Step 2 — Configure via GitOps ====
Once the operator is running, Fleet deploys the IP pool and L2 advertisement
automatically via the ''metallb-config'' bundle.
----
===== Repository Structure =====
demo/charts/
└── infrastructure/
└── metallb-config/ ← managed by Fleet
├── Chart.yaml
├── fleet.yaml
├── values.yaml
└── templates/
├── ip-pool.yaml
└── l2adv.yaml
----
===== metallb-config Bundle =====
==== fleet.yaml ====
helm:
chart: .
releaseName: metallb-config
==== values.yaml ====
ipPool:
name: main-pool
addresses: 172.16.8.251-172.16.8.254
l2Advertisement:
name: main-l2
==== templates/ip-pool.yaml ====
apiVersion: metallb.io/v1beta1
kind: IPAddressPool
metadata:
name: {{ .Values.ipPool.name }}
namespace: metallb-system
spec:
addresses:
- {{ .Values.ipPool.addresses }}
==== templates/l2adv.yaml ====
apiVersion: metallb.io/v1beta1
kind: L2Advertisement
metadata:
name: {{ .Values.l2Advertisement.name }}
namespace: metallb-system
spec:
ipAddressPools:
- {{ .Values.ipPool.name }}
----
===== Verify =====
kubectl get pods -n metallb-system
kubectl get ipaddresspool -n metallb-system
kubectl get l2advertisement -n metallb-system