
MetalLB 负载均衡器 v0.14 升级避坑指南配置迁移前必须处理的 3 个破坏性变更【免费下载链接】metallbA network load-balancer implementation for Kubernetes using standard routing protocols项目地址: https://gitcode.com/gh_mirrors/me/metallbMetalLB 是 Kubernetes 的网络负载均衡器实现通过 BGP 和二层协议把 Service 的 IP 宣告到集群外网络。这次 MetalLB 升级v0.13 → v0.14的核心差异只有一个旧的 ConfigMap 配置通道被彻底移除所有配置改为一组 CRD 管理IPAddressPool、BGPPeer、BGPAdvertisement 等。如果你一直用 ConfigMap 配置升级瞬间 MetalLB 会找不到任何配置Service 将全部丢失外部 IP。本文按时间线带你走完整个升级过程升级前摸底、升级中迁移配置并处理破坏性变更、升级后验证与回滚。升级前必查的 3 件事确认你是否还在用旧版 ConfigMap 配置v0.13 里你可以继续用metallb-system命名空间下的configConfigMap 来配置。先查一下kubectl get configmap -n metallb-system -o name如果它存在、且集群里没有任何 CRD 资源说明你升级前必须完成配置迁移反之则可以直接升级。备份旧配置迁移工具完全依赖这份文件生成新资源它丢了IP 池和 BGP 对等体信息就无法从集群恢复。先导出到本地文件再动手kubectl get configmap -n metallb-system config -o yaml metallb-config-backup.yaml检查集群版本并记录 Helm revisionv0.14 要求 Kubernetes 至少 1.21。同时记下当前 Helm release 的 revision 号——这是升级失败时回滚的唯一凭证务必写进你的操作记录里。如何把旧配置迁移到新 CRD这是整个 MetalLB 版本迁移里最关键的一步。项目自带 configmaptocrs/ 迁移工具把旧 ConfigMap 离线转换成包含新 CRD 的resources.yamlkubectl get configmap -n metallb-system config -o yaml config.yaml docker run -d -v $(pwd):/var/input quay.io/metallb/configmaptocrs跑完后当前目录会多出resources.yaml原来的单份 ConfigMap 被拆成 IPAddressPool、BGPPeer、BGPAdvertisement 等独立资源。应用前注意两点资源名会被清洗旧配置里带下划线或大写字母的池名会被自动改成连字符和小写。如果你别处按名字引用过这些池记得同步修改。生成的 BGPPeer 已经是 v1beta2 API其余资源为 v1beta1属正常现象。然后按顺序应用先装 CRD 再上资源顺序反了 controller 会一直报找不到资源kubectl apply -f config/crd/bases/ kubectl apply -f resources.yaml确认新资源状态正常后再删除旧 ConfigMap。v0.14 的三个核心变更点BGPPeer 从 v1beta1 弃用到 v1beta2集群里遗留的 v1beta1 BGPPeer 还能被转换 webhook 兜底但新字段和校验逻辑都只存在于 v1beta2。新建或修改 BGPPeer 时直接写apiVersion: metallb.io/v1beta2并排查一遍集群里是否还有旧版本的存量资源。FRR 模式成为默认 BGP 后端默认 BGP 宣告从内置 native 实现换成了 FRR。好处是支持 BFD、IPv6 等更完整的特性代价是每个节点多跑一个 FRR 容器资源占用上升升级前确认节点 CPU 和内存余量。如果确实要留在 native 模式可在 Helm values 中显式指定但该路径功能受限后续新特性只会加到 FRR 一侧。注解前缀切换Service 上metallb.universe.tf/address-pool这类注解被metallb.io/address-pool取代。旧前缀暂时仍有效但后续版本可能移除兼容处理建议升级时统一替换掉所有存量注解。升级后如何验证服务宣告状态升级完成后按三步验证kubectl get pods -n metallb-system -o widecontroller 与 speaker 全部 Runningkubectl get ipaddresspools -n metallb-system新版本 IPAddressPool 带 status 字段显示可用/已分配 IP 数量若显示耗尽说明迁移后池被占满需要扩段kubectl get servicebgpstatus -n metallb-system核对每个 Service 正在向哪些对等体宣告。有外部路由器的话登上去看 BGP 邻居会话 Established 且收到前缀才是真正成功。升级卡住怎么排查、如何回滚到旧版本⚠️ 看到 BGP not connected, 无路由 先别慌这表示会话已建立但没宣告任何路由与会话根本没建立是两类问题排查方向完全不同。常见排查入口BGPPeer 的 myASN、peerAddress 与旧配置不一致或 FRR 容器反复重启kubectl describe pod看事件CRD 与资源应用顺序颠倒controller 拉不到配置v0.13 残留的 ConfigMap 被删得太早而新资源还没建好。回滚方案如果约定时间内无法恢复先恢复业务——Helm 回滚到旧 revision、恢复备份的 ConfigMap、删掉新资源。前提是升级前那份 ConfigMap 备份在你彻底确认新配置正确之前不要删helm rollback metallb revision -n metallb-system kubectl apply -f metallb-config-backup.yaml业务恢复后再回头定位升级失败的根因。升级检查清单旧 ConfigMap 已导出备份到本地文件已记录当前 Helm revision 号已用 configmaptocrs 生成 resources.yaml并核对资源名变更先安装 CRD再应用新资源BGPPeer 全部使用 v1beta2 API节点资源足够承载 FRR 容器旧前缀注解已替换为metallb.io前缀已核对 IPAddressPool 状态与 ServiceBGPStatus 宣告关系外部路由器已确认 BGP 会话与路由宣告更多细节可参考项目内资料迁移工具说明configmaptocrs/README.mdHelm 配置选项charts/metallb/values.yaml完整发行说明website/content/release-notes/_index.md【免费下载链接】metallbA network load-balancer implementation for Kubernetes using standard routing protocols项目地址: https://gitcode.com/gh_mirrors/me/metallb创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考