带你读《云原生应用开发 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实时生图绘板
相关文章
|
Kubernetes 监控 Cloud Native
云原生时代下的应用开发与部署实践
【10月更文挑战第4天】在云原生的浪潮中,开发者和运维人员面临着新的挑战和机遇。本文将通过实际案例,展示如何在云平台上高效地开发、部署和管理应用,同时确保系统的可扩展性和高可用性。我们将深入探讨容器化技术、微服务架构以及持续集成/持续部署(CI/CD)流程的实施策略,旨在为读者提供一套完整的云原生解决方案框架。
|
Kubernetes Cloud Native 持续交付
云原生技术在现代应用开发中的角色与实践
【9月更文挑战第9天】 随着云计算技术的飞速发展,云原生(Cloud Native)已经成为推动企业数字化转型的核心力量。本文将深入探讨云原生的基本概念、关键技术及其在实际开发中的应用案例,旨在为读者提供一条清晰的云原生技术学习路径和应用指南。通过实例分析,我们将揭示云原生如何优化资源管理、提升应用性能及加快部署速度,进而帮助企业构建更加灵活、可靠和高效的软件系统。
|
存储 缓存 分布式计算
StarRocks x Iceberg:云原生湖仓分析技术揭秘与最佳实践
本文将深入探讨基于 StarRocks 和 Iceberg 构建的云原生湖仓分析技术,详细解析两者结合如何实现高效的查询性能优化。内容涵盖 StarRocks Lakehouse 架构、与 Iceberg 的性能协同、最佳实践应用以及未来的发展规划,为您提供全面的技术解读。 作者:杨关锁,北京镜舟科技研发工程师
StarRocks x Iceberg:云原生湖仓分析技术揭秘与最佳实践
|
Kubernetes Cloud Native 持续交付
云原生技术在现代应用开发中的实践与思考
【10月更文挑战第35天】云原生技术,作为云计算的进阶形态,正引领着软件开发和运维的新潮流。本文将深入探讨云原生技术的核心理念、关键技术组件以及在实际项目中的应用案例,帮助读者理解如何利用云原生技术优化应用架构,提高开发效率和系统稳定性。我们将从容器化、微服务、持续集成/持续部署(CI/CD)等角度出发,结合实际代码示例,展现云原生技术的强大能力。
|
监控 Cloud Native 持续交付
云原生技术深度解析:重塑现代应用开发与部署范式####
本文深入探讨了云原生技术的核心概念、关键技术组件及其在现代软件开发中的重要性。通过剖析容器化、微服务架构、持续集成/持续部署(CI/CD)等关键技术,本文旨在揭示云原生技术如何促进应用的敏捷性、可扩展性和高可用性,进而推动企业数字化转型进程。不同于传统摘要仅概述内容要点,本部分将融入具体案例分析,直观展示云原生技术在实际应用中的显著成效与挑战应对策略,为读者提供更加丰富、立体的理解视角。 ####
|
Kubernetes Cloud Native 持续交付
云原生技术在现代应用开发中的实践与展望
【10月更文挑战第7天】随着技术的不断演进,云计算已从简单的资源租用模式转变为支持复杂、高效、灵活的云原生应用架构。本文将深入探讨云原生技术的核心概念及其在现代应用开发中的应用,通过分析Kubernetes容器编排和微服务架构的实践案例,揭示云原生技术如何推动软件开发的现代化进程。文章旨在为开发者和架构师提供一套实用的云原生应用开发指南,同时展望未来云原生技术的发展方向。
188 8
|
Kubernetes Cloud Native 持续交付
云原生技术:重塑现代应用开发与部署模式####
本文深入探讨了云原生技术的核心概念、发展历程及其在现代软件开发和部署中的关键作用。通过分析云原生架构的特点,如容器化、微服务、持续集成与持续部署(CI/CD),以及它如何促进应用的可伸缩性、灵活性和效率,本文旨在为读者提供一个关于云原生技术全面而深入的理解。此外,还将探讨实施云原生策略时面临的挑战及应对策略,帮助组织更好地把握数字化转型的机遇。 ####
|
运维 Cloud Native Android开发
云原生之旅:容器化与微服务架构的融合之道安卓应用开发入门指南
本文将深入探讨云原生技术的核心要素——容器化和微服务架构,并揭示它们如何共同推动现代软件的开发与部署。通过实际案例分析,我们将看到这两种技术如何相辅相成,助力企业实现敏捷、可扩展的IT基础设施。文章旨在为读者提供一条清晰的道路,指引如何在云原生时代利用这些技术构建和优化应用。 本文将引导初学者了解安卓应用开发的基本概念和步骤,从安装开发环境到编写一个简单的“Hello World”程序。通过循序渐进的讲解,让读者快速掌握安卓开发的核心技能,为进一步深入学习打下坚实基础。
313 28
|
人工智能 Serverless API
云原生应用开发平台CAP:一站式应用开发及生命周期管理解决方案
阿里云的云应用开发平台CAP(Cloud Application Platform)是一款一站式应用开发及应用生命周期管理平台。它提供丰富的Serverless与AI应用模板、高效的开发者工具链及企业级应用管理功能,帮助开发者快速构建、部署和管理云上应用,大幅提升研发、部署和运维效能。
1222 3
|
Cloud Native 测试技术 云计算
云原生技术在现代应用开发中的角色与实践
【9月更文挑战第31天】本文深入探讨了云原生技术如何革新现代应用开发流程,通过实际案例分析,揭示了其对提高开发效率、确保系统可扩展性和可靠性的显著影响。文章不仅介绍了云原生的核心概念,还提供了实施策略和最佳实践,旨在为开发者提供一条清晰的云原生转型之路。

热门文章

最新文章