Helm部署EMQX集群

端口说明:

端口说明 集群内端口 Nodeport 备注
mqtt 1883 31274 Port for MQTT
mqttssl 8883 31170 Port for MQTT(SSL)
mgmt 8081
ws 8083 30099 Port for WebSocket/HTTP
wss 8084 32580 Port for WSS/HTTPS
dashboard 18083 31303 Port for dashboard

一、Helm在线部署EMQX集群

1、安装helm

wget https://get.helm.sh/helm-v3.12.3-linux-amd64.tar.gz
cp linux-amd64/helm /usr/local/bin/
helm version

2、添加helm仓库

helm repo add emqx https://repos.emqx.io/charts
helm repo list
helm repo update
helm search repo emqx

3、创建storageClass或者pv,pvc(略)

4、使用持久化资源storageClass安装emqx

helm install emqx emqx/emqx \
  --set replicaCount=3 \
  --set image.tag=5.2.1 \
  --set persistence.enabled=true \
  --set persistence.size=100Mi \
  --set persistence.storageClass=nfs  \
  --set service.type=NodePort \
  --set service.nodePorts.mqtt=31274 \
  --set service.nodePorts.mqttssl=31170 \
  --set service.nodePorts.ws=30099 \
  --set service.nodePorts.wss=32580 \
  --set service.nodePorts.dashboard=31303 \
  --namespace emqx \
  --create-namespacee

5、使用持久化资源pv,pvc安装emqx

helm install emqx emqx/emqx \
  --set replicaCount=3 \
  --set image.tag=5.2.1 \
  --set persistence.enabled=true \
  --set persistence.size=100Mi \
  --set persistence.existingClaim=emqx-data-pvc  \
  --set service.type=NodePort \
  --set service.nodePorts.mqtt=31274 \
  --set service.nodePorts.mqttssl=31170 \
  --set service.nodePorts.ws=30099 \
  --set service.nodePorts.wss=32580 \
  --set service.nodePorts.dashboard=31303 \
  --namespace emqx \
  --create-namespace

6、验证emqx

heml status -n emqx emqx
helm list -n emqx
kubectl get pods -n emqx
kubectl get svc -n emqx
kubectl get pv,pvc -n emqx

7、登录dashboard

http://192.168.1.47:31303
admin / public #默认账号密码
admin / public123

8、创建mysql数据库实例emqx_user,并授权

mysql> create databases mqtt_user;
mysql> grant all privileges on mqtt_user.* to 'mqtt_user'@'%' identified by 'mqtt123';
myql> flush privileges;

9、创建表

  • https://docs.emqx.com/zh/enterprise/v5.2/access-control/authn/mysql.html
mysql> CREATE TABLE `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;

9、插入表数据

在此表中使用 username 作为查找条件。

例如,我们希望添加一名用户名为 emqx_user、密码为 public、盐值为 slat_foo123、散列方式为 sha256 且超级用户标志为 true 的用户:

mysql> INSERT INTO mqtt_user(username, password_hash, salt, is_superuser) VALUES ('mqtt_user', SHA2(concat('public', 'slat_foo123'), 256), 'slat_foo123', 1);

10、添加客户端认证

Helm部署EMQX集群_第1张图片
Helm部署EMQX集群_第2张图片

二、Helm离线部署EMQX集群

1、制作应用的离线安装包(需能访问外放)

1.1 安装helm

wget https://get.helm.sh/helm-v3.12.3-linux-amd64.tar.gz
cp linux-amd64/helm /usr/local/bin/
helm version

1.2 添加仓库

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

1.3 使用helm下载对应版本的chats

1.3.1 查询版本
helm search repo emqx --version 5.2.1

在这里插入图片描述

1.3.2 pull应用chats到本地并上传到指定服务器
helm pull emqx/emqx --version 5.2.1

在这里插入图片描述

2、下载并定制镜像

docker pull emqx/emqx:5.2.1
docker login
docker tag emqx/emqx:5.2.1 xxxx/emqx:5.2.1 
docker push xxxx/emqx:5.2.1

docker login
docker pull xxxx/emqx:5.2.1
docker tag xxxx/emqx:5.2.1 xxxx/emqx:5.2.1
docker push xxxx/emqx:5.2.1

3、创建storageClass或者pv\pvc(略)

4、使用持久化资源storageClass创建emqx集群

helm install emqx ./emqx-5.2.1.tgz \
  --set replicaCount=3 \
  --set image.repository=xxxx/emqx:5.2.1 \
  --set image.tag=5.2.1 \
  --set persistence.enabled=true \
  --set persistence.size=100Mi \
  --set persistence.storageClass=nfs  \
  --set service.type=NodePort \
  --set service.nodePorts.mqtt=31274 \
  --set service.nodePorts.mqttssl=31170 \
  --set service.nodePorts.ws=30099 \
  --set service.nodePorts.wss=32580 \
  --set service.nodePorts.dashboard=31303 \
  --namespace emqx \
  --create-namespacee

5、使用持久化资源pv\pvc创建emqx集群

helm install emqx ./emqx-5.2.1.tgz \
--set replicaCount=3 \
--set image.repository=xxxx/emqx:5.2.1 \
  --set image.tag=5.2.1 \
  --set persistence.enabled=true \
  --set persistence.size=100Mi \
  --set persistence.existingClaim=emqx-data-pvc  \
  --set service.type=NodePort \
  --set service.nodePorts.mqtt=31274 \
  --set service.nodePorts.mqttssl=31170 \
  --set service.nodePorts.ws=30099 \
  --set service.nodePorts.wss=32580 \
  --set service.nodePorts.dashboard=31303 \
  --namespace emqx \
--create-namespace

6、验证emqx

heml status -n emqx emqx
helm list -n emqx
kubectl get pods -n emqx
kubectl get svc -n emqx
kubectl get pv,pvc -n emqx

7、登录dashboard

http://192.168.1.47:31303
admin / public #默认账号密码
admin / public123

8、创建mysql数据库实例emqx_user,并授权

mysql> create databases mqtt_user;
mysql> grant all privileges on mqtt_user.* to 'mqtt_user'@'%' identified by 'mqtt123';
myql> flush privileges;

9、创建表

  • https://docs.emqx.com/zh/enterprise/v5.2/access-control/authn/mysql.html
mysql> CREATE TABLE `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;

10、插入表数据

在此表中使用 username 作为查找条件。

例如,我们希望添加一名用户名为 emqx_user、密码为 public、盐值为 slat_foo123、散列方式为 sha256 且超级用户标志为 true 的用户:

mysql> INSERT INTO mqtt_user(username, password_hash, salt, is_superuser) VALUES ('mqtt_user', SHA2(concat('public', 'slat_foo123'), 256), 'slat_foo123', 1);

11、添加客户端认证

Helm部署EMQX集群_第3张图片
Helm部署EMQX集群_第4张图片
Helm部署EMQX集群_第5张图片

三、卸载EMQX集群

#卸载emqx集群
helm uninstall emqx -n emqx
#删除pv/pvc
kubectl delete -n emqx pvc emqx-data-emqx-0

你可能感兴趣的:(中间件,helm,emqx,mqtt)