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.
💡 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.2is 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.
- Release notes: https://metallb.universe.tf/release-notes/#version-0-16-2
- GitHub release: https://github.com/metallb/metallb/releases/tag/v0.16.2
What’s New
For a patch release (0.16.1 → 0.16.2) on MetalLB, operators should generally expect:
- Bugfixes in the
controllerand/orspeakercomponents (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
.2patch 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
Option 1: Helm (recommended)
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-valuesOption 2: Manifest-based install
kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.16.2/config/manifests/metallb-native.yamlPre-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.yamlVerify
# 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=LoadBalancerTail 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=5mCommon Issues
- Speaker pods crashlooping after upgrade: check for leftover
v0.16.1config that may conflict with new validation logic; review speaker logs for CRD parsing errors. - Existing LoadBalancer Services lose their IP: usually indicates
IPAddressPoolorL2AdvertisementCRDs weren’t preserved during ahelm upgrade --reuse-values; restore from the backup taken pre-upgrade. - Helm version mismatch:
helm upgradewon’t pull0.16.2unlesshelm repo updatewas 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
LoadBalancerIP assignment and BGP session state before rolling to production. - Pin the Helm chart version explicitly (
--version 0.16.2) rather than relying onlatestto keep upgrades auditable and reproducible. - Keep CRD backups as part of the standard MetalLB upgrade runbook, even for patch releases.

Recommended
Kubernetes Recipes — The Complete Book100+ production-ready patterns with detailed explanations, best practices, and copy-paste YAML. Everything in one place.
Get the Book →Learn by Doing
CopyPasteLearn — Hands-on Cloud & DevOps CoursesMaster Kubernetes, Ansible, Terraform, and MLOps with interactive, copy-paste-run lessons. Start free.
Browse Courses →🎓 Deepen Your Skills — Hands-on Courses
Courses by CopyPasteLearn.com — Learn IT by Doing
