• 在 AWS EKS 上部署 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 在 AWS EKS 上创建部署 MQTT 服务集群,并实现自动化管理与监控。

    云平台简介: AWS EKS

    Amazon Elastic Kubernetes Service(Amazon EKS)是 AWS 的 Kubernetes 托管服务,您可以使用它来在AWS 上运行 Kubernetes,而无需安装、操作和维护您自己的 Kubernetes 控制平面或节点。

    创建 EKS 服务

    使用 EKS 服务,需通过以下两个步骤进行创建。

    创建 EKS 集群

    登录 EKS 控制台, 点击添加集群。由于 EMQX Operator 要求 Kubernetes 版本 >= 1.20, 因此在进行集群配置时,Kubernetes 版本大于 1.20 即可。其他角色、权限、子网、VPC 等可根据需求添加。
    2
    3

    添加节点组与节点

    集群创建成功后,进入集群详细页面,点击计算,选择添加节点组。
    4
    5
    6

    此处的实例类型根据业务需求自行调整,本文为示例选择了较小的实例规格。

    访问 Kubernetes 集群

    创建 kubeconfig 文件,可使用 aws cli 来生成。初次使用,根据提示进行相关配置,如权限、区域等,配置好后通过如下命令生成 kubeconfig 文件。

    aws eks update-kubeconfig --region region-code --name my-cluster
    
    • 1

    注:区域与集群名称需替换成自己所在区域与集群名字。

    LoadBalancer 相关

    在 service 使用LoadBalancer, 需先安装 Load Balancer Controller。

    StorageClass 配置

    在该方案里, 我们使用 EBS, 因此在使用前我们需安装 EBS CSI 驱动程序。在集群详情页面里,我们点击插件、新增,选择 Amazon EBD CSI 驱动程序进行添加。如下:
    7
    8

    storageclass yaml 示例:

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: ebs-sc
    provisioner: ebs.csi.aws.com
    volumeBindingMode: Immediate
    parameters:
      csi.storage.k8s.io/fstype: xfs
      type: io1
      iopsPerGB: "500"
      encrypted: "true"
    allowedTopologies:
    - matchLabelExpressions:
      - key: topology.ebs.csi.aws.com/zone
        values:
        - us-east-2c
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    执行以下命令

    $ kubectl apply -f storageclass.yaml
    
    • 1

    使用 EMQX Operator 进行集群创建

    Operator 安装完成后,使用以下 yaml 在 AWS EKS 上进行部署 EMQX 集群

    cat << "EOF" | kubectl apply -f -
    apiVersion: apps.emqx.io/v1beta3
    kind: EmqxEnterprise
    metadata:
      name: emqx-ee
      labels:
        "foo": "bar"
      annotations:
        service.beta.kubernetes.io/aws-load-balancer-type: "external"
        service.beta.kubernetes.io/aws-load-balancer-nlb-target-type: "ip"
        service.beta.kubernetes.io/aws-load-balancer-scheme: internet-facing
        service.beta.kubernetes.io/aws-load-balancer-attributes: load_balancing.cross_zone.enabled=true
        service.beta.kubernetes.io/aws-load-balancer-target-group-attributes: preserve_client_ip.enabled=true
        service.beta.kubernetes.io/aws-load-balancer-attributes: deletion_protection.enabled=true
    spec:
      replicas: 3
      persistent:
         storageClassName: ebs-sc
         resources:
           requests:
             storage: 4Gi
         accessModes:
         - ReadWriteOnce
      emqxTemplate:
        image: emqx/emqx-ee:4.4.6
        serviceTemplate:
          spec:
            type: LoadBalancer
    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

    使用 NLB 进行 TLS 终结

    我们推荐在 NLB 上做 TLS 终结,可通过以下几个步骤实现:

    证书导入

    在 AWS 控制台(https://us-east-2.console.aws.amazon.com/acm/home),导入相关证书,证书导入后点击证书 ID,进入详情页面,复制 ARN 信息,如下图:
    9

    修改部署 yaml

    cat << "EOF" | kubectl apply -f -
    apiVersion: apps.emqx.io/v1beta3
    kind: EmqxEnterprise
    metadata:
      name: emqx-ee
      labels:
        "foo": "bar"
      annotations:
        service.beta.kubernetes.io/aws-load-balancer-type: "external"
        service.beta.kubernetes.io/aws-load-balancer-nlb-target-type: "ip"
        service.beta.kubernetes.io/aws-load-balancer-scheme: internet-facing
        service.beta.kubernetes.io/aws-load-balancer-attributes: load_balancing.cross_zone.enabled=true
        service.beta.kubernetes.io/aws-load-balancer-ssl-cert: arn:aws:acm:us-west-2:arn:arn:aws:acm:us-east-1:609217282285:certificate/326649a0-f3b3-4bdb-a478-5691b4ba0ef3
        service.beta.kubernetes.io/aws-load-balancer-backend-protocol: tcp
        service.beta.kubernetes.io/aws-load-balancer-ssl-ports: 1883,mqtt-tls
        service.beta.kubernetes.io/aws-load-balancer-target-group-attributes: preserve_client_ip.enabled=true
        service.beta.kubernetes.io/aws-load-balancer-attributes: deletion_protection.enabled=true
    spec:
      replicas: 3
      persistent:
         storageClassName: ebs-sc
         resources:
           requests:
             storage: 4Gi
         accessModes:
         - ReadWriteOnce
      emqxTemplate:
        image: emqx/emqx-ee:4.4.6
        serviceTemplate:
          spec:
            type: LoadBalancer
    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

    相比不使用 TLS 证书,我们在 Annotations 里增加了下面三项内容,其中 service.beta.kubernetes.io/aws-load-balancer-ssl-cert 的值为我们第一步中复制的 ARN 信息。

    service.beta.kubernetes.io/aws-load-balancer-ssl-cert: arn:aws:acm:us-west-2:arn:arn:aws:acm:us-east-1:609217282285:certificate/326649a0-f3b3-4bdb-a478-5691b4ba0ef3
    service.beta.kubernetes.io/aws-load-balancer-backend-protocol: tcp
    service.beta.kubernetes.io/aws-load-balancer-ssl-ports: 1883,mqtt-tls
    
    • 1
    • 2
    • 3

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

    原文链接:https://www.emqx.com/zh/blog/deploying-emqx-cluster-on-aws-eks

  • 相关阅读:
    mockjs的案例
    app地推拉新平台哪个比较好用?
    使用selenium库模拟浏览器行为,获取网页的cookie值
    JavaWeb在线商城系统(java+jsp+servlet+MySQL+jdbc+css+js+jQuery)
    PIE-Engine 教程:水稻面积提取1(宿迁市)
    PTA: 字符串的模式匹配
    学习常用算法——python
    Rust的一些特性
    Blender与Substance Painter从头到尾制作科幻飞行器视频教程
    t2vec 辅助笔记:data_utils
  • 原文地址:https://blog.csdn.net/emqx_broker/article/details/127448560