|
1 | | -# 在 Azure 中部署 EMQX |
2 | | - |
3 | | -EMQX 是一款高性能的开源分布式物联网 MQTT 消息服务器,它提供了可靠、高效的消息传递功能。而 Azure Kubernetes Service(AKS)作为一种托管的 Kubernetes 服务,提供了便捷的容器化应用程序部署和管理能力。在本文中,我们将介绍如何利用 EMQX Operator 在 Azure AKS 上部署 EMQX,从而构建强大的物联网 MQTT 通信解决方案。 |
| 1 | +# 在 Azure Kubernetes Service 中部署 EMQX |
4 | 2 |
|
| 3 | +EMQX Operator 支持在 Azure Kubernetes Service (AKS) 上部署 EMQX。AKS 通过将运维开销转移到 Azure 来简化在 Azure 中部署托管 Kubernetes 集群的过程。作为托管的 Kubernetes 服务,Azure 处理关键任务,如健康监控和维护。创建 AKS 集群时,Azure 会自动配置和管理 Kubernetes 控制平面,无需额外费用。 |
5 | 4 |
|
6 | 5 | ## 前提条件 |
7 | 6 |
|
8 | | -在开始之前,您必须具备以下条件: |
| 7 | +在 AKS 上部署 EMQX 之前,请确保满足以下先决条件: |
| 8 | + |
| 9 | +- Azure 订阅中的 AKS 集群 |
| 10 | + * 有关创建和配置 AKS 集群的指导,请参阅 [Azure Kubernetes Service 文档](https://learn.microsoft.com/zh-cn/azure/aks/)。 |
| 11 | + |
| 12 | +- 用于连接到 AKS 集群的有效 `kubectl` 配置 |
| 13 | + - 要使用本地安装的 `kubectl` 连接,请按照 [连接到 AKS 集群](https://learn.microsoft.com/zh-cn/azure/aks/learn/quick-kubernetes-deploy-cli) 中的说明操作。 |
| 14 | + - 要使用 Azure Cloud Shell 连接,请参阅 [在 Azure CloudShell 中管理 AKS 集群](https://learn.microsoft.com/zh-cn/azure/aks/learn/quick-kubernetes-deploy-portal?tabs=azure-cli)。 |
| 15 | + |
| 16 | +- 在集群上安装 EMQX Operator |
| 17 | + - 有关安装详细信息,请参阅 [安装 EMQX Operator](./getting-started.md)。 |
9 | 18 |
|
10 | | -- 要在 Azure 上创建一个 AKS 集群,您首先需要在您的 Azure 订阅中激活 AKS 服务。请参考 [Azure Kubernetes 服务](https://learn.microsoft.com/zh-cn/azure/aks/) 文档以获取更多信息。 |
11 | 19 |
|
12 | | -- 要使用 kubectl 命令连接到一个 AKS 集群,您可以在本地安装 kubectl 工具并获取集群的 KubeConfig 来连接到集群。或者,您可以通过 Azure 门户使用 Cloud Shell 来管理集群。 |
13 | | - - 要使用 kubectl 连接到一个 AKS 集群,您需要在您的本地机器上安装并配置 kubectl 工具。请参考 [连接到一个 AKS 集群](https://learn.microsoft.com/zh-cn/azure/aks/learn/quick-kubernetes-deploy-cli) 文档。 |
14 | | - - 要使用 CloudShell 连接到一个 AKS 集群,使用 Azure CloudShell 连接到 AKS 集群并使用 kubectl 管理集群。请参考 [在 Azure CloudShell 中管理一个 AKS 集群](https://learn.microsoft.com/zh-cn/azure/aks/learn/quick-kubernetes-deploy-portal?tabs=azure-cli) 文档,了解如何连接到 Azure CloudShell 和使用 kubectl 的详细说明。 |
| 20 | +## 快速部署 EMQX 集群 |
15 | 21 |
|
16 | | -- 要安装 EMQX Operator,请参考 [安装 EMQX Operator](./getting-started.md)。 |
| 22 | +以下示例显示了 EMQX 自定义资源 (CR) 的基本配置。 |
17 | 23 |
|
18 | | -## 快速部署一个 EMQX 集群 |
| 24 | +1. 将其保存为 YAML 文件,并使用 `kubectl apply` 部署。 |
19 | 25 |
|
20 | | -以下是 EMQX Custom Resource 的相关配置。您可以根据您想要部署的 EMQX 版本选择相应的 APIVersion。具体的兼容关系,请参考 [EMQX Operator 兼容性](./operator.md)。 |
| 26 | + ```yaml |
| 27 | + apiVersion: apps.emqx.io/v2beta1 |
| 28 | + kind: EMQX |
| 29 | + metadata: |
| 30 | + name: emqx |
| 31 | + spec: |
| 32 | + image: emqx/emqx:@EE_VERSION@ |
| 33 | + config: |
| 34 | + data: | |
| 35 | + license { |
| 36 | + key = "..." |
| 37 | + } |
| 38 | + coreTemplate: |
| 39 | + spec: |
| 40 | + volumeClaimTemplates: |
| 41 | + ## 有关存储类的更多信息:https://learn.microsoft.com/zh-cn/azure/aks/concepts-storage#storage-classes |
| 42 | + storageClassName: default |
| 43 | + resources: |
| 44 | + requests: |
| 45 | + storage: 10Gi |
| 46 | + accessModes: |
| 47 | + - ReadWriteOnce |
| 48 | + dashboardServiceTemplate: |
| 49 | + spec: |
| 50 | + ## 有关负载均衡器的更多信息:https://learn.microsoft.com/zh-cn/azure/aks/load-balancer-standard |
| 51 | + type: LoadBalancer |
| 52 | + listenersServiceTemplate: |
| 53 | + spec: |
| 54 | + ## 有关负载均衡器的更多信息:https://learn.microsoft.com/zh-cn/azure/aks/load-balancer-standard |
| 55 | + type: LoadBalancer |
| 56 | + ``` |
21 | 57 |
|
22 | | -```yaml |
23 | | -apiVersion: apps.emqx.io/v2beta1 |
24 | | -kind: EMQX |
25 | | -metadata: |
26 | | - name: emqx |
27 | | -spec: |
28 | | - image: emqx/emqx-enterprise:@EE_VERSION@ |
29 | | - coreTemplate: |
30 | | - spec: |
31 | | - volumeClaimTemplates: |
32 | | - ## 关于存储类的更多信息:https://learn.microsoft.com/zh-cn/azure/aks/concepts-storage#storage-classes |
33 | | - storageClassName: default |
34 | | - resources: |
35 | | - requests: |
36 | | - storage: 10Gi |
37 | | - accessModes: |
38 | | - - ReadWriteOnce |
39 | | - dashboardServiceTemplate: |
40 | | - spec: |
41 | | - ## 关于负载均衡器的更多信息:https://learn.microsoft.com/zh-cn/azure/aks/load-balancer-standard |
42 | | - type: LoadBalancer |
43 | | - listenersServiceTemplate: |
44 | | - spec: |
45 | | - ## 关于负载均衡器的更多信息:https://learn.microsoft.com/zh-cn/azure/aks/load-balancer-standard |
46 | | - type: LoadBalancer |
47 | | -``` |
| 58 | +2. 等待 EMQX 集群就绪。 |
48 | 59 |
|
49 | | -等待 EMQX 集群准备就绪。您可以使用 kubectl get 命令检查 EMQX 集群的状态。请确保状态为 Running,这可能需要一些时间。 |
| 60 | + 使用 `kubectl get` 检查集群状态,并验证 `STATUS` 为 `Ready`。启动可能需要一些时间。 |
50 | 61 |
|
51 | | - ```bash |
52 | | - $ kubectl get emqx emqx |
53 | | - NAME STATUS AGE |
54 | | - emqx Running 10m |
55 | | - ``` |
| 62 | + ```shell |
| 63 | + $ kubectl get emqx |
| 64 | + NAME STATUS AGE |
| 65 | + emqx Ready 1m5s |
| 66 | + ``` |
56 | 67 |
|
57 | | -获取 EMQX 集群的外部 IP,并访问 EMQX 控制台。 |
| 68 | +3. 获取 EMQX Dashboard 的外部 IP 并访问它。 |
58 | 69 |
|
59 | | -EMQX Operator 将创建两个 EMQX 服务资源,一个是 emqx-dashboard,另一个是 emqx-listeners,分别对应 EMQX 控制台和 EMQX 监听端口。 |
| 70 | + EMQX Operator 会根据 `dashboardServiceTemplate` 配置自动创建 Service。 |
60 | 71 |
|
61 | | -```shell |
62 | | -$ kubectl get svc emqx-dashboard -o json | jq '.status.loadBalancer.ingress[0].ip' |
| 72 | + ```shell |
| 73 | + $ kubectl get svc emqx-dashboard -o json | jq -r '.status.loadBalancer.ingress[0].ip' |
| 74 | + 20.245.230.91 |
| 75 | + ``` |
63 | 76 |
|
64 | | -52.132.12.100 |
65 | | -``` |
| 77 | +4. 在 `http://20.245.230.91:18083` 打开 Dashboard。 |
66 | 78 |
|
67 | | -通过打开一个网络浏览器并访问 http://52.132.12.100:18083 来访问 EMQX 控制台。使用默认的用户名和密码 admin/public 登录。 |
| 79 | + 使用默认凭据登录: |
68 | 80 |
|
69 | | -## 使用 MQTTX CLI 连接到 EMQX 集群以发布/订阅消息 |
| 81 | + - **用户名:** `admin` |
| 82 | + - **密码:** `public` |
70 | 83 |
|
71 | | -MQTTX CLI 是一个开源的 MQTT 5.0 命令行客户端工具,旨在帮助开发者无需 GUI 即可更快地开发和调试 MQTT 服务和应用。 |
| 84 | +## 使用 MQTTX 订阅和发布 |
72 | 85 |
|
73 | | -1. 获取 EMQX 集群的外部 IP。 |
| 86 | +本演练使用 [MQTTX CLI](https://mqttx.app/zh/cli),这是一款开源的 MQTT 5.0 命令行客户端工具,可帮助开发者快速测试 MQTT 服务和应用。 |
74 | 87 |
|
75 | | - ```shell |
76 | | - external_ip=$(kubectl get svc emqx -o json | jq '.status.loadBalancer.ingress[0].ip') |
77 | | - ``` |
| 88 | +1. 获取 EMQX TCP 监听器的外部 IP。 |
78 | 89 |
|
79 | | -2. 订阅消息。 |
| 90 | + EMQX Operator 会为每个配置的监听器自动创建 Service 资源。 |
80 | 91 |
|
81 | | - ```shell |
82 | | - $ mqttx sub -t 'hello' -h ${external_ip} -p 1883 |
83 | | - |
84 | | - [10:00:25] › … Connecting... |
85 | | - [10:00:25] › ✔ Connected |
86 | | - [10:00:25] › … Subscribing to hello... |
87 | | - [10:00:25] › ✔ Subscribed to hello |
88 | | - ``` |
| 92 | + ```shell |
| 93 | + external_ip=$(kubectl get svc emqx-listeners -o json | jq -r '.status.loadBalancer.ingress[0].ip') |
| 94 | + ``` |
89 | 95 |
|
90 | | -3. 创建一个新的终端窗口并发送消息。 |
| 96 | +2. 订阅主题。 |
91 | 97 |
|
92 | | - ```shell |
93 | | - $ mqttx pub -t 'hello' -h ${external_ip} -p 1883 -m 'hello world' |
94 | | - |
95 | | - [10:00:58] › … Connecting... |
96 | | - [10:00:58] › ✔ Connected |
97 | | - [10:00:58] › … Message Publishing... |
98 | | - [10:00:58] › ✔ Message published |
99 | | - ``` |
| 98 | + ```shell |
| 99 | + $ mqttx sub -t 'hello' -h ${external_ip} -p 1883 |
| 100 | + [10:00:25] › … Connecting... |
| 101 | + [10:00:25] › ✔ Connected |
| 102 | + [10:00:25] › … Subscribing to hello... |
| 103 | + [10:00:25] › ✔ Subscribed to hello |
| 104 | + ``` |
100 | 105 |
|
101 | | -4. 在订阅终端窗口中查看接收到的消息。 |
| 106 | +3. 在另一个终端中,连接到 EMQX 集群并发布消息。 |
102 | 107 |
|
103 | | - ```shell |
104 | | - [10:00:58] › payload: hello world |
105 | | - ``` |
| 108 | + ```shell |
| 109 | + $ mqttx pub -t 'hello' -h ${external_ip} -p 1883 -m 'hello world' |
| 110 | + [10:00:58] › … Connecting... |
| 111 | + [10:00:58] › ✔ Connected |
| 112 | + [10:00:58] › … Message Publishing... |
| 113 | + [10:00:58] › ✔ Message published |
| 114 | + ``` |
106 | 115 |
|
107 | | -## 使用 LoadBalancer 进行 TLS 终结 |
| 116 | +4. 观察订阅者接收消息。 |
108 | 117 |
|
109 | | -由于 Azure LoadBalancer 不支持 TCP 证书,请参阅这个[文档](https://github.com/emqx/emqx-operator/discussions/312)解决 TCP 证书卸载问题。 |
| 118 | + ```shell |
| 119 | + [10:00:58] › payload: hello world |
| 120 | + ``` |
| 121 | + |
| 122 | +## 关于使用 LoadBalancer 进行 TLS 卸载的说明 |
| 123 | + |
| 124 | +作为 L3/L4 负载均衡器,Azure LoadBalancer 不支持 TLS 终止。请参阅此[讨论](https://github.com/emqx/emqx-operator/discussions/312)以了解可能的解决方案。 |
0 commit comments