EMQX 在 K8s 环境部署 + 数据持久化 完整实操笔记
一、核心目标在 K8s 集群中部署 EMQX 5.0.23,实现:Dashboard 管理员密码持久化(重启 Pod 不恢复默认);MQTT 消息持久化(保留消息重启后可读取);生产级架构:Headless 服务(内部通信)+ NodePort 服务(外部访问)。二、整体流程 问题解决(从 0 到生产)阶段 1:初始部署(遇到的核心问题)1. 初始部署 EMQX(无持久化配置)问题:部署后修改密码,重启 Pod 密码恢复默认(admin/public);kubectl get pods -w 命令一直输出不退出。原因:-w 是 watch 实时监控参数,会持续输出直到 Ctrl+C;EMQX 5.x 密码存储在 Mnesia 数据库,默认写入 Pod 本地存储,重启丢失;未固定 EMQX 节点名,重启后节点名变化,加载新的 Mnesia 数据库。2. 基础准备:备份 + 环境确认# 1. 创建 EMQX 配置目录 mkdir -p /root/k8s/emqx cd /root/k8s/emqx # 2. 备份后续所有操作的配置文件(防止改错) cp /root/k8s/emqx/emqx.yaml /root/k8s/emqx/emqx.yaml.bak.$(date +%Y%m%d%H%M%S) # 3. 确认 NFS 存储类存在(持久化依赖) kubectl get sc | grep nfs阶段 2:核心修复(密码持久化)1. 编写带持久化配置的 EMQX YAML(解决密码丢失)# /root/k8s/emqx/emqx.yaml 基础版 apiVersion: apps/v1 kind: StatefulSet metadata: name: emqx namespace: cfwl-tms-dev spec: serviceName: emqx-headless # 绑定 Headless 服务 replicas: 1 selector: matchLabels: app: emqx template: metadata: labels: app: emqx spec: containers: - name: emqx image: 192.168.88.201:80/library/emqx:5.0.23 imagePullPolicy: IfNotPresent ports: - containerPort: 1883 name: mqtt - containerPort: 18083 name: dashboard env: - name: TZ value: Asia/Shanghai # 核心:固定节点名(解决 Mnesia 数据库路径变化) - name: EMQX_NODE_NAME value: emqx@emqx-0.emqx-headless.cfwl-tms-dev.svc.cluster.local - name: EMQX_CLUSTER__DISCOVERY_STRATEGY value: static - name: EMQX_CLUSTER__STATIC__SEEDS value: emqx@emqx-0.emqx-headless.cfwl-tms-dev.svc.cluster.local - name: EMQX_DATA_DIR
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2507783.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!