Kubernetes CRD自定义控制器源码流程架构剖析-Kubernetes商业环境实战

专注于大数据及容器云核心技术解密,可提供全栈的大数据+云原生平台咨询方案,请持续关注本套博客。QQ邮箱地址:1120746959@qq.com,如有任何学术交流,可随时联系。详情请关注《数据云技术社区》公众号。

1 Kubernetes 默认控制器架构

1.1 Reflector资源监控

  • Reflector 类型定义在client-go cache 包中(tools/cache/reflector.go:47),它的作用是向 apiserver watch 特定的资源类型。
  • Watch 的资源可以是 in-build 的资源也可以是 custom 的资源。
  • 当 Reflector 通过 watch API 接收到存在新的资源对象实例的通知后,它使用相应的 list API 获取新创建的资源对象,然后 put 进 Delta Fifo 队列。

1.2 Informer 核心处理器(工具组合|对象检索|回调处理)

  • 通过 Informer(实际我们用到的都不是单纯的 informer,而是组合了各种工具的 sharedInformerFactory) ,达到轻松 List/Get 某个资源对象。
  • 监听资源对象的各种事件(比如创建和删除)然后触发回调函数,保证能够在各种事件发生的时候能够作出相应的逻辑处理。
  • Informer 定义在 cache 包中的基础 controller(tools/cache/controller.go:75),保存这个对象用于后续检索处理,触发自定义控制器来处理这个对象。
  • Base controller 提供了 NewIndexerInformer(tools/cache/controller.go:345) 函数来创建 Informer 和 Indexer. 在代码里我们可以直接调用这个函数或者使用工厂方法来创建 informer.

1.3 Indexer 检索管理

  • indexer 提供的是 objects 之上的检索能力。Indexer 也定义在 cache 包中(tools/cache/index.go:27)。
  • 典型的检索使用方式是基于一个对象的 labels 创建索引。Indexer 可以基于各种索引函数维护索引。
  • Indexer 使用一个线程安全的 store 来存储对象和其对应的 key。
  • 默认函数 MetaNamespaceKeyFunc(tools/cache/store.go:76) 可以生成对象的 key,类似 / 格式来关联对应的对象。

2 CRD自定义控制器扩展架构

2.1 Informer reference 定义CRD资源核心处理器

  • 自定义控制器需要创建对应CRD资源的Informer。
  • 自定义资源对象的 Informer 实例的引用

2.2 Indexer reference 定义CRD资源核心处理器

  • 自定义控制器代码需要创建这个引用对象,然后用于检索资源对象用于后续的处理。

2.2 其他重要模块

  • Resource Event Handlers: 这是一个回调函数,在 Informer 想要分发一个对象给控制器的时候会调用这个函数。典型的用法是写一个函数来获取分发过来的对象的 key,将 key 放入队列中等待进一步的处理。
  • Work queue: 这个队列是在自己的控制器代码中创建的,用来解耦一个对象的分发和处理过程。Resource event handler 函数会被写成提取分发来的对象的 key,然后将这个 key 添加到 work queue 里面
  • Process Item :在自己代码中实现的用来处理 work queue 中拿到的 items 的函数。这里可以有一个或多个函数来处理具体的过程,这个函数的典型用法是使用 Indexer 索引或者一个 Listing wrapper 来根据相应的 key 检索对象。

2.3 CRD总结

  • 通过Kubernetes CRD官方提供的扩展,仅需要继承通用CRD架构生成框架,然后实现Work queue和Process Item的具体资源控制逻辑。

3 收尾

本文先基本流程架构讲起,后续将详细剖析Kubernetes CRD源码细节。

专注于大数据及容器云核心技术解密,可提供全栈的大数据+云原生平台咨询方案,请持续关注本套博客。QQ邮箱地址:1120746959@qq.com,如有任何学术交流,可随时联系。详情请关注《数据云技术社区》公众号。

转载于:https://juejin.im/post/5d5422245188252bd409b30a

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值