k8s中Operator的工作流程
1、基本概念
- CRD (Custom Resource Definition): 允许用户自定义 Kubernetes 资源,是一个类型;包括可指定的名称和模式,无需任何编程。Kubernetes API提供和处理自定义资源的存储
- CR (Custom Resourse): CRD 的一个具体实例;
- 自定义资源:扩展Kubernetes API或允许将自定义API引入kubernetes集群的对象
- 自定义控制器:以新的方式处理内置的Kubernetes对象,如Deployment、Service等,或管理自定义资源,如同管理本机Kubernetes组件
- Operator模式(适用于CRD和自定义控制器):Operator基于Kubernetes资源和控制器增加了允许Operator执行常见应用程序任务的配置。
2、Operator的工作流程
operator在后端执行一下操作以管理自定义资源
a、CRD创建: CRD定义规范和元数据,基于该规范和元数据应创建自定义资源,当创建CRD的请求时,使用kubernetes内部模式类型(OpenAPI v3模式)验证元数据,然后创建自定义资源(CRD)对象
b、自定义资源创建根据元数据和CRD规范验证对象,并相应地创建自定义对象创建
c、Operator(自定义控制器)开始监控event以及status状态变更,并基于CRD管理自定义资源,它可以提供event或status状态在自定义资源上执行CRUD操作,因此每当变更自定义资源的状态时,都能触发相应的event
3、自定义控制器的工作原理
Reflector:负责通过List、Watch函数监控APIserver中指定类型的资源对象;收到APIServer的资源变动通知时,Reflector基于Listing API获取资源变动信息,并放置在由watchHandler函数定义的DeIta FIFO队列中
Informer:基于ProcessLoop 从Delta FIFO队列中取出(POP)对象缓存至本地,同时调用控制器以便将对象传递给它
Indexer: 索引器,负责索引哪些缓存在本地的资源对象。Indexer使用线程安全的数据存储来存储对象及其键。在Store中定义了一个名为MetaNamespaceKeyFunc的默认函数,该函数生成对象的键的格式是/<name>的组合。
Resource Event Handlers:需要传递对象给自定义控制器时调用的回调函数,负责从Informer接收待处理资源对象的key,并存入Workqueue中
Workqueue:用户在自定义控制器中自行实现消息队列,它从Resource Event Handlers接收和缓冲待处理的资源对象,并交由Process Item进行处理,从而将对象接收和处理的过程解耦
Process Item:执行资源对象管理操作的业务代码,通常由一到多个函数组成,负责从Workqueue中取出对象并完成真正的处理过程,必要时,这些函数还会调用Indexer以检索和获取资源的详细状态数据。