在 Kubernetes 上的高可用 Mosquitto MQTT

这是一篇关于使用 Eclipse Mosquitto 在 Kubernetes 上运行高可用 MQTT 代理的文章,主要内容总结如下:

  • 主要优势:相较于单个 Pod 部署,此设置在节点故障时停机时间仅为 5 秒,且有共享状态,故障转移时所有消息都可用。
  • 配置介绍

    • 使用的组件:利用 Kubernetes 核心原语(DeploymentsServicesConfigMapsRBAC)以及 Traefik IngressRouteTCP来暴露 MQTT 流量。
    • 拓扑结构:部署主备 Mosquitto 代理,分别在不同节点的 Pod 中,通过自定义故障转移控制器处理流量重定向。
    • 配置细节:创建raymii-mosquitto-dev命名空间,两个 ConfigMaps 分别配置主备代理的监听端口等,多个 Deployment 定义主备 Mosquitto 容器及failover容器,Service 用于路由流量,RBAC 赋予failoverPod权限,Traefik IngressRouteTCP 路由外部 MQTT 流量。
  • 工作原理failoverPod 中的 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)路由,需要通过HelmChartConfigCRD 注入自定义值来配置 Traefik 暴露 TCP 端口,以路由 MQTT 服务。

总之,此设置实现了高可用的 MQTT 代理部署,通过 Kubernetes 和 Traefik 的组合提供了可靠的消息传递服务。

阅读 10
0 条评论