在 AWS EKS 上部署 EMQX MQTT 集群
云进入以「应用为中心」的云原生阶段,Operator 模式的出现,则为 Kubernetes 中的自动化任务创建配置与管理提供了一套行之有效的标准规范。通过将运维知识固化成高级语言 Go/Java 代码,使得运维知识可以像普通软件一样交付,并能支持高可靠、具备高级运维能力的有状态应用批量交付。
针对大规模分布式物联网 MQTT 消息服务器 EMQX 全生命期管理的自动化管理工具 EMQX Kubernetes Operator(本文中简称 EMQX Operator)应运而生。它作为 Kubernetes 上的自定义控制器运行,并与 Kubernetes API 服务器(kube-apiserver)进行通信,将高层描述转换为正常的 Kubernetes 资源,以保持所需的应用程序状态。
EMQX Operator 使 EMQX 的部署、调优和运维变成一种低成本、标准化、可重复性的能力,帮助用户高效实现集群扩容、无缝升级、故障处理和统一监控。
本文章将以 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 等可根据需求添加。
添加节点组与节点
集群创建成功后,进入集群详细页面,点击计算,选择添加节点组。
此处的实例类型根据业务需求自行调整,本文为示例选择了较小的实例规格。
访问 Kubernetes 集群
创建 kubeconfig 文件,可使用 aws cli 来生成。初次使用,根据提示进行相关配置,如权限、区域等,配置好后通过如下命令生成 kubeconfig 文件。
aws eks update-kubeconfig --region region-code --name my-cluster
注:区域与集群名称需替换成自己所在区域与集群名字。
LoadBalancer 相关
在 service 使用LoadBalancer
, 需先安装 Load Balancer Controller。
StorageClass 配置
在该方案里, 我们使用 EBS, 因此在使用前我们需安装 EBS CSI 驱动程序。在集群详情页面里,我们点击插件、新增,选择 Amazon EBD CSI 驱动程序进行添加。如下:
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
执行以下命令
$ kubectl apply -f storageclass.yaml
使用 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
使用 NLB 进行 TLS 终结
我们推荐在 NLB 上做 TLS 终结,可通过以下几个步骤实现:
zhengshu导入
在 AWS 控制台(https://us-east-2.console.aws.amazon.com/acm/home), 导入相关zhengshu,zhengshu导入后点击zhengshu ID,进入详情页面,复制 ARN 信息,如下图:
修改部署 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
相比不使用 TLS zhengshu,我们在 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
版权声明: 本文为 EMQ 原创,转载请注明出处。
原文链接:https://www.emqx.com/zh/blog/deploying-emqx-cluster-on-aws-eks

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
英特尔在 FFmpeg 中实现了 AV1 QSV 编码器
今年 8月,英特尔为 FFmpeg 提供了 openVPL 支持,可用于将视频编码/解码为 AV1 和其他格式。上周,英特尔工程师又为 FFmpeg 提供了一个 AV1 快速同步视频 (Quick Sync Video - QSV) 编码器。 “快速同步”视频编码器是指将视频从例如 DVD 或蓝光光盘快速转码为适用于手机等智能设备格式(主要是 H.264)的用例,对专业的视频工作场景非常有效。 新的“qsvenc_av1”/“av1_qsv”编码器已合并到 FFmpeg 主线。在 Windows 和 Linux 上,QSV API 可通过 Intel Media SDK 获得,Intel Quick Sync Video AV1 编码器在底层使用 oneVPL 作为视频处理库,该库是 Intel 优秀的开源 oneAPI 软件套件的一部分。 从该提交可以看到 AV1 QSV 编码器的源代码,该编码器仅在启用 libvpl 时可用,MSDK 不支持 AV1 编码。 英特尔最新的 DG2/Alchemist GPU(例如最近推出的 Arc A750 和 A770 显卡)可使用独立显卡硬件加...
- 下一篇
探究Presto SQL引擎(4)-统计计数
作者:vivo互联网用户运营开发团队 - Shuai Guangying 本篇文章介绍了统计计数的基本原理以及Presto的实现思路,精确统计和近似统计的细节及各种优缺点,并给出了统计计数在具体业务使用的建议。 系列文章: 探究Presto SQL引擎(1)-巧用Antlr 探究Presto SQL引擎(2)-浅析Join 探究Presto SQL引擎(3)-代码生成 一、背景 学习Hadoop时接触的第一个样例就是word count,即统计文本中词的数量。各种BI、营销产品中不可或缺的模块就是统计报表。在常见的搜索分页模块,也需要提供总记录数。 统计在SQL引擎中可谓最基础、最核心的能力之一。可能由于它太基础了,就像排序一样,我们常常会忽视它背后的原理。通常的计数是非常简单的,例如统计文本行数在linux系统上一个wc命令就搞定了。 除了通常的计数,统计不重复元素个数的需求也非常常见,这种统计称为基数统计。对于Presto这种分布式SQL引擎,计数的实现原理值得深入研究,特别是基数统计。关于普通计数和基数计数,最典型的例子莫过于PV/UV。 二、基数统计主要算法 在SQL语法里面,...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- SpringBoot2全家桶,快速入门学习开发网站教程
- MySQL8.0.19开启GTID主从同步CentOS8
- Docker安装Oracle12C,快速搭建Oracle学习环境
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS7安装Docker,走上虚拟化容器引擎之路
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- CentOS6,7,8上安装Nginx,支持https2.0的开启