你想知道的RocketMQ Operator干货都在这里!

2023年 7月 9日 99.8k 0

近日,在 Apache RocketMQ 开发者社区的线下活动上,谐云科技首席架构师魏欢以《RocketMQ Operator In Kubernetes》为主题做了精彩分享,并和大家一起探讨关于 Apache RocketMQ 的未来改进计划。

概要

首先,什么是RocketMQ Operator?

其次,RocketMQ Operator 有什么用?

然后,从开发的角度,我们如何设计和实现一个 Operator?

最后,分享一个 RocketMQ Operator 的使用指南

 

以下为演讲实录

大家好,我是魏欢,来自杭州谐云科技,今天很荣幸能跟 RocketMQ 开发者社区的同学们分享关于 Kubernetes 场景下 RocketMQ 集群容器化运维的一些个人思路,以及前阵子我写的一个运维工具,也就是今天要讲的 Topic:RocketMQ Operator。

 

大规模数据中心场景下,有状态的中间件集群的运维

首先我想举个例子,假设在大规模的DC场景下,关于RocketMQ集群的一个部署场景。下图表明了属于多个DC中的一个DC X,以及属于该DC X的一个NameServer集群Y和Broker集群Y。其中NameServer集群包含M个实例,Broker集群包含N个Master实例,每个Broker Master实例又会和N个Broker Slave实例交互。

 

 

有状态中间件集群运维的难点

那么,假如我们身处这种场景,我们一般怎么运维?例如:如何能够秒级部署一个新的RocketMQ集群? 如何在业务无感知的情况下快速地增加或减少RocketMQ集群的NameServer或者Broker的实例数量? RocketMQ集群运行的过程中,假如其中一个或多个实例掉了,如何快速地恢复或者切换?如何更新RocketMQ集群版本? 以及如何去管理多个数据中心多个RocketMQ集群等等。

 

什么是RocketMQ Operator

回到主题,什么是RocketMQ Operator?我给它起的口号是:“Create,operate and scale self-healing RocketMQ clusters on Kubernetes.”它是一个Go程序,跑在kubernetes集群内,能够帮助我们自动化地去运维每个RocketMQ集群的状态。

 

RocketMQ Operator的部署形态

下图是RocketMQ Operator的部署形态:

简单来说:RocketMQ Operator通过自定义RocketMQ集群的资源对象,扩展和实现了一套基于Kubernetes的API,然后它会主动去观察和维护每个RocketMQ集群的状态。

申明式编程核心思想

那么作为一个程序,Operator具体是如何设计和工作的呢? 这里简单介绍一下“申明式编程”的设计思想。“申明式编程”的设计思想是跟复杂的“命令式编程”的设计思想对应的。“申明式编程”的思路非常简单,可以用一段伪码表示。

简单来讲,程序主体是一个循环,它会不断地干三件事:

第一,观察和列出待观察对象的当前状态

第二,理解我们希望待观察对象达到的一个状态

第三,做一些改变工作,促使两者状态达到一致。

举例:Kubernetes源码中对于申明式编程的运用

假如我们去看 Kubernetes 的源码,我们会发现“申明式编程”的思想贯穿了整个 kube-controller-manager 核心组件的代码设计。下图显示的是目前 kubernetes 最新的1.13版本(前几天刚刚 release),大家可以看到 kube-controller-manager 源码中写着大量的这些controller,比如endpointController、replicationController、podGCController、以及namespaceController、deploymentController、daemonsetController等等等等,包括了所有我们能够在Kubernetes中进行操作的资源对象。而Kubernetes的kube-controller-manager就是这些controller的一个集合,它会在初始化的时候启动每个controller的Go Routine,每个Go Routine只负责观察和维护各自关心的资源对象,保证最终的运行状态跟我们理想的一致。

RocketMQ Operator设计思想

因此,Operator的核心设计思想也是类似,针对每一种我们需要关心的Kubernetes资源对象,原生的也好,自定义的资源对象(CRD)也罢,使用“申明式编程”的思路实现它就好。可以看到这是目前 RocketMQ Operator 写的几个Controller。

另外,这是一个关于Broker集群定义的结构体。这里我们可以看到,我定义了Broker容器的启动镜像、依赖的NameServer集群的IP地址、Broker是否是全主模式、以及其他一些为了实现Broker集群容器化运行而定义的属性等等。

RocketMQ Operator使用指南

下面是一个简单的使用指南。

首先是对于Kubernetes集群的版本要求,建议1.9以上。

接下来,使用kubectl创建Namespace、RBAC、CRD等资源对象。然后,拉起一个NameServer集群。

然后,部署Operator程序。并且,拉起一个Broker集群,起Broker集群的时候,可以按需设置Broker集群的几种工作模式。这边可以看到一个2 master 2 slave broker集群的资源对象的配置参数。

然后是一些验证工作,这边可以看到集群中每个Broker节点的一些关键配置,并且通过集群内部客户端进行一些验证。

最后,RocketMQ Operator这个项目还不成熟,感兴趣的同学可以关注微信公众号“谐云科技”一起探讨,共同参与建设哦~

关于 Apache RocketMQ

Apache RocketMQ 作为阿里巴巴捐献给 Apache 基金会的顶级中间件项目,目前社区活跃,并且轻松支撑着每年阿里巴巴“双11”活动万亿级别的消息流量洪峰,新版本的 RocketMQ 更是支持分布式事务一致性、消息轨迹、多语言客户端等特性,特别适合在需要“低延时、高吞吐、高并发、高可用、分布式事务强一致性”的金融和互联网场景中使用。更多关于 RocketMQ 的介绍,请访问 https://rocketmq.apache.org

相关文章

KubeSphere 部署向量数据库 Milvus 实战指南
探索 Kubernetes 持久化存储之 Longhorn 初窥门径
征服 Docker 镜像访问限制!KubeSphere v3.4.1 成功部署全攻略
那些年在 Terraform 上吃到的糖和踩过的坑
无需 Kubernetes 测试 Kubernetes 网络实现
Kubernetes v1.31 中的移除和主要变更

发布评论