使用 EMQX Operator 在 Azure AKS 上部署 EMQX 集群
名词解释
EMQX: The most scalable open-source MQTT broker for IoT. 详见:EMQX文档 (opens new window)
EMQX Operator: A Kubernetes Operator for EMQX. 详见:EMQX Operator文档 (opens new window)
AKS: Azure Kubernetes 服务 (AKS)。详见:Azure 文档 (opens new window)
创建AKS集群
登录 Azure AKS 控制台,进入 Kubernetes 服务,创建 Kubernetes 集群。具体创建步骤参考:云厂商文档 (opens new window)
访问 Kubernetes 集群
建议通过 Azure 提供的 Cloud Shell 连接。具体创建步骤参考:云厂商文档 (opens new window)
StorageClass 配置
这里采用 NSF 文件存储。其他 StorageClass 可参考 (opens new window)
创建 StroageClass
cat << "EOF" | kubectl apply -f -
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: azurefile-csi-nfs
provisioner: file.csi.azure.com
allowVolumeExpansion: true
parameters:
protocol: nfs
mountOptions:
- nconnect=8
EOF
1
2
3
4
5
6
7
8
9
10
11
12
查看该 StroageClass 是否创建成功
可以看到azurefile-csi-nfs
已经成功创建
使用EMQX Operator 部署EMQX集群
Operator 安装参考 (opens new window)
Operator 安装完成后,使用以下yaml 在 azure 上进行部署 EMQX 集群
cat << "EOF" | kubectl apply -f -
apiVersion: apps.emqx.io/v2alpha1
kind: EMQX
metadata:
name: emqx
spec:
image: "emqx/emqx-enterprise:5.0.0"
imagePullPolicy: IfNotPresent
coreTemplate:
spec:
volumeClaimTemplates:
storageClassName: azurefile-csi-nfs
resources:
requests:
storage: 20Mi
accessModes:
- ReadWriteOnce
replicas: 1
replicantTemplate:
spec:
replicas: 3
dashboardServiceTemplate:
metadata:
name: emqx-dashboard
spec:
type: LoadBalancer
selector:
apps.emqx.io/db-role: core
ports:
- name: "dashboard-listeners-http-bind"
protocol: TCP
port: 18083
targetPort: 18083
listenersServiceTemplate:
metadata:
name: emqx-listeners
spec:
type: LoadBalancer
ports:
- name: "tcp-default"
protocol: TCP
port: 1883
targetPort: 1883
EOF
1
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
44
cat << "EOF" | kubectl apply -f -
apiVersion: apps.emqx.io/v1beta4
kind: EmqxEnterprise
metadata:
name: emqx-ee
labels:
"apps.emqx.io/instance": "emqx-ee"
spec:
persistent:
metadata:
name: emqx-ee
labels:
"apps.emqx.io/instance": "emqx-ee"
spec:
storageClassName: azurefile-csi-nfs
resources:
requests:
storage: 20Mi
accessModes:
- ReadWriteOnce
template:
spec:
emqxContainer:
image:
repository: emqx/emqx-ee
version: 4.4.14
serviceTemplate:
metadata:
name: emqx-ee
namespace: default
labels:
"apps.emqx.io/instance": "emqx-ee"
spec:
type: LoadBalancer
selector:
"apps.emqx.io/instance": "emqx-ee"
EOF
1
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
这里 service type采用LoadBalancer
关于 LoadBalancer 终结 TLS
由于 Azure LoadBalancer 不支持 TCP 证书,所以请参考这篇文档 (opens new window)解决 TCP 证书终结问题