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

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

3.3.2      Manager

ManagerController-runtime库中最主要的结构,可以用来启动Controller、管理Controller依赖、提供集群相关资源的获取方式等。

1. 接口

 

pkg/manager/manager.go中,定义了 Manager接口,部分开发者常用的方法如下。


 

(1)      cluster.Cluster:接 口类型,Manager的匿名成员,Manager继承了 cluster.

Cluster 的所有方法。cluster.Cluster 提供了一系列方法,以获取与集群相关的对象。开发者可以通过以下几种方式访问 Kubernete集群中的资源。

① 通过 Manager.GetClient() 可以获取client.Client,从而对 Kubernetes资源进行读写,这也是推荐的方式。在读操作上,client.Client直接查询 Cache中的资源,Cache基于List-Watch机制缓存了Kube-APIServer中的部分资源。在写操作上,client. Client 会向 Kube-APIServer 发送请求。

② 通 过 Manager.GetAPIReader()获 取 client.Reader,client.Reader 只 用 于 查 询Kubernetes资源,但不再使用Cache,而是直接向Kube-APIServer发送请求,效率相对 client.Client 较低。

另外,还可以通过cluster.Cluster获取集群的常用数据。

① 通过 Manager.GetConfig() 获取Kube-APIServerrest.Config配置,可用于 k8s.io/client-goClientSet的创建。

② 通过 Manager.GetScheme() 获取 Kubernetes 集群资源的 Scheme,可以用于注册 CRD

③ 通 过 Manager.GetEventRecorderFor() 获 取 EventRecorder, 可 以 用 于 创 建Kubernetesevent到集群中。

④ 通过 Manager.GetRESTMapper()获取 RESTMapper,存储了 Kube-APIServer中资源 ResourceKind的对应关系, 可以将 GroupVersionResource转换为对应的GroupVersionKind。

⑤ 通过Manager.GetCache() 获取 Cache。

cluster.Cluster还提供了 SetFields()接口,用于“注入”Controller的依赖。此接口在创建Controller时作为函数对象保存在 Controller中,在 Controller启动前调用。

(2)      Manager.Start()方法会启动所有注册到 Manager中的 Controller。当开启了Manager的选举功能时,Manager会在启动前尝试获取 Leader,只有当选 Leader成功,Manager才会启动注册的 Controller。

除了 Controller外,开发者可以通过 Manager.Add(Runnable)方法注册自定义的对象,例如,注册一个HTTPServer,只需要自定义的对象实现Runnable接口的Start(context.Context)error()方法即可。一般在通过pkg/builder下的 Builder创建Controller对象时,Builder会自动调用 Manager.Add(Runnable)方法将 Controller对象注册到 Manager中。

与Controller相同,在调用 Manager.Start() 后,Manager会调用自定义对象的Start(context.Context)error() 方法, 用来启动自定义对象。当自定义对象同时实现了LeaderElectionRunnable接口的   NeedLeaderElection()   方法时,Manager   会在启动前判断此自定义对象是否需要遵循选举机制来启动,在默认情况下,对于未实现此接口    的自定义对象,其效果与实现了此接口且返回为 True时一样。

(3)     Controller-runtime还提供了 KubernetesAdmissionWebHook机制实现的框架,通过 Manager.GetWebHookServer() 方法,可以获取一个空的WebHook.Server对象,开发者只需要调用WebHook.ServerRegister() 方法,将处理逻辑注册到服务中即可。与Controller一样,WebHook.Server也会自动注册到 Manager中,并由 Manager负责启动。

(4)      Manager.AddReadyzCheck() 方法与 Manager.AddHealthzCheck() 方法用于添加自定义的健康检查逻辑,对应于 KuberneteReadyz探针和 Healthz探针,Manager据添加的自定义检查逻辑以HTTP的方式在指定端口反馈检查结果。

(5)    Manager.AddMetricsExtraHandler() 方法用于自定义 Manager的监控项,Contr -oller-runtime中默认定义了部分 Prometheus的监控项,涉及 Manager、Controller、Cache等,另外,开发者也可以通过此方法将自定义的服务监控注册到HTTPServer的指定路径上,对于更加复杂的自定义服务监控功能,可以将其实现为 Runnable接口,注册到 Manager中。

(6)      Manager.Elected()方法可以返回一个 Channel 结构,用于判断选举状态。当未配置选举或当选 Leader,Channel将被关闭。

