7

在阿里云 ACK 上部署 EMQX MQTT 服务器集群

 2 years ago
source link: https://blog.51cto.com/u_15204296/5873711
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

在阿里云 ACK 上部署 EMQX MQTT 服务器集群

精选 原创

EMQ映云科技 2022-11-21 13:33:46 ©著作权

文章标签 物联网 IoT MQTT emqx 阿里云 文章分类 物联网 嵌入式 阅读数190

云进入以「应用为中心」的云原生阶段,Operator 模式的出现,则为 Kubernetes 中的自动化任务创建配置与管理提供了一套行之有效的标准规范。通过将运维知识固化成高级语言 Go/Java 代码,使得运维知识可以像普通软件一样交付,并能支持高可靠、具备高级运维能力的有状态应用批量交付。

针对大规模分布式物联网 MQTT 消息服务器 EMQX 全生命期管理的自动化管理工具 ​ ​EMQX Kubernetes Operator​​(本文中简称 EMQX Operator)应运而生。它作为 Kubernetes 上的自定义控制器运行,并与 Kubernetes API 服务器(kube-apiserver)进行通信,将高层描述转换为正常的 Kubernetes 资源,以保持所需的应用程序状态。

EMQX Operator 使 EMQX 的部署、调优和运维变成一种低成本、标准化、可重复性的能力,帮助用户高效实现集群扩容、无缝升级、故障处理和统一监控。

在阿里云 ACK 上部署 EMQX MQTT 服务器集群_MQTT

本文章将以 ​ ​EMQX 企业版​​为例,详细讲解如何使用 EMQX Operator 在阿里云 ACK 公有云平台上创建部署 MQTT 服务集群,并实现自动化管理与监控。

云平台简介:阿里云 ACK

ACK:容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理;其整合了阿里云虚拟化、存储、网络和安全能力,助力企业高效运行云端 Kubernetes容器化应用。详见:​ ​什么是容器服务Kubernetes版​

创建 ACK 集群

创建 Kubernetes 群集

登录阿里云 容器服务-Kubernetes,选择创建集群,注意 EMQX Operator 要求 Kubernetes 版本>=1.20.0

在阿里云 ACK 上部署 EMQX MQTT 服务器集群_阿里云_02

根据需要选择合适的配置

在阿里云 ACK 上部署 EMQX MQTT 服务器集群_阿里云_03

访问 Kubernetes 群集

在阿里云 ACK 上部署 EMQX MQTT 服务器集群_MQTT_04

集群创建完成之后,在连接信息页面有 kubeconfig 文件信息,可以使用 kubectl 和 kubeconfig 文件访问集群。

LoadBalancer 配置

支持在 Terway 网络模式下,通过 annotation 将 Pod 直接挂载到 CLB 后端,提升网络转发性能。

service.beta.kubernetes.io/backend-type:"eni"

StorageClass 配置

使用如下命令查看当前集群可用的 storageClass:

kubectl get sc

可以看到集群默认创建了多个可用的 storageClass, 本文档部署 EMQX 时选取的第一个 storageClass: alibabacloud-cnfs-nas

使用 EMQX Operator 部署 EMQX 集群

部署 cert-manager

参考 cert-manager 安装文档: ​Installation​

部署 EMQX Operator

kubectl apply -f "https://github.com/emqx/emqx-operator/releases/download/1.2.6/emqx-operator-controller.yaml"

部署 EMQX 企业版集群

这里 service type 采用 LoadBalancer

cat << EOF | kubectl apply -f -
apiVersion: apps.emqx.io/v1beta3
kind: EmqxEnterprise
metadata:
name: emqx-ee
labels:
"apps.emqx.io/instance": "emqx-ee"
annotations:
service.beta.kubernetes.io/backend-type:"eni"
spec:
emqxTemplate:
image: emqx/emqx-ee:4.4.6
serviceTemplate:
metadata:
name: emqx-ee
namespace: default
labels:
"apps.emqx.io/instance": "emqx-ee"
spec:
type: LoadBalancer
selector:
"apps.emqx.io/instance": "emqx-ee"
persistent:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
storageClassName: alibabacloud-cnfs-nas
EOF

查看集群状态

$ kubectl get pods
NAME READY STATUS RESTARTS AGE
emqx-ee-0 2/2 Running 0 22m
emqx-ee-1 2/2 Running 0 22m
emqx-ee-2 2/2 Running 0 22m

$ kubectl exec -it emqx-ee-0 -c emqx -- emqx_ctl status
Node '[email protected]' 4.4.6 is started

$ kubectl exec -it emqx-ee-0 -c emqx -- emqx_ctl cluster status
Cluster status: #{running_nodes =>
['[email protected]',
'[email protected]',
'[email protected]'],
stopped_nodes => []}

EMQX Operator 和 EMQX 集群​ ​安装参考​

LoadBalancer 终结 TLS

由于阿里云 CLB 不支持 TCP 证书(NLB发布后,我们会更该该项内容),所以请参考这篇文档解决 TCP 证书终结问题:​ ​LB 终结 mTLS 方案​

备注: 此文档详细解释了使用 EMQX Operator 在阿里云 ACK 上部署 EMQX 集群的步骤,另外还支持配置 LB 直连 Pod,进一步提升转发性能。

版权声明: 本文为 EMQ 原创,转载请注明出处。

原文链接:​ ​https://www.emqx.com/zh/blog/deploying-mqtt-cluster-on-alicloud-ack​


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK