# 配置 EMQX Service
# 任务目标
- 如何配置 EMQX 集群 Service。
# 配置 EMQX 集群
EMQX CRD 支持使用 .spec.dashboardServiceTemplate
配置 EMQX 集群 Dashboard Service ,使用 .spec.listenersServiceTemplate
配置 EMQX 集群 listener Service,其文档可以参考:Service (opens new window)。
apiVersion: apps.emqx.io/v2alpha1 kind: EMQX metadata: name: emqx spec: image: emqx/emqx:5.0.9 imagePullPolicy: IfNotPresent bootstrapConfig: | listeners.quic.default { enabled = true bind = "0.0.0.0:14567" keyfile = "/opt/emqx/etc/certs/key.pem" certfile = "/opt/emqx/etc/certs/cert.pem" } coreTemplate: spec: replicas: 3 replicantTemplate: spec: replicas: 0 dashboardServiceTemplate: spec: type: NodePort ports: - name: "dashboard-listeners-http-bind" protocol: TCP port: 18083 targetPort: 18083 nodePort: 32009 listenersServiceTemplate: spec: type: NodePort ports: - name: "tcp-default" protocol: TCP port: 1883 targetPort: 1883 nodePort: 32010 - name: quic-default protocol: UDP port: 14567 targetPort: 14567 nodePort: 32011
Copied!
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
说明: EMQX 默认会开启一个 MQTT TCP 监听器 tcp-default
对应的端口为1883 以及 Dashboard 监听器 dashboard-listeners-http-bind
对应的端口为18083 。用户可以通过 .spec.bootstrapConfig
字段或者 EMQX Dashboard 增加新的监听器。EMQX Operator 在创建 Service 时会将缺省的监听器信息自动注入到 Service 里面,但是当用户配置的 Service 和 EMQX 配置的监听器有冲突时(name 或者 port 字段重复),EMQX Operator 会以用户的配置为准。
将上述内容保存为:emqx-service.yaml,并执行如下命令部署 EMQX 集群:
kubectl apply -f emqx-service.yaml
Copied!
输出类似于:
emqx.apps.emqx.io/emqx created
Copied!
- 检查 EMQX 集群是否就绪
kubectl get emqx emqx -o json | jq ".status.emqxNodes"
Copied!
输出类似于:
[ { "node": "emqx@emqx-core-0.emqx-headless.default.svc.cluster.local", "node_status": "running", "otp_release": "24.2.1-1/12.2.1", "role": "core", "version": "5.0.9" }, { "node": "emqx@emqx-core-1.emqx-headless.default.svc.cluster.local", "node_status": "running", "otp_release": "24.2.1-1/12.2.1", "role": "core", "version": "5.0.9" }, { "node": "emqx@emqx-core-2.emqx-headless.default.svc.cluster.local", "node_status": "running", "otp_release": "24.2.1-1/12.2.1", "role": "core", "version": "5.0.9" } ]
Copied!
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
说明: node 表示 EMQX 节点在集群的唯一标识。node_status 表示 EMQX 节点的状态。otp_release 表示 EMQX 使用的 Erlang 的版本。role 表示 EMQX 节点角色类型。version 表示 EMQX 版本。EMQX Operator 默认创建包含三个 core 节点和三个 replicant 节点的 EMQX 集群,所以当集群运行正常时,可以看到三个运行的 core 节点和三个 replicant 节点信息。如果你配置了 .spec.coreTemplate.spec.replicas
字段,当集群运行正常时,输出结果中显示的运行 core 节点数量应和这个 replicas 的值相等。如果你配置了 .spec.replicantTemplate.spec.replicas
字段,当集群运行正常时,输出结果中显示的运行 replicant 节点数量应和这个 replicas 的值相等。
# 查看 EMQX Service 是否就绪
- 使用命令行查看 EMQX 集群 Service
kubectl get svc -l apps.emqx.io/instance=emqx
Copied!
输出类似于:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE emqx-dashboard NodePort 10.101.225.238 <none> 18083:32012/TCP 32s emqx-listeners NodePort 10.97.59.150 <none> 1883:32010/TCP,14567:32011/UDP 10s
Copied!
2
3
- 使用 MQTT X 连接 EMQX 集群发送消息
在 MQTT X 页面点击创建新连接的按钮,按照如图所示配置 EMQX 集群节点信息,在配置好连接信息之后,点击 connect 按钮连接 EMQX 集群:
然后点击订阅按钮新建订阅,如图所示 MQTT X 已成功连接 EMQX 集群并且已经成功创建订阅:
在成功连接 EMQX 集群并创建订阅之后,我们就可以向 EMQX 集群发送消息,如下图所示:
- 通过 EMQX Dashboard 增加新的监听器
打开浏览器,输入 EMQX Pod 所在宿主机 IP
和 端口 32012
登录 EMQX 集群 Dashboard(Dashboard 默认用户名为:admin ,默认密码为:public),进入 Dashboard 点击 Configuration → Listeners 进入监听器的页面,我们先点击 Add Listener 的按钮添加一个名称为 test,端口为1884的监听器,如下图所示:
然后点击 Add 按钮创建监听器,如下图所示:
从图中可以看出,我们创建的 test 监听器已经生效。
- 查看新增的监听器是否注入 Service
kubectl get svc -l apps.emqx.io/instance=emqx
Copied!
输出类似于:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE emqx-dashboard NodePort 10.105.110.235 <none> 18083:32012/TCP 13m emqx-listeners NodePort 10.106.1.58 <none> 1883:32010/TCP,14567:32011/UDP,1884:30763/TCP 12m
Copied!
2
3
从输出结果可以看到,刚才新增加的监听器1884已经注入到 emqx-listeners
这个 Service 里面。
← 配置 EMQX 日志等级 常见问题 →