这是一篇关于使用 Eclipse Mosquitto 在 Kubernetes 上运行高可用 MQTT 代理的文章,主要内容总结如下:
- 主要优势:相较于单个 Pod 部署,此设置在节点故障时停机时间仅为 5 秒,且有共享状态,故障转移时所有消息都可用。
配置介绍:
- 使用的组件:利用 Kubernetes 核心原语(
Deployments
、Services
、ConfigMaps
和RBAC
)以及 TraefikIngressRouteTCP
来暴露 MQTT 流量。 - 拓扑结构:部署主备 Mosquitto 代理,分别在不同节点的 Pod 中,通过自定义故障转移控制器处理流量重定向。
- 配置细节:创建
raymii-mosquitto-dev
命名空间,两个 ConfigMaps 分别配置主备代理的监听端口等,多个 Deployment 定义主备 Mosquitto 容器及failover
容器,Service 用于路由流量,RBAC 赋予failover
Pod权限,Traefik IngressRouteTCP 路由外部 MQTT 流量。
- 使用的组件:利用 Kubernetes 核心原语(
- 工作原理:
failover
Pod 中的 shell 循环持续检查主代理的就绪状态,若主代理不可用,将raymii-mosquitto-svc
的选择器修补为指向备用代理,实现快速故障转移,恢复后自动切换回主代理。 - YAML 文件说明:包含命名空间、ConfigMaps、Deployments、Services、RBAC、Traefik IngressRouteTCP 等资源定义,用于创建和配置整个 MQTT 集群,还介绍了 k3s 1.32 的
HelmChartConfig
用于暴露除 443 和 80 之外的端口。 - Traefik Helm Chart Config:在 k3s 1.32 中,默认 Traefik 仅用于 HTTP(S)路由,需要通过
HelmChartConfig
CRD 注入自定义值来配置 Traefik 暴露 TCP 端口,以路由 MQTT 服务。
总之,此设置实现了高可用的 MQTT 代理部署,通过 Kubernetes 和 Traefik 的组合提供了可靠的消息传递服务。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。