EMQX
ℹ️ Info:
应用 EMQX
通过 Helm3 在 Kubernetes 上部署 EMQX 4.0 集群 | EMQ
emqx/deploy/charts/emqx at main-v4.4 · emqx/emqx (github.com)
emqx/values.yaml at main-v4.4 · emqx/emqx (github.com)
emqx/emqx-operator: A Kubernetes Operator for EMQ X Broker (github.com)
配置项 | EMQX 文档
EMQX 装置
ℹ️ Info:
即 EMQX 服务器端。
> helm repo add emqx https://repos.emqx.io/charts"emqx" has been added to your repositories> helm repo updateHang tight while we grab the latest from your chart repositories......Successfully got an update from the "emqx" chart repositoryUpdate Complete. ⎈Happy Helming!⎈> helm search repo emqxNAME CHART VERSION APP VERSION DESCRIPTION emqx/emqx 4.4.0 4.4.0 A Helm chart for EMQ X emqx/emqx-ee 4.4.1 4.4.1 A Helm chart for EMQ X emqx/emqx-operator 1.0.1 1.1.2 A Helm chart for EMQX Operator Controlleremqx/kuiper 0.9.0 0.9.0 A lightweight IoT edge analytic software
装置:
vi values.yaml
:
replicaCount: 1image: repository: emqx/emqx pullPolicy: IfNotPresentrecreatePods: falsepodManagementPolicy: ParallelextraEnv: []extraEnvFrom: []extraArgs: []extraVolumes: []extraVolumeMounts: []persistence: enabled: true size: 8Gi storageClass: "local-path" accessMode: ReadWriteOnceresources: {} # limits: # cpu: 500m # memory: 512Mi # requests: # cpu: 500m # memory: 512Mi# Containers that run before the creation of EMQ X containers. They can contain utilities or setup scripts.initContainers: {} # - name: mysql-probe # image: alpine # command: ["sh", "-c", "for i in $(seq 1 300); do nc -zvw1 mysql 3306 && exit 0 || sleep 3; done; exit 1"]## EMQ X configuration item, see the documentation (https://hub.docker.com/r/emqx/emqx)emqxConfig: EMQX_NAME: "{{ .Release.Name }}" ## Cluster discovery by k8s EMQX_CLUSTER__DISCOVERY: "k8s" EMQX_CLUSTER__K8S__APP_NAME: "{{ .Release.Name }}" EMQX_CLUSTER__K8S__APISERVER: "https://kubernetes.default.svc:443" EMQX_CLUSTER__K8S__SERVICE_NAME: "{{ .Release.Name }}-headless" EMQX_CLUSTER__K8S__NAMESPACE: "{{ .Release.Namespace }}" EMQX_CLUSTER__K8S__ADDRESS_TYPE: "hostname" EMQX_CLUSTER__K8S__SUFFIX: "svc.cluster.local"emqxAclConfig: > {allow, {user, "dashboard"}, subscribe, ["$SYS/#"]}. {allow, {ipaddr, "127.0.0.1"}, pubsub, ["$SYS/#", "#"]}. {deny, all, subscribe, ["$SYS/#", {eq, "#"}]}. {allow, all}.emqxLoadedPlugins: > {emqx_management, true}. {emqx_recon, true}. {emqx_retainer, true}. {emqx_dashboard, true}. {emqx_telemetry, true}. {emqx_rule_engine, true}. {emqx_bridge_mqtt, false}.emqxLoadedModules: > {emqx_mod_acl_internal, true}. {emqx_mod_presence, true}. {emqx_mod_trace, false}. {emqx_mod_st_statistics, false}. {emqx_mod_delayed, false}. {emqx_mod_rewrite, false}. {emqx_mod_subscription, false}. {emqx_mod_topic_metrics, false}.service: type: LoadBalancer mqtt: 1883 mqttssl: 8883 mgmt: 8081 ws: 8083 wss: 8084 dashboard: 18083podSecurityContext: enabled: true fsGroup: 1000 fsGroupChangePolicy: Always runAsUser: 1000 supplementalGroups: - 1000containerSecurityContext: enabled: true runAsNonRoot: true runAsUser: 1000
helm install emqx emqx/emqx --namespace emqx --create-namespace -f ./values.yaml --wait
装置输入:
NAME: emqxLAST DEPLOYED: Sat Feb 19 20:48:49 2022NAMESPACE: emqxSTATUS: deployedREVISION: 1TEST SUITE: None
EMQX 验证
装置后查看 EMQX 集群状况:
# kubectl -n emqx get podsNAME READY STATUS RESTARTS AGEsvclb-emqx-kbl22 6/6 Running 0 41semqx-0 1/1 Running 0 41s# kubectl -n emqx exec -it emqx-0 -- emqx_ctl cluster statusCluster status: #{running_nodes => ['emqx@emqx-0.emqx-headless.emqx.svc.cluster.local'], stopped_nodes => []}# kubectl -n emqx get svcNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGEemqx-headless ClusterIP None <none> 1883/TCP,8883/TCP,8081/TCP,8083/TCP,8084/TCP,18083/TCP,4370/TCP 86semqx LoadBalancer 10.43.193.192 10.<none> .245 1883:31558/TCP,8883:31122/TCP,8081:31592/TCP,8083:30322/TCP,8084:31095/TCP,18083:32427/TCP 86s
拜访控制台:
拜访 URL:18083
,输出默认用户名:admin
,默认明码:public
,登陆 EMQX dashboard。
MQTT 音讯验证:
能够通过 MQTT X: Cross-platform MQTT 5.0 Desktop Client 连贯并进行收发验证。
至此,EMQX(即 MQTT 服务器端) 装置实现。
EMQX 卸载
首先通过 Helm 卸载 EMQX 除存储外的所有资源:
helm uninstall emqx --namespace emqx
之后再通过 Rancher UI 或 kubectl 命令删除存储:
kubectl delete -n emqx pvc emqx-data-emqx-0
EMQX Edge
ℹ️ Info:
即 EMQX Edge 端版本
Edge 端资源较小,存储空间等能够适当设置低一点。如:
size: 5Gi
部署 EMQX Edge 集群指定 image.repository=emqx/emqx-edge
,其余设置与部署 EMQX 集群保持一致
...image: repository: emqx/emqx-edge...persistence:... size: 8Gi...
至此,EMQX Edge(即 MQTT Edge 端 Server) 装置实现。
EMQX Edge 离线装置
通过操作机(能够联网或能够通过代理上网) pull EMQX 的容器镜像到对应的镜像仓库:
ctr -n k8s.io images push --plain-http --platform=linux/arm64/v8 <local-registry>:5000/emqx/emqx-edge:4.4.0
而后失常装置即可:
Tip:
前提是本地已装置镜像仓库,且本地 docker 或其余容器运行时曾经配置本地镜像仓库地址为 <docker.io> 的 mirror
helm install emqx emqx/emqx --namespace emqx --create-namespace -f ./values.yaml --wait
至此,EMQX Edge(即 MQTT Edge 端 Server) 离线形式装置实现。
总结
MQTT
MQTT Server 通过 Helm Chart EMQX 装置,装置于:服务器/Edge 端 K3S 的
emqx
namespace;- 装置模式:单节点
- EMQX 版本:4.4.0
- EMQX 实例:1 个
- EMQX 数据已长久化,容器数据位于:
/opt/emqx/data/mnesia
, 长久化后的数据位于:/data/rancher/k3s/storage
- EMQX UI 为:
<locabalaner-ip>:18083
, 账号密码默认为:admin
和public
- MQTT 地址为:
<locabalaner-ip>:1883
三人行, 必有我师; 常识共享, 天下为公. 本文由东风微鸣技术博客 EWhisper.cn 编写.