带你读《云原生应用开发 Operator原理与实践》第三章 Kubebuilder 原理3.3 Controller-runtime 模块分析(五)

简介: 带你读《云原生应用开发 Operator原理与实践》第三章 Kubebuilder 原理3.3 Controller-runtime 模块分析

3.3.3        Controller

ControllerController-runtime的核心结构, 其实现了 Controller的基本逻辑:Controller管理一个工作队列,并从 source.Sources中获取 reconcile.Requests加入队列,通过执行 reconcile.Reconciler来处理队列中的每项 reconcile.Requests,reconcile.

Reconciler可以通过读写 Kubernetes 资源来确保集群状态与期望状态一致。

接口:

Controller接口定义在 pkg/controller/controller.go下,包括如下内容。

(1)         reconcile.Reconciler:匿名接口,定义了 Reconcile(context.Context,Request)

(Result,error

(2)      Watch(srcsource.Source,eventhandlerhandler.EventHandler,predicates

...predicate.Predicate)error:定义入队 reconcile.Requests,Watch() 方法会从 sour-ce.Source中获取Event, 并根据参数 Eventhandler来决定如何入队, 根据参数Predicates进行 Event过滤,Preficates可能有多个, 只有所有的 Preficates都返回True 时,才会将 Event 发送给 Eventhandler 处理。

(3)      Start(ctxcontext.Context)error:Controller的启动方法,实现了 Controller接口的对象,也实现了Runnable,因此,该方法可以被Manager管理。

(4)       GetLogger()logr.Logger:获取 Controller内的 Logger,用于日志输出。

实现:

Controller的实现在 pkg/internal/controller/controller.go下,为结构体 Controller,Controller结构体中包括的主要成员如下。

(1)   Namestring:必须设置, 用于标识 Controller,会在 Controller的日志输出中进行关联。

(2)  MaxConcurrentReconcilesint:定义允许 reconcile.Reconciler 同时运行的最多个数,默认为 1。

(3)  Doreconcile.Reconciler:定义了 Reconcile() 方法,包含了 Controller同步的业务逻辑。Reconcile()能在任意时刻被调用,接收一个对象的 NameNamespace,并同步集群当前实际状态至该对象被设置的期望状态。

(4)  MakeQueue    func()    workqueue.RateLimitingInterface:用 于在    Controller启动时,创建工作队列。由于标准的Kubernetes工作队列创建后会立即启动,因此,如果在 Controller启动前就创建队列,在重复调用 controller.New() 方法创建 Con-troller 的情况下,就会导致 Goroutine 泄露。

(5)  Queueworkqueue.RateLimitingInterface:使用上面方法创建的工作队列。

(6)  SetFieldsfunc(iinterface{})error:用 于 从 Manager中 获 取 Controller赖的方法, 依赖包括 Sourcess、EventHandlersPredicates等。 此方法存储的是controllerManager.SetFields()方法。

(7)  StartedBool:用于表示Controller 是否已经启动。

(8)  CacheSyncTimeouttime.Duration:定义了 Cache 完成同步的等待时长,超过时长会被认为是同步失败。默认时长为 2分钟。

(9)  startWatches[ ]watchDescription:定 义 了 一 组Watch操 作 的 属 性, 会在Controller启动时, 根据属性进行 Watch操作。watchDescription的定义见代码 清单3-30,watchDescription包括 Event的源 source.Source、Event的入队方法handler.EventHandler以及 Event的过滤方法 predicate.Predicate。

typewatchDescriptionstruct{srcsource.Source

handlerhandler.EventHandlerpredicates[]predicate.Predicate


}

 

(10)  LogLogr.Logger:用于记录日志的日志对象。

Controller的主要逻辑在Controller.Start()方法内,流程如图 3-4所示。

image.png

 

                                3—4Controiier 逻辑

 

(1) Manager调用 Start()方法后,进入 Controller 的启动流程,经过选举等预处理后,Controller进入Start()方法。

(2)  Controller根据 MakeQueue() 创建工作队列,并启动工作队列。

(3) Controller根据 startWatches参数启动各个 Watch 流程,并将工作队列注入各个Watcher中。 

(4) Controller根据 MaxConcurrentReconciles启动多个 Worker程序,用于处理队列中的对象。

(5) Work程序先从工作队列中获取需要处理的对象,然后调用 Controller成员 Do的 Reconcile()方法进行处理。

(6)  根据 Reconcile() 方法返回的结果, 将对象重新入队列或从队列中删除。重新入队列的方法可以是带有一定延迟的Queue.AddAfter(), 也可以是有限速的 Queue.AddRateLimited()。重新加入的次数无限制。

相关实践学习
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
相关文章
|
4月前
|
运维 监控 Cloud Native
【云故事探索】NO.17:国诚投顾的云原生 Serverless 实践
国诚投顾携手阿里云,依托Serverless架构实现技术全面升级,构建高弹性、智能化技术底座,提升业务稳定性与运行效率。通过云原生API网关、微服务治理与智能监控,实现流量精细化管理与系统可观测性增强,打造安全、敏捷的智能投顾平台,助力行业数字化变革。
【云故事探索】NO.17:国诚投顾的云原生 Serverless 实践
|
4月前
|
运维 监控 Cloud Native
【云故事探索】NO.17:国诚投顾的云原生 Serverless 实践
通过与阿里云深度合作,国诚投顾完成了从传统 ECS 架构向云原生 Serverless 架构的全面转型。新的技术架构不仅解决了原有系统在稳定性、弹性、运维效率等方面的痛点,还在成本控制、API 治理、可观测性、DevOps 自动化等方面实现了全方位升级。
|
6月前
|
Kubernetes Cloud Native 安全
云原生机密计算新范式 PeerPods技术方案在阿里云上的落地和实践
PeerPods 技术价值已在阿里云实际场景中深度落地。
|
6月前
|
Kubernetes Cloud Native 安全
云原生机密计算新范式 PeerPods 技术方案在阿里云上的落地和实践
PeerPods 技术价值已在阿里云实际场景中深度落地。
|
2月前
|
人工智能 Cloud Native 算法
拔俗云原生 AI 临床大数据平台:赋能医学科研的开发者实践
AI临床大数据科研平台依托阿里云、腾讯云,打通医疗数据孤岛,提供从数据治理到模型落地的全链路支持。通过联邦学习、弹性算力与安全合规技术,实现跨机构协作与高效训练,助力开发者提升科研效率,推动医学AI创新落地。(238字)
|
4月前
|
弹性计算 运维 Cloud Native
【云故事探索】NO.17:国诚投顾的云原生Serverless实践
简介: 通过与阿里云深度合作,国诚投顾完成了从传统 ECS 架构向云原生 Serverless 架构的全面转型。新的技术架构不仅解决了原有系统在稳定性、弹性、运维效率等方面的痛点,还在成本控制、API 治理、可观测性、DevOps 自动化等方面实现了全方位升级。
155 1
|
3月前
|
存储 弹性计算 Cloud Native
云原生数据库的演进与应用实践
随着企业业务扩展,传统数据库难以应对高并发与弹性需求。云原生数据库应运而生,具备计算存储分离、弹性伸缩、高可用等核心特性,广泛应用于电商、金融、物联网等场景。阿里云PolarDB、Lindorm等产品已形成完善生态,助力企业高效处理数据。未来,AI驱动、Serverless与多云兼容将推动其进一步发展。
206 8
|
8月前
|
运维 Cloud Native 测试技术
极氪汽车云原生架构落地实践
随着极氪数字业务的飞速发展,背后的 IT 技术也在不断更新迭代。极氪极为重视客户对服务的体验,并将系统稳定性、业务功能的迭代效率、问题的快速定位和解决视为构建核心竞争力的基石。
|
5月前
|
Cloud Native 中间件 调度
云原生信息提取系统:容器化流程与CI/CD集成实践
本文介绍如何通过工程化手段解决数据提取任务中的稳定性与部署难题。结合 Scrapy、Docker、代理中间件与 CI/CD 工具,构建可自动运行、持续迭代的云原生信息提取系统,实现结构化数据采集与标准化交付。
179 1
云原生信息提取系统:容器化流程与CI/CD集成实践

热门文章

最新文章