原创 吴就业 173 0 2023-06-03
本文为博主原创文章,未经博主允许不得转载。
本文链接:https://wujiuye.com/article/5c6ef5da03b546729bf2fdacb7444ccf
作者:吴就业
链接:https://wujiuye.com/article/5c6ef5da03b546729bf2fdacb7444ccf
来源:吴就业的网络日记
本文为博主原创文章,未经博主允许不得转载。
现在已经涌现一批新的在云原生背景下重新架构设计的中间件,即云原生中间件。这类中间件充分利用了云的特性,采用微服务架构设计,并且计算存储分离,支持容器化部署,可实现自动化运维。计算层和数据层都提供水平弹性扩缩容的支持。云原生中间件能很好的结合Serverless提供自动弹性扩缩容。
但是这些新的云原生中间件很难短时间内覆盖到企业项目中,企业走云原生这条道路,还需要考虑传统中间件如何上云的问题。最需要解决的是如何容器化部署,以及自动化运维。这就不得不借助Operator了。
简单概括,Kubernetes Operator实际就是自定义资源(CRD)+ 自定义资源控制器(Controller)。
那么Operator是如何做到的呢?这需要我们对Kubernetes的架构和工作原理有所理解。
例如,我们部署一个微服务,需要我们先编写Deployment.yml,然后执行kubectl命令apply一下,实际就是kubectl工具调用API创建Deployment资源,然后Kubernetes的Deployment资源控制器会监听到Deployment资源的创建,然后调度和创建Pod。
这里要说到client-go,client-go实际也是Kubernetes内置的资源控制器的底层sdk。可以获取、监听、创建、删除Kubernetes上的Pod、Service、Ingress等内置资源,以及自定义资源。
控制器通常是基于监听机制实现调谐逻辑,例如通过监听Pod资源删除,查询当前Pod数量,可以创建新的Pod保持期望的Pod数量。
常见的Operator-SDK,Kubebuilder工具,其底层都是对controller-runtime的封装,更底层就是基于client-go实现API操作资源。而controller-runtime框架是社区基于client-go之上封装的一个控制器处理的框架,方便我们开发Operator。
总结就是,Operator-SDK和Kubebuilder是开发Kubernetes Operator的脚手架工具,controller-runtime是开发Operator的框架,client-go则是框架的底层。
对于入门者,屏蔽低层不谈反而容易让人蒙圈,建议初学者在学习Operator-SDK或Kubebuilder之前,应该先学习了解Kubernetes的整个架构、工作原理,学习了解Kubernetes的API,然后学习了解client-go、controller-runtime。
中间件的部署往往很复杂,不像业务服务大多数是无状态服务,不需要过多的运维操作。
例如部署Redis Cluster,不同节点不同配置,且启动有顺序要求,然后配置集群节点之间相互发现,为master节点分配槽位,配置主从节点交叉复制等。当然还有后续的运维操作,例如添加新的节点,移除一个节点,故障节点的恢复等。
以往我们的做法是将这一系列运维操作记录到文档,每次都根据这个文档去重复做这些操作,过程越复杂,过程中就越容易遗漏步骤或是出错。
想要实现将这类中间件部署到k8s上,并不能只靠StatefulSet就能实现,而Operator就能让我们将这些运维操作都用代码来实现,让这类中间件也能部署到k8s上。
中间件容器化部署的几种形式:
中间件容器化部署几种形式的优缺点:
我们需要根据中间件具体架构和人工部署流程决定使用何种方式,建议:
声明:公众号、CSDN、掘金的曾用名:“Java艺术”,因此您可能看到一些早期的文章的图片有“Java艺术”的水印。
kubebuilder使用helm代替kustomize;代码改了但似乎没生效-镜像拉取问题; 使用ConfigMap替代Apollo配置中心的最少改动方案;环境变量的注入以及传递;Kubebuilder单测跑不起来;Helm chart和finalizer特性冲突问题。
在实战的过程中,我自己做了很多笔记,从模糊到清晰,逐渐了解云原生架构,不仅参与了中间件容器化架构改造与自动化部署Operator开发,还参与了IaC基础设施即代码的开发,kubevela terraform Addon插件开发,从应用层到中间件到基础设施都有参与,整条链路的一些核心原理都非常清晰。
订阅
订阅新文章发布通知吧,不错过精彩内容!
输入邮箱,提交后我们会给您发送一封邮件,您需点击邮件中的链接完成订阅设置。