要修改文件-命名空间-节点选择器
 

#apiVersion: v1
##kind: ConfigMap
##metadata:
##  name: emqx-config
##data:
##  emqx.conf: |
## 
#
---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: emqx-pv
spec:
  capacity:
    storage: 5Gi
  volumeMode: Filesystem
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Retain
  storageClassName: local-storage
  hostPath:
    path: /store/data/emqx
    type: DirectoryOrCreate
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: emqx-pvc
  namespace: middle-ware-sy
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 5Gi
  storageClassName: local-storage
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: emqx
  namespace: middle-ware-sy
spec:
  serviceName: "emqx-headless"
  replicas: 1
  selector:
    matchLabels:
      app: emqx
  template:
    metadata:
      labels:
        app: emqx
    spec:
      nodeName: node2
      containers:
        - name: emqx
          image: emqx:5.8.3
          ports:
            - containerPort: 1883
              name: mqtt
            - containerPort: 18083
              name: dashboard
          volumeMounts:
      #      - mountPath: /opt/emqx/data/mnesia
      #        name: emqx-pvc
      #        subPath: mnesia
            - mountPath: /opt/emqx/data
              name: emqx-pvc
              subPath: data
            - mountPath: /opt/emqx/logs
              name: emqx-pvc
              subPath: logs
            - name: timezone
              mountPath: /etc/localtime
            #- mountPath: /opt/emqx/etc
            #  name: emqx-pvc
            #  subPath: etc
      volumes:
        - name: emqx-pvc
          persistentVolumeClaim:
            claimName: emqx-pvc
        - name: timezone
          hostPath: 
            path: /usr/share/zoneinfo/Asia/Shanghai
---
apiVersion: v1
kind: Service
metadata:
  name: emqx-service
  namespace: middle-ware-sy
spec:
  type: NodePort
  selector:
    app: emqx
  ports:
    - name: mqtt
      port: 1883
      targetPort: 1883
      nodePort: 30004
    - name: dashboard
      port: 18083
      targetPort: 18083
      nodePort: 30005
    - name: mqtt-tls
      port: 8883
      targetPort: 8883
      nodePort: 30006
    - name: mqtt-wss
      port: 8084
      targetPort: 8084
      nodePort: 30007
    - name: mqtt-ws
      port: 8083
      targetPort: 8083
      nodePort: 30008

【实现1个emqx,部署在主节点】

目录映射关系{

/data/emqx/etc:/opt/emqx/etc

/data/emqx/data:/opt/emqx/data

/data/emqx/log:/opt/emqx/log }

端口{

web地址:18083:32205

订阅地址:1883:32201

}

部署流程:

  1. helm工具+emqx仓库源

wget https://get.helm.sh/helm-v3.12.3-linux-amd64.tar.gz

tar -zxvf helm-v3.12.3-linux-amd64.tar.gz

cp linux-amd64/helm /usr/local/bin/

helm version

helm repo add emqx https://repos.emqx.io/charts

helm repo update

mkdir -p /data/emqx

chmod 777 -R /data/emqx

2.解压emqx包

tar -xf emqx.tar.gz

cd emqx/emqx

vim emqx-kind.yml

ports:

    - name: mqtt

      port: 1883 #修改为1883,或者新增一段1883

      targetPort: 1883

      nodePort: 32201  # 指定 NodePort 用于 MQTT 服务

    - name: dashboard

      port: 18083

      targetPort: 18083

      nodePort: 32205  # 指定 NodePort 用于 Dashboard 服务

#1883为物联网设备mqtt连接端口

#8083为web应用的websocket连接端口

kubectl apply -f emqx-kind.yml

helm install my-emqx emqx/emqx -f values.yaml

#helm install my-emqx emqx/emqx -f values.yaml --namespace middle-ware-sy

#helm uninstall my-emqx --namespace middle-ware-sy#删除

#helm install my-emqx emqx/emqx -f values.yaml -n middle-ware-sy#重新安装

3.验证状态

kubectl get pods -A

emqx  running

若是有报错:

#起不来,因为镜像,修改values.yml里的image还有sts.yml里的image

kubectl describe pods my-emqx-0 -n default

Events:

  Type     Reason     Age                 From               Message

  ----     ------     ----                ----               -------

  Normal   Scheduled  100s                default-scheduler  Successfully assigned default/my-emqx-0 to node2

  Normal   Pulled     44s (x4 over 100s)  kubelet            Container image "emqx/emqx:5.8.5" already present on machine

  Normal   Created    44s (x4 over 100s)  kubelet            Created container emqx

  Normal   Started    44s (x4 over 99s)   kubelet            Started container emqx

  Warning  BackOff    10s (x8 over 93s)   kubelet            Back-off restarting failed container

docker pull emqx/emqx:6.8.7

#/data/emqx目录权限不足,chmod 777 -R /data/emqx

kubectl logs my-emqx-0 -n default

mkdir: cannot create directory ‘/opt/emqx/data/configs’: Permission denied

#如果是二次部署,需要删除/data/emqx下面的所有数据

kubectl delete -f emqx.yaml  #先停止emqx,不再生成数据

rm -fr /data/emqx/* /store/data/emqx/* #删除目录下数据

【emqx.yml方式部署】

[root@master kind]# cat emqx.yml

#apiVersion: v1

##kind: ConfigMap

##metadata:

##  name: emqx-config

##data:

##  emqx.conf: |

##

#

---

apiVersion: v1

kind: PersistentVolume

metadata:

  name: emqx-pv

spec:

  capacity:

    storage: 5Gi

  volumeMode: Filesystem

  accessModes:

    - ReadWriteOnce

  persistentVolumeReclaimPolicy: Retain

  storageClassName: local-storage

  hostPath:

    path: /store/data/emqx

    type: DirectoryOrCreate

---

apiVersion: v1

kind: PersistentVolumeClaim

metadata:

  name: emqx-pvc

  namespace: middle-ware-sy

spec:

  accessModes:

    - ReadWriteOnce

  resources:

    requests:

      storage: 5Gi

  storageClassName: local-storage

---

apiVersion: apps/v1

kind: StatefulSet

metadata:

  name: emqx

  namespace: middle-ware-sy

spec:

  serviceName: "emqx-headless"

  replicas: 1

  selector:

    matchLabels:

      app: emqx

  template:

    metadata:

      labels:

        app: emqx

    spec:

      nodeName: node2

      containers:

        - name: emqx

          image: emqx:5.8.3

          ports:

            - containerPort: 1883

              name: mqtt

            - containerPort: 18083

              name: dashboard

          volumeMounts:

      #      - mountPath: /opt/emqx/data/mnesia

      #        name: emqx-pvc

      #        subPath: mnesia

            - mountPath: /opt/emqx/data

              name: emqx-pvc

              subPath: data

            - mountPath: /opt/emqx/logs

              name: emqx-pvc

              subPath: logs

            #- mountPath: /opt/emqx/etc

            #  name: emqx-pvc

            #  subPath: etc

      volumes:

        - name: emqx-pvc

          persistentVolumeClaim:

            claimName: emqx-pvc

---

apiVersion: v1

kind: Service

metadata:

  name: emqx-service

  namespace: middle-ware-sy

spec:

  type: NodePort

  selector:

    app: emqx

  ports:

    - name: mqtt

      port: 1883

      targetPort: 1883

      nodePort: 30004

    - name: dashboard

      port: 18083

      targetPort: 18083

      nodePort: 30005

  1. mysql创建库和表用来给emqx存储连接信息(账密)
create database heihei

USE heihei;

CREATE TABLE IF NOT EXISTS `mqtt_acl` (

  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,

  `username` varchar(100) NOT NULL,

  `permission` varchar(5) NOT NULL,

  `action` varchar(9) NOT NULL,

  `topic` varchar(100) NOT NULL,

  `qos` tinyint(1),

  `retain` tinyint(1),

  INDEX username_idx(username),

  PRIMARY KEY (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;



CREATE TABLE IF NOT EXISTS `mqtt_user` (

  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,

  `username` varchar(100) DEFAULT NULL,

  `password_hash` varchar(100) DEFAULT NULL,

  `salt` varchar(35) DEFAULT NULL,

  `is_superuser` tinyint(1) DEFAULT 0,

  `created` datetime DEFAULT NULL,

  PRIMARY KEY (`id`),

  UNIQUE KEY `mqtt_username` (`username`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;



INSERT INTO `mqtt_user` (`username`, `password_hash`, `salt`)

VALUES ('test', 'b94c8b48b9ce0c98f11f11be025d9aa56ee40d5f89598c35a2a5cf118db0c054', 'maker_sjy');

#mqttx测试账密:test/test,mqtt服务连接的账密

# 参考:https://blog.csdn.net/maker_knz/article/details/120727309
# 生成密钥网页:https://www.cmd5.com/hash.aspx
INSERT INTO `mqtt_user` ( `username`, `password_hash`, `salt`)
VALUES
        ('test', 'b94c8b48b9ce0c98f11f11be025d9aa56ee40d5f89598c35a2a5cf118db0c054', 'maker_sjy');

5.登录webui界面配置mysql连接

浏览器访问-->服务器ip:32205

默认账密:admin/public

改密码:d44cdafa2

6.emqx配置更改

#放行规则

kubectl exec -it my-emqx-0 -- /bin/bash

echo "{allow,all}." >>etc/acl.conf

#重启生效配置

kubectl delete pod my-emqx-0 -n default

kubectl get pod my-emqx-0 -n default -w

7.mqttx测试

#下载mqttx :https://www.emqx.com/zh/downloads/MQTTX/v1.11.1/MQTTX-Setup-1.11.1-x64.exe

test/test账号

Logo

欢迎加入DeepSeek 技术社区。在这里,你可以找到志同道合的朋友,共同探索AI技术的奥秘。

更多推荐