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以检索和获取资源的详细状态数据。

posted @ 2021-09-01 18:28  在半空頫視地球╰☆╮  阅读(1021)  评论(0编辑  收藏  举报