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

Posted 谐云科技

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了你想知道的RocketMQ Operator干货都在这里!相关的知识,希望对你有一定的参考价值。


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

概要

首先,什么是RocketMQ Operator?

其次,RocketMQ Operator 有什么用?

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

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

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

以下为演讲实录


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

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

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

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

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

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

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

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

什么是RocketMQ Operator

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

RocketMQ Operator的部署形态

下图是RocketMQ Operator的部署形态:

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

申明式编程核心思想

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

你想知道的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干货都在这里!

RocketMQ Operator设计思想

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

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

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

RocketMQ Operator使用指南

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

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

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

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

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

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

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

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

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

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

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

最后,RocketMQ Operator这个项目还不成熟,感兴趣的同学可以在文末留言一起探讨,共同参与建设哦~

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



关于 Apache RocketMQ

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

关于谐云科技

杭州谐云科技有限公司成立于2016年7月,创始人及核心团队来自浙江大学SEL实验室,从2011年开始专注研究PaaS核心技术,累计在Cloud Foundry, Kubernetes等国际顶级开源社区项目中贡献1400多万行核心代码,贡献度国内第一、全球第四,并出版了国内第一本深度分析容器技术的专业书籍《Docker:容器与容器云》,布道国内容器技术领域,是国内最早开始推动PaaS在大规模企业级应用落地的云供应商。

谐云科技专注于国产自主可控的企业级智能化容器云平台(观云台),超强的技术研发实力获得知名云计算厂商、中大型金融机构、电信运营商和传统行业龙头的认可,一年多的时间有近三十家合作伙伴落地。公司以观云台为核心,结合DevOps与微服务等场景,提供应用全生命周期管理,并将AI引入运维平台,助力企业提升自动化运维与智能运维水平。

杭州谐云科技有限公司

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

专注云原生

引领新IT

以上是关于你想知道的RocketMQ Operator干货都在这里!的主要内容,如果未能解决你的问题,请参考以下文章

干货一文讲透Apache RocketMQ技术精华

#yyds干货盘点# 关于并发编程-AQS,你想知道的都在这里

实践干货 | 你想知道的响应式设计技巧

技术干货 | 源码解析 Github 上 14.1k Star 的 RocketMQ

你想知道的大数据知识都在这里

你想知道的前后端协作规范都在这了