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

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

3.2.1       Manager初始化

通过构建 CRDAPIController,我们已经明确,CRD 是用户自定义的资源,用户自定义它的协调逻辑。那么要想实现自定义 CRDController 协调逻辑的安装、运行,这离不开 Manager结构对象。那么Manager 是如何来初始化的呢?在介绍之前,我们先明确Kubernetes是一套以Go语言来实现的 PaaS编排平台。因此,这里实现的Controller程序也是 Go语言支持的,它的入口方法是 main文件中的main()方法。

通过 Kubebuilder工具创建的 API资源,除了创建 CRD文件外,还生成了运行Controller文件的入口方法的 main文件。CRDmain文件的产生过程还是比较简单的,感兴趣的读者可以自行阅读Kubebuilder的源码github。通过 main 的模板,根据定义的CRD类型、版本等信息,渲染出 main文件的内容。它的内容大致包含 Manager的初始化、CRD的安装、Manager的启动。

下面我们通过截取部分代码片段来帮助读者理解 Manager的初始化过程(不是连续的文件Manager初始化是借助于ctrl.NewManager 方法实现的,而这个方法的位置指向Controller-runtime包的 manager.New方法,在New 的方法中,实际是根据传入的参数进Manager对象的 SchemeCacheClient 等模块的初始化构建。这也是在前面介绍Kubebuilder框架时,我们提到的 ClientCache等内容。而 ManagerNew方法中的Scheme变量,是借助Kubebuilder工具,根据用户 CRD生成主程序main.go 的入口函数main方法传入的,即这里的Scheme已经绑定了用户 CRD。然后,初始化 Manager对象构建出来后,通过 ManagerCache监听 CRD一旦 CRD在集群中创建了Cache监听到发生了变化,就会触发Controller的协调程序 Reconcile工作,具体内容见代码清单3-7

//Kubebuilder初始化 Manager对象


 

mgr,err:=ctrl.NewManager(ctrl.GetConfigOrDie(),ctrl.Options{

Scheme:   scheme,MetricsBindAddress:metricsAddr,Port:       9443,

LeaderElection:        enableLeaderElection,

LeaderElectionID:       "{{hashFNV.Repo}}.{{.Domain}}",

})

//初始化失败,退出主程序

iferr!=nil{

setupLog.Error(err,"unabletostartmanager")os.Exit(1)

}

 

//controller-runtime/pkg/manager/manager.go⽂件中的New⽅法

funcNew(config*rest.Config,optionsOptions)(Manager,error){

return&controllerManager{

scheme:          options.Scheme,

cache:           cache,

client:          writeObj,

...

}

}

 

//Options定义了创建⼀个 Manager对象的参数结构体

typeOptionsstruct{Scheme*runtime.Scheme

...

}

相关文章
|
4天前
|
Kubernetes Cloud Native 云计算
云原生之旅:Kubernetes 集群的搭建与实践
【8月更文挑战第67天】在云原生技术日益成为IT行业焦点的今天,掌握Kubernetes已成为每个软件工程师必备的技能。本文将通过浅显易懂的语言和实际代码示例,引导你从零开始搭建一个Kubernetes集群,并探索其核心概念。无论你是初学者还是希望巩固知识的开发者,这篇文章都将为你打开一扇通往云原生世界的大门。
54 17
|
10天前
|
Kubernetes Cloud Native Docker
云原生时代的容器化实践:Docker与Kubernetes入门
【9月更文挑战第30天】在云计算的浪潮中,云原生技术正以前所未有的速度重塑着软件开发和运维领域。本文将通过深入浅出的方式,带你了解云原生的核心组件——Docker容器和Kubernetes集群,并探索它们如何助力现代应用的构建、部署和管理。从Docker的基本命令到Kubernetes的资源调度,我们将一起开启云原生技术的奇妙之旅。
|
9天前
|
Cloud Native 测试技术 云计算
云原生技术在现代应用开发中的角色与实践
【9月更文挑战第31天】本文深入探讨了云原生技术如何革新现代应用开发流程,通过实际案例分析,揭示了其对提高开发效率、确保系统可扩展性和可靠性的显著影响。文章不仅介绍了云原生的核心概念,还提供了实施策略和最佳实践,旨在为开发者提供一条清晰的云原生转型之路。
|
10天前
|
Cloud Native 持续交付 微服务
云原生时代的微服务架构实践
【9月更文挑战第30天】随着云计算技术的不断进步,云原生已经成为现代软件开发的重要趋势。本文将通过深入浅出的方式,介绍如何在云原生环境下设计并实施微服务架构,以及如何利用容器化技术和自动化工具来提升服务的可维护性和可扩展性。我们将一起探讨微服务架构的核心原则、优势,以及在云平台中部署和管理微服务的最佳实践。无论你是初学者还是有经验的开发者,这篇文章都将成为你探索云原生和微服务世界的一盏明灯。
|
13天前
|
监控 Cloud Native 持续交付
云原生时代的微服务架构设计原则与实践
【9月更文挑战第27天】本文深入探讨了在云原生环境下,如何高效地实施微服务架构。通过分析微服务的基本概念、设计原则和关键技术,结合实际案例,指导读者理解并应用微服务架构于云计算项目之中。文章旨在为软件开发者和架构师提供一条清晰的路径,以实现更加灵活、可扩展且易于维护的系统。
|
17天前
|
设计模式 Cloud Native API
云原生时代的微服务架构实践
【9月更文挑战第23天】在这篇文章中,我们将深入探讨云原生环境下的微服务架构设计原则、优势以及实施策略。文章不仅涉及理论概念,还结合具体的代码示例,帮助读者理解如何在实际项目中应用微服务架构。通过阅读本文,你将获得构建、部署和管理微服务的实用知识,为你的云原生项目奠定坚实的基础。
|
18天前
|
运维 Kubernetes Cloud Native
云原生技术在现代企业中的应用与实践
【9月更文挑战第22天】 在数字化浪潮的推动下,云原生技术已经成为企业IT架构转型的重要方向。本文将深入探讨云原生技术的核心概念、优势以及如何在企业中实施云原生策略。我们将从容器化技术的基本原理出发,逐步引导读者理解服务网格和微服务架构的设计思路,并通过实际案例分析,展示云原生技术如何助力企业实现敏捷开发和高效运维。文章旨在为技术人员提供云原生实践的参考,并启发企业决策者对于云原生转型的深度思考。
|
14天前
|
Cloud Native 持续交付 Docker
云原生技术入门与实践:Docker容器化部署示例
【9月更文挑战第25天】在数字化转型的浪潮下,云原生技术成为推动企业创新的重要力量。本文旨在通过浅显易懂的语言,为初学者揭示云原生技术的核心概念及其应用价值。我们将以Docker容器为例,逐步引导读者了解如何将应用程序容器化,并在云端高效运行。这不仅是对技术趋势的跟随,更是对资源利用和开发效率提升的探索。
41 4
|
17天前
|
Kubernetes Cloud Native 持续交付
云原生技术在现代应用开发中的实践与思考
【9月更文挑战第23天】本文将深入探讨云原生技术如何革新现代应用的开发流程。通过分析云原生的核心概念、优势以及实际应用案例,我们旨在揭示这一新兴技术范式如何助力开发者和企业更高效、灵活地构建和部署应用程序。文章还将提供具体代码示例,展示云原生技术在实际项目中的应用,帮助读者更好地理解和掌握该技术。
|
18天前
|
Cloud Native 持续交付 开发者
云原生技术在现代应用开发中的应用与实践
【9月更文挑战第22天】本文将深入探讨云原生技术如何革新现代应用开发,通过实际案例分析其对提高开发效率、促进持续集成与交付的显著影响。我们将从云原生的基本概念出发,逐步展开到容器化、微服务架构、自动化管理的实践操作,以及这些技术如何协同工作以支持复杂应用的快速迭代和扩展。文章旨在为开发者提供一套云原生技术的实践框架,帮助他们构建更加灵活、可维护的应用系统。