Networking intermediate ⏱ 15 minutes K8s 1.27+

What's New in MetalLB v0.16.2: Upgrade Guide for Kubernetes Operators

MetalLB v0.16.2 patch release overview: upgrade steps, verification, and what to check before updating your bare-metal LoadBalancer.

By Luca Berton • • 📖 5 min read

💡 Quick Answer: MetalLB v0.16.2 is a patch release on the 0.16.x branch; the upstream release notes page for this specific version is thin on detail at the time of writing, so treat this as a maintenance/bugfix update and review the linked release notes before rolling it out broadly.

The Problem

Running an outdated MetalLB version means missing bugfixes and small improvements that land in patch releases. Operators tracking the metallb-chart-0.16.1 Helm chart need a clear path to move to the v0.16.2 controller/speaker images and corresponding chart.

The Solution

Treat v0.16.2 as a drop-in patch upgrade within the 0.16.x line: no API or CRD version bump is expected for a patch release, but you should still read the official release notes before upgrading production clusters, since the notes content for this tag wasn’t fully detailed in the source used for this recipe.

⚠️ The detailed per-version changelog for v0.16.2 is published at the MetalLB release notes page. Because the notes weren’t reproduced in full here, don’t assume specific fixes — check the link below instead of relying on this recipe for exact bug numbers.

What’s New

For a patch release (0.16.1 → 0.16.2) on MetalLB, operators should generally expect:

  • Bugfixes in the controller and/or speaker components (BGP/Layer2 mode).
  • No breaking changes to CRDs (IPAddressPool, L2Advertisement, BGPAdvertisement, BGPPeer, Community) are expected in a patch version, but confirm against the release notes link above.
  • No new minor features are typically introduced in a .2 patch release.

Since the source notes for this specific tag are thin, do not assume any specific CVE fix, flag addition, or deprecation — verify directly at the release notes URL before writing this into a change-management ticket.

Upgrade Steps

helm repo add metallb https://metallb.github.io/metallb
helm repo update

# Check current release
helm list -n metallb-system

# Upgrade to the chart matching v0.16.2
helm upgrade metallb metallb/metallb \
  --namespace metallb-system \
  --version 0.16.2 \
  --reuse-values

Option 2: Manifest-based install

kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.16.2/config/manifests/metallb-native.yaml

Pre-upgrade checklist

# Back up existing CRDs/config before upgrading
kubectl get ipaddresspools.metallb.io -n metallb-system -o yaml > ipaddresspools-backup.yaml
kubectl get l2advertisements.metallb.io -n metallb-system -o yaml > l2advertisements-backup.yaml
kubectl get bgppeers.metallb.io -n metallb-system -o yaml > bgppeers-backup.yaml

Verify

# Confirm controller and speaker pods are running the new image tag
kubectl get pods -n metallb-system -o wide

kubectl get deployment controller -n metallb-system \
  -o jsonpath='{.spec.template.spec.containers[0].image}'

kubectl get daemonset speaker -n metallb-system \
  -o jsonpath='{.spec.template.spec.containers[0].image}'

# Expect output containing: metallb/controller:v0.16.2 and metallb/speaker:v0.16.2

# Check CRDs are intact and LoadBalancer IPs are still assigned
kubectl get ipaddresspools.metallb.io -n metallb-system
kubectl get svc -A --field-selector spec.type=LoadBalancer

Tail logs briefly after upgrade to catch any reconciliation errors:

kubectl logs -n metallb-system deployment/controller --since=5m
kubectl logs -n metallb-system daemonset/speaker --since=5m

Common Issues

  • Speaker pods crashlooping after upgrade: check for leftover v0.16.1 config that may conflict with new validation logic; review speaker logs for CRD parsing errors.
  • Existing LoadBalancer Services lose their IP: usually indicates IPAddressPool or L2Advertisement CRDs weren’t preserved during a helm upgrade --reuse-values; restore from the backup taken pre-upgrade.
  • Helm version mismatch: helm upgrade won’t pull 0.16.2 unless helm repo update was run first — stale local repo cache is a common cause of “version not found” errors.

Best Practices

  • Always read the linked release notes in full before upgrading production MetalLB, especially for BGP-mode clusters where peer compatibility matters.
  • Stage the upgrade in a non-production cluster first and confirm LoadBalancer IP assignment and BGP session state before rolling to production.
  • Pin the Helm chart version explicitly (--version 0.16.2) rather than relying on latest to keep upgrades auditable and reproducible.
  • Keep CRD backups as part of the standard MetalLB upgrade runbook, even for patch releases.
#metallb #load-balancer #bare-metal #networking #upgrade #bgp #layer2
Luca Berton
Written by Luca Berton

Principal Solutions Architect specializing in Kubernetes, AI/GPU infrastructure, and cloud-native platforms. Author of Kubernetes Recipes and creator of CopyPasteLearn courses.

Kubernetes Recipes book cover

Want More Kubernetes Recipes?

This recipe is from Kubernetes Recipes, our 750-page practical guide with hundreds of production-ready patterns.

Luca Berton Ansible Pilot Ansible by Example Open Empower K8s Recipes Terraform Pilot CopyPasteLearn ProteinLens