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


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

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

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

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

    云平台简介:阿里云 ACK

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

    创建 ACK 集群

    创建 Kubernetes 群集

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

    根据需要选择合适的配置

    3

    访问 Kubernetes 群集

    4

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

    LoadBalancer 配置

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

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

    StorageClass 配置

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

    kubectl get sc
    
    • 1

    可以看到集群默认创建了多个可用的 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"
    
    • 1

    部署 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
    
    • 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

    查看集群状态

    $ 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 'emqx-ee@emqx-ee-0.emqx-ee-headless.default.svc.cluster.local' 4.4.6 is started  
    
    $ kubectl exec -it emqx-ee-0 -c emqx -- emqx_ctl cluster status  
    Cluster status: #{running_nodes =>
                       ['emqx-ee@emqx-ee-0.emqx-ee-headless.default.svc.cluster.local',
                        'emqx-ee@emqx-ee-1.emqx-ee-headless.default.svc.cluster.local',
                        'emqx-ee@emqx-ee-2.emqx-ee-headless.default.svc.cluster.local'],
                   stopped_nodes => []}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    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

  • 相关阅读:
    互联网企业面试必问 Spring 源码? 拿下Spring 源码,看完这篇就够了
    ROS 2知识:通信协议 DDS/RTPS
    关于jQuery_CSS操作中的样式,宽度,高度,位置方法使用
    达梦数据库之 PERCENT_RANK()over()函数和 PERCENTILE_CONT() WITHIN GROUP()OVER()函数详解
    web前端期末大作业 :HTML+CSS+JavaScript+Bootstrap实现响应式网站潮酷音乐网站
    Flask 常用组件
    Ceph入门到精通-CEPH故障以其处理方法
    @Profile注解的作用是什么?
    工作两年,靠BIG佬的Java面试宝典,跳槽到京东,月薪直涨10K
    解决一个mybatisplus left join里有ur报错问题
  • 原文地址:https://blog.csdn.net/emqx_broker/article/details/127961507