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
}
部署流程:
- 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
- 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