当前位置: 首页 > news >正文

emqx部署

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

#apiVersion: v1
##kind: ConfigMap
##metadata:
##  name: emqx-config
##data:
##  emqx.conf: |
## 
#
---
apiVersion: v1
kind: PersistentVolume
metadata:name: emqx-pv
spec:capacity:storage: 5GivolumeMode: FilesystemaccessModes:- ReadWriteOncepersistentVolumeReclaimPolicy: RetainstorageClassName: local-storagehostPath:path: /store/data/emqxtype: DirectoryOrCreate
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: emqx-pvcnamespace: middle-ware-sy
spec:accessModes:- ReadWriteOnceresources:requests:storage: 5GistorageClassName: local-storage
---
apiVersion: apps/v1
kind: StatefulSet
metadata:name: emqxnamespace: middle-ware-sy
spec:serviceName: "emqx-headless"replicas: 1selector:matchLabels:app: emqxtemplate:metadata:labels:app: emqxspec:nodeName: node2containers:- name: emqximage: emqx:5.8.3ports:- containerPort: 1883name: mqtt- containerPort: 18083name: dashboardvolumeMounts:#      - mountPath: /opt/emqx/data/mnesia#        name: emqx-pvc#        subPath: mnesia- mountPath: /opt/emqx/dataname: emqx-pvcsubPath: data- mountPath: /opt/emqx/logsname: emqx-pvcsubPath: logs- name: timezonemountPath: /etc/localtime#- mountPath: /opt/emqx/etc#  name: emqx-pvc#  subPath: etcvolumes:- name: emqx-pvcpersistentVolumeClaim:claimName: emqx-pvc- name: timezonehostPath: path: /usr/share/zoneinfo/Asia/Shanghai
---
apiVersion: v1
kind: Service
metadata:name: emqx-servicenamespace: middle-ware-sy
spec:type: NodePortselector:app: emqxports:- name: mqttport: 1883targetPort: 1883nodePort: 30004- name: dashboardport: 18083targetPort: 18083nodePort: 30005- name: mqtt-tlsport: 8883targetPort: 8883nodePort: 30006- name: mqtt-wssport: 8084targetPort: 8084nodePort: 30007- name: mqtt-wsport: 8083targetPort: 8083nodePort: 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');

# 参考: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');

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

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

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

默认账密:admin/public

改密码:Wod44cm,9

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测试

test/test账号

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

相关文章:

  • 有源医疗器械的安规三项
  • three.js后处理原理及源码分析
  • VUE3:封装一个评论回复组件
  • Vue基础(7)_计算属性
  • 【mysql】python+agent调用
  • Adobe Lightroom Classic v14.3.0.8 一款专业的数字摄影后期处理软件
  • 【C++QT】Item Views 项目视图控件详解
  • 第二阶段:基础加强阶段总体介绍
  • 全面解析DeepSeek算法细节(2) —— 多令牌预测(Multi Token Prediction)
  • 如何在idea中编写spark程序
  • FDA会议类型总结
  • 排序算法详解笔记(一)
  • 生物化学笔记:神经生物学概论03 脑的高保真数字信号 突触可塑性
  • jquery解决谷歌浏览器自动保存加密密码是乱码
  • 每日一题(12)TSP问题的贪心法求解
  • 深度学习篇---抽样
  • 数据库- JDBC
  • LeetCode 热题 100_最小路径和(92_64_中等_C++)(多维动态规划)
  • React:封装一个评论回复组件
  • 使用JDK的数据校验和Spring的自定义注解校验前端传递参数的两种方法
  • 流浪猫给车主造成困扰,长春一小区拟投药应对?律师:此举欠妥
  • 国家税务总局:“二套转首套”可以享受贷款利息个税专项扣除
  • 报告:到2030年我国无人机产业将率先实现万亿规模
  • 多家媒体及网红走进云南曲靖沾益:感受珠江源头
  • 持续更新丨伊朗官员:港口爆炸事件已致5人死亡
  • 艺术与医学的对话,瑞金医院办了一个展览