相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
7月前
|
存储 缓存 分布式计算
StarRocks x Iceberg:云原生湖仓分析技术揭秘与最佳实践
本文将深入探讨基于 StarRocks 和 Iceberg 构建的云原生湖仓分析技术,详细解析两者结合如何实现高效的查询性能优化。内容涵盖 StarRocks Lakehouse 架构、与 Iceberg 的性能协同、最佳实践应用以及未来的发展规划,为您提供全面的技术解读。 作者:杨关锁,北京镜舟科技研发工程师
StarRocks x Iceberg:云原生湖仓分析技术揭秘与最佳实践
|
Kubernetes 监控 Cloud Native
云原生时代下的应用开发与部署实践
【10月更文挑战第4天】在云原生的浪潮中,开发者和运维人员面临着新的挑战和机遇。本文将通过实际案例,展示如何在云平台上高效地开发、部署和管理应用,同时确保系统的可扩展性和高可用性。我们将深入探讨容器化技术、微服务架构以及持续集成/持续部署(CI/CD)流程的实施策略,旨在为读者提供一套完整的云原生解决方案框架。
|
Kubernetes Cloud Native 持续交付
云原生技术在现代应用开发中的角色与实践
【9月更文挑战第9天】 随着云计算技术的飞速发展,云原生(Cloud Native)已经成为推动企业数字化转型的核心力量。本文将深入探讨云原生的基本概念、关键技术及其在实际开发中的应用案例,旨在为读者提供一条清晰的云原生技术学习路径和应用指南。通过实例分析,我们将揭示云原生如何优化资源管理、提升应用性能及加快部署速度,进而帮助企业构建更加灵活、可靠和高效的软件系统。
|
Kubernetes Cloud Native 持续交付
云原生技术在现代应用开发中的实践与思考
【10月更文挑战第35天】云原生技术,作为云计算的进阶形态,正引领着软件开发和运维的新潮流。本文将深入探讨云原生技术的核心理念、关键技术组件以及在实际项目中的应用案例,帮助读者理解如何利用云原生技术优化应用架构,提高开发效率和系统稳定性。我们将从容器化、微服务、持续集成/持续部署(CI/CD)等角度出发,结合实际代码示例,展现云原生技术的强大能力。
|
监控 Cloud Native 持续交付
云原生技术深度解析:重塑现代应用开发与部署范式####
本文深入探讨了云原生技术的核心概念、关键技术组件及其在现代软件开发中的重要性。通过剖析容器化、微服务架构、持续集成/持续部署(CI/CD)等关键技术,本文旨在揭示云原生技术如何促进应用的敏捷性、可扩展性和高可用性,进而推动企业数字化转型进程。不同于传统摘要仅概述内容要点,本部分将融入具体案例分析,直观展示云原生技术在实际应用中的显著成效与挑战应对策略,为读者提供更加丰富、立体的理解视角。 ####
|
人工智能 Serverless API
云原生应用开发平台CAP:一站式应用开发及生命周期管理解决方案
阿里云的云应用开发平台CAP(Cloud Application Platform)是一款一站式应用开发及应用生命周期管理平台。它提供丰富的Serverless与AI应用模板、高效的开发者工具链及企业级应用管理功能,帮助开发者快速构建、部署和管理云上应用,大幅提升研发、部署和运维效能。
944 4
|
Kubernetes Cloud Native 持续交付
云原生技术:重塑现代应用开发与部署模式####
本文深入探讨了云原生技术的核心概念、发展历程及其在现代软件开发和部署中的关键作用。通过分析云原生架构的特点,如容器化、微服务、持续集成与持续部署(CI/CD),以及它如何促进应用的可伸缩性、灵活性和效率,本文旨在为读者提供一个关于云原生技术全面而深入的理解。此外,还将探讨实施云原生策略时面临的挑战及应对策略,帮助组织更好地把握数字化转型的机遇。 ####
|
Kubernetes Cloud Native 持续交付
云原生技术在现代应用开发中的实践与展望
【10月更文挑战第7天】随着技术的不断演进,云计算已从简单的资源租用模式转变为支持复杂、高效、灵活的云原生应用架构。本文将深入探讨云原生技术的核心概念及其在现代应用开发中的应用,通过分析Kubernetes容器编排和微服务架构的实践案例,揭示云原生技术如何推动软件开发的现代化进程。文章旨在为开发者和架构师提供一套实用的云原生应用开发指南,同时展望未来云原生技术的发展方向。
110 8
|
Cloud Native 测试技术 云计算
云原生技术在现代应用开发中的角色与实践
【9月更文挑战第31天】本文深入探讨了云原生技术如何革新现代应用开发流程,通过实际案例分析,揭示了其对提高开发效率、确保系统可扩展性和可靠性的显著影响。文章不仅介绍了云原生的核心概念,还提供了实施策略和最佳实践,旨在为开发者提供一条清晰的云原生转型之路。
|
Kubernetes Cloud Native 持续交付
云原生技术在现代应用开发中的实践与思考
【9月更文挑战第23天】本文将深入探讨云原生技术如何革新现代应用的开发流程。通过分析云原生的核心概念、优势以及实际应用案例,我们旨在揭示这一新兴技术范式如何助力开发者和企业更高效、灵活地构建和部署应用程序。文章还将提供具体代码示例,展示云原生技术在实际项目中的应用,帮助读者更好地理解和掌握该技术。

热门文章

最新文章