简介
CoreOS在2016年底提出了Operator的概念,当时的一段官方定义如下:
An Operator represents human operational knowledge in software, to reliably manage an application.
“Operator 可以通过软件的方式定义人类的运维操作,并可靠地管理应用”
Operator定义了一组在Kubernetes集群中打包和部署复杂业务应用的方法,它可以方便地在不通集群中部署并在不同的客户间传播共享,同时Operator还提供了一套应用在运行时刻的监控管理方法,还可以时刻监控应用自身状态和该应用在Kubernetes集群中的关注事件,并在毫秒级做出响应处理,比如对应用的自动化容灾或是滚动升级等高级运维操作
进一步讲,Operator的设计和实现并不是千篇一律的,开发者可以根据自身业务需求,不断演进应用和自定义模型,同时面向具体的自动化场景在控制器中扩展相应的业务逻辑
Operator与Kubernetes
在Kubernetes实现容器编排的核心思想中,会使用控制器(Controller)模式对etcd里的API模型对象变化保持不断监听(Watch),并在控制器中对指定事件进行响应处理,针对不同API模型,可以在对应的控制权中添加响应的业务逻辑,通过这种方式完成应用编排中各阶段的事件处理。而Operator正是基于控制器模式,允许应用开发者通过扩展Kubernetes API对象的方式,将复杂的分布式应用集群抽象为一个自定义的API对象,通过对自定义API模型的请求,实现基本的运维操作
Operator 开发流程
如图为一个项目从开发到开源再到被使用的全生命周期流程:

- 开发者首先使用Operator SDK创建一个Operator项目
- 利用SDK生成Operator对应的脚手架代码,然后扩展相应业务模型和API,最后实现业务逻辑,完成一个Operator的代码编写
- 参考社区测试指南进行业务逻辑的本地测试以及打包和发布格式的本地校验
- 在完成测试后根据规定格式向社区提交PR,会有专人进行审阅
- 待社区审核通过完成merge后,终端用户就可以在OperatorHub.io页面找到业务对应的Operator
- 用户可以在OperatorHub.io上找到业务Operator对应的说明文档和安装指南,通过简单的命令操作即可在目标集群上完成Operator实例的安装
- Operator实例会根据配置创建所需的业务应用,OLM和Operator Metering等组件可以帮助用户完成业务应用对应的监控采集等监控采集等管理软件
Operator Framework
Operator Framework 是一组用于快速开发Operator的开源工具集,它可以帮助Operator用户迅速找到开发的切入点并按照标准实现符合自身需求的Operator原型,它主要包含了如下3个组件:
- Operator SDK
Operator SDK提供了一组用于构建、测试和打包Operator的工具,一个Operator开发者可以利用SDK方便地生成一套具备基础框架的Operator脚手架代码,SDK中集成了很多Operator框架中可以共享的优秀实践和模式范本,也节省了重复造轮子的时间成本 - Operator Lifecycle Manager(OLM)
当开发者使用SDK构建好自己的Operator后,可以使用OLM将其部署到对应的Kubernetes集群中。通过OLM可以控制Operator部署在那些namespaces中,Operator实例进行交互的权限,除此之外,OLM还负责在Operator实例运行的生命周期中进行相应的管理工作,比如Operator和其依赖资源的自动化更新等运维操作 - Operator Metering
Operator Metering用于监控Operator实例中的应用资源使用率,除了常用的CPU和内存使用率外,用户还可以自定义其他的Metering目标;同时Operator Metering还封装了相应的监控报告(Report)模型,方便用户定义报告的输出形式、存储目标和采集方案等具体信息
下图是利用Operator Framework进行Operator开发、打包、部署以及基于Operator实例进行云原生应用创建、管理和运维的标准流程

Operator 组成部分
如图一个完整的Operator通常包括如下内容

- 应用业务逻辑抽象出的扩展资源定义(CRD)、对应的扩展Kubernetes API及应用运行期望终态的定义标准
- 用于监控应用运行状态的自定义控制器(custom controller)
- 控制器中的自定义业务运维逻辑,即面向CR期望终态不断进行调谐(reconcile)的业务代码
- Operator中自定义控制器的管理逻辑
- 封装Operator和CR的部署模型,比如k8s deployment
网友评论