带你读《云原生应用开发 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将被关闭。

相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
1月前
|
Cloud Native 数据处理 云计算
探索云原生技术在大数据分析中的应用
随着云计算技术的不断发展,云原生架构作为一种全新的软件开发和部署模式,正逐渐引起企业的广泛关注。本文将探讨云原生技术在大数据分析领域的应用,介绍其优势与挑战,并探讨如何利用云原生技术提升大数据分析的效率和可靠性。
|
1月前
|
缓存 Java API
【云原生】Spring Cloud Gateway的底层原理与实践方法探究
【云原生】Spring Cloud Gateway的底层原理与实践方法探究
|
1月前
|
Kubernetes Cloud Native 开发工具
带你读《云原生应用开发:Operator原理与实践》精品文章合集
带你读《云原生应用开发:Operator原理与实践》精品文章合集
|
2月前
|
人工智能 缓存 Kubernetes
.NET 9 首个预览版发布:瞄准云原生和智能应用开发
.NET 9 首个预览版发布:瞄准云原生和智能应用开发
|
28天前
|
Java fastjson 数据安全/隐私保护
【Dubbo3技术专题】「云原生微服务开发实战」 一同探索和分析研究RPC服务的底层原理和实现
【Dubbo3技术专题】「云原生微服务开发实战」 一同探索和分析研究RPC服务的底层原理和实现
39 0
|
1月前
|
运维 Cloud Native 持续交付
云原生技术的未来展望:如何塑造下一代应用开发
【2月更文挑战第30天】 随着云计算的不断发展,云原生技术已经成为推动现代应用开发的重要力量。本文将深入探讨云原生技术的核心概念,分析其在提高开发效率、降低运维成本以及支持复杂业务场景中的作用。同时,文章还将预测云原生技术的发展趋势,并讨论如何在不断变化的技术环境中保持应用的敏捷性和可靠性。
|
1月前
|
消息中间件 存储 Cloud Native
【Spring云原生系列】Spring RabbitMQ:异步处理机制的基础--消息队列 原理讲解+使用教程
【Spring云原生系列】Spring RabbitMQ:异步处理机制的基础--消息队列 原理讲解+使用教程
|
3月前
|
存储 缓存 Cloud Native
云原生系列Go语言篇-模块、包和导入 Part 2
我们已经学习了如何在单个模块中使用包,接下来该学习如何集成第三方模块及其中的包。然后,我们会学习如何发布自己模块并添加版本,以及Go的中央服务:pkg.go.dev、模块代理和校验和(checksum)数据库。
51 5
|
1月前
|
人工智能 监控 Cloud Native
iLogtail 2.0 来了;通义灵码下载量破百万丨阿里云云原生 2 月产品月报
iLogtail 2.0 来了;通义灵码下载量破百万丨阿里云云原生 2 月产品月报
|
2月前
阿里云云原生恭祝大家新年快乐!
阿里云云原生恭祝大家新年快乐!

热门文章

最新文章