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

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

3.2.2         Controller初始化

接下来,我们继续分析Controller的初始化过程。通过前面对于CRD的介绍,借助Kubebuilder个“脚手架工具,我们可以快速生成 Controller 的文件,部分代码片段见代码清单 3-8。由此可见,CRDController初始化的核心代码是 SetupWithManager方法,借助这个方法,就可以完成 CRDManager对象中的安装,最后通过 Manager象的 start方法来完成 CRDController的运行。

func(r*DemoReconciler)Reconcile(reqctrl.Request)(ctrl.Result,error){

_=context.Background()

_=r.Log.WithValues("demo",req.NamespacedName)


 

//书写你⾃定义的代码逻辑

returnctrl.Result{},nil

 

}

 

//SetupWithManager使⽤ Manager设置Controller.

func (r*DemoReconciler)SetupWithManager(mgrctrl.Manager)error{returnctrl.NewControllerManagedBy(mgr).

For(&yangweiweiv1.Demo{}).

Complete(r)


}

它首先借助Controller-runtime包初始化Builder对象,当它完成Complete方法时,实际完成了 CRDReconciler对象的初始化,而这个对象是一个接口方法,它必须实现 Reconcile方法。

下面我们分别对上述初始化的方法做进一步的梳理。ctrl.NewControllerManagedBy   方法实际借助 Controller-runtime完成了 Builder对象的构建,并借助它关联 CRDAPI义的 Scheme信息,从而得知 CRDController需要监听的 CRD 类型、版本等信息。这个方法的最后一步是 Complete 的过程。为了便于理解,部分代码片段见代码清单3-9

func(blder*Builder)Complete(rreconcile.Reconciler)error{

_,err:=blder.Build(r)returnerr

}

 

//构建应⽤程序,并返回创建的ControllerManagedBy.

func(blder*Builder)Build(rreconcile.Reconciler)(controller.Controller,error){

...

//设置ControllerManagedBy

iferr:=blder.doController(r);err!=nil{returnnil,err

}

//设置Watch

iferr:=blder.doWatch();err!=nil{returnnil,err

}

 

returnblder.ctrl,nil


}

 

在构建 Controller的方法中最重要的两个步骤是 doControllerdoWatch。 在doController的过程中,实际的核心步骤是完成 Controller对象的构建,从而实现基于SchemeController对象的 CRD的监听流程。而在构建 Controller的过程中,它的 do字段实际对应的是 Reconciler接口类型定义的方法,也就是在Controller对象生成之后,必须实现这个定义的方法。它是如何使Reconciler对象同Controller产生联系的?实际上,Controller初始化的过程中,借助了 Options参数对象中设计的 Reconciler对象,并将其传递给了Controller对象的 do字段。所以当我们调用 SetupWithManager方法的时候,不仅完成了 Controller的初始化,还完成了 Controller 监听资源的注册与发现过程,同时将CRD的必要实现方法(Reconcile方法进行了再现。至此,我们完成了Controller初始化分析,具体内容见代码清单3-10。

typeControllerstruct{

Doreconcile.Reconciler

}

 

typeReconcilerinterface{

Reconcile(context.Context,Request)(Result,error)

}

相关文章
|
1月前
|
Cloud Native 数据处理 云计算
探索云原生技术在大数据分析中的应用
随着云计算技术的不断发展,云原生架构作为一种全新的软件开发和部署模式,正逐渐引起企业的广泛关注。本文将探讨云原生技术在大数据分析领域的应用,介绍其优势与挑战,并探讨如何利用云原生技术提升大数据分析的效率和可靠性。
|
1月前
|
缓存 Java API
【云原生】Spring Cloud Gateway的底层原理与实践方法探究
【云原生】Spring Cloud Gateway的底层原理与实践方法探究
|
1月前
|
Kubernetes Cloud Native 开发工具
带你读《云原生应用开发:Operator原理与实践》精品文章合集
带你读《云原生应用开发:Operator原理与实践》精品文章合集
|
2月前
|
人工智能 缓存 Kubernetes
.NET 9 首个预览版发布:瞄准云原生和智能应用开发
.NET 9 首个预览版发布:瞄准云原生和智能应用开发
|
3月前
|
存储 SQL Cloud Native
深入了解云原生数据库CockroachDB的概念与实践
作为一种全球领先的分布式SQL数据库,CockroachDB以其高可用性、强一致性和灵活性等特点备受关注。本文将深入探讨CockroachDB的概念、设计思想以及实践应用,并结合实例演示其在云原生环境下的优越表现。
|
3月前
|
Cloud Native 关系型数据库 大数据
CockroachDB:云原生数据库的新概念与实践
本文将介绍CockroachDB,一种先进的云原生数据库,它具备分布式、强一致性和高可用性等特点。我们将探讨CockroachDB的基本原理、架构设计以及在实际应用中的种种优势和挑战。
|
1月前
|
Cloud Native 安全 持续交付
构建未来:云原生架构的演进与实践
【2月更文挑战第30天】 随着数字化转型的深入,企业对于信息技术的需求日益复杂化和动态化。传统的IT架构已难以满足快速迭代、灵活扩展及成本效率的双重要求。云原生技术作为解决这一矛盾的关键途径,通过容器化、微服务、持续集成/持续部署(CI/CD)等手段,实现了应用的快速开发、部署及运维。本文将探讨云原生架构的最新发展,分析其如何助力企业构建更加灵活、高效的业务系统,并结合实际案例,展示云原生转型过程中的最佳实践和面临的挑战。
|
13天前
|
Kubernetes 监控 Cloud Native
构建高效云原生应用:基于Kubernetes的微服务治理实践
【4月更文挑战第13天】 在当今数字化转型的浪潮中,企业纷纷将目光投向了云原生技术以支持其业务敏捷性和可扩展性。本文深入探讨了利用Kubernetes作为容器编排平台,实现微服务架构的有效治理,旨在为开发者和运维团队提供一套优化策略,以确保云原生应用的高性能和稳定性。通过分析微服务设计原则、Kubernetes的核心组件以及实际案例,本文揭示了在多变的业务需求下,如何确保系统的高可用性、弹性和安全性。
17 4
|
28天前
|
Java fastjson 数据安全/隐私保护
【Dubbo3技术专题】「云原生微服务开发实战」 一同探索和分析研究RPC服务的底层原理和实现
【Dubbo3技术专题】「云原生微服务开发实战」 一同探索和分析研究RPC服务的底层原理和实现
39 0
|
1月前
|
运维 Cloud Native 持续交付
云原生技术的未来展望:如何塑造下一代应用开发
【2月更文挑战第30天】 随着云计算的不断发展,云原生技术已经成为推动现代应用开发的重要力量。本文将深入探讨云原生技术的核心概念,分析其在提高开发效率、降低运维成本以及支持复杂业务场景中的作用。同时,文章还将预测云原生技术的发展趋势,并讨论如何在不断变化的技术环境中保持应用的敏捷性和可靠性。

热门文章

最新文章