• Helm部署EMQX集群


    端口说明:

    端口说明集群内端口Nodeport备注
    mqtt188331274Port for MQTT
    mqttssl888331170Port for MQTT(SSL)
    mgmt8081
    ws808330099Port for WebSocket/HTTP
    wss808432580Port for WSS/HTTPS
    dashboard1808331303Port 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
    
    • 1
    • 2
    • 3

    2、添加helm仓库

    helm repo add emqx https://repos.emqx.io/charts
    helm repo list
    helm repo update
    helm search repo emqx
    
    • 1
    • 2
    • 3
    • 4

    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    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
    
    • 1
    • 2
    • 3
    • 4
    • 5

    7、登录dashboard

    http://192.168.1.47:31303
    admin / public #默认账号密码
    admin / public123
    
    • 1
    • 2
    • 3

    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;
    
    • 1
    • 2
    • 3

    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;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    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);
    
    • 1

    11、添加客户端认证

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    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;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    SELECT password_hash, salt FROM mqtt_user where username = ${username} LIMIT 1
    
    • 1

    12、添加客户端授权

    二、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
    • 3

    1.2 添加仓库

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

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

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

    在这里插入图片描述

    1.3.2 pull应用chats到本地并上传到指定服务器
    helm pull emqx/emqx --version 5.2.1
    
    • 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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    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
    
    • 1
    • 2
    • 3
    • 4
    • 5

    7、登录dashboard

    http://192.168.1.47:31303
    admin / public #默认账号密码
    admin / public123
    
    • 1
    • 2
    • 3

    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;
    
    • 1
    • 2
    • 3

    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;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    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);
    
    • 1

    11、添加客户端认证

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    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;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    SELECT password_hash, salt FROM mqtt_user where username = ${username} LIMIT 1
    
    • 1

    12、添加客户端授权

    在这里插入图片描述
    在这里插入图片描述

    CREATE TABLE `mqtt_acl` (
    `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
    `ipaddress` VARCHAR(60) NOT NULL DEFAULT '',
    `username` VARCHAR(255) NOT NULL DEFAULT '',
    `clientid` VARCHAR(255) NOT NULL DEFAULT '',
    `action` ENUM('publish', 'subscribe', 'all') NOT NULL,
    `permission` ENUM('allow', 'deny') NOT NULL,
    `topic` VARCHAR(255) NOT NULL DEFAULT '',
    PRIMARY KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    SELECT action, permission, topic FROM mqtt_acl where username = ${username}
    
    • 1

    三、卸载EMQX集群

    #卸载emqx集群
    helm uninstall emqx -n emqx
    #删除pv/pvc
    kubectl delete -n emqx pvc emqx-data-emqx-0
    
    • 1
    • 2
    • 3
    • 4
  • 相关阅读:
    排序:如何用快排思想在O(n)内查找第K大元素?
    容器编排工具鉴赏- docker-compose 、Kubernetes、OpenShift、Docker Swarm
    浅谈Oracle数据库调优(3完)
    windows10 vs2019 版本:cmake将 opencv_contrib-4.5.5 扩展模块编译添加到 opencv-4.5.5 正式版中
    第十七天统计一致字符串的数目
    Windows上安装jdk17后没有jre的解决方法
    ElasticSearch--排查集群健康状态是Red、Yellow的问题
    k8s pod根据指标自动扩缩容举例
    DP-Laplace Mechanism
    双重差分模型(DID)论文写作指南与操作手册
  • 原文地址:https://blog.csdn.net/weixin_45112997/article/details/133637180