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

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

3.3.1         Controller-runtime框架

Controller-runtime是社区提供的用于开发 Controller的框架,包含了各种已封装的代码库。KubebuilderOperatorSDK都是基于Controller-runtime框架来工作的, 使Controller-runtime, 开发者可以方便地开发各种 Controller、CRD、AdmissionWebHook等,如图 3-2所示。


 

 

                                                 image.png

 

3—2Controiier—runtme框架

 

1. 主要模块

 

Controller-runtimeController 的开发提供了各种功能模块,每个模块中包括了一个或多个实现,通过这些模块,开发者可以灵活地构建自己的 Controller,主要包括以下内容。

(1)  Client:用于读写 Kubernetes 资源对象的客户端。

(2)  Cache:本地缓存,用于保存需要监听的 Kubernetes资源。缓存提供了只读客户端,用于从缓存中读取对象。缓存还可以注册处理方法(EventHandler,以响应更新的事件。

(3)   Manager:用于控制多个 Controller,提供 Controller共用的依赖项,如 ClientCache、Schemes等。通过调用 Manager.Start方法,可以启动Controller。

(4)  Controller:控制器,响应事件(Kubernetes资源对象的创建、更新、删除并确保对象规范(Spec字段)中指定的状态与系统状态匹配,如果不匹配,则控制器需要根据事件的对象,通过协调器(Reconciler)进行同步。在实现上,Controller是用于处reconcile.Requests 的工作队列,reconcile.Requests 包含了需要匹配状态的资源对象。

    ① Controller需要提供Reconciler 来处理从工作队列中获取的请求。

Controller 需要配置相应的资源监听,根据监听到的 Event 生成 reconcile.Requests并加入队列。

(5)   Reconciler:为 Controller提供同步的功能,Controller 可以随时通过资源对象的NameNamespace 来调用 Reconciler,调用时,Reconciler 将确保系统状态与资源对象所表示的状态相匹配。例如,当某个 ReplicaSet 的副本数为 5,但系统中只有 3Pod 时,同步 ReplicaSet 资源的 Reconciler 需要新建两个 Pod,并将它们的 OwnerReference字段指向对应的 ReplicaSet。

    ① Reconciler包含了 Controller 所有的业务逻辑。

Reconciler通常只处理单个对象类型,例如只处理ReplicaSetsReconciler,不处理其他的对象类型。如果需要处理多种对象类型,需要实现多个 Controller。如果你希望通过其他类型来触发Reconciler,例如,通过 Pod对象的事件来触发 ReplicaSetRecon-ciler,则可以提供一个映射,通过该映射将触发 Reconciler的类型映射到需要匹配的类型。

    ③ 提供给 Reconciler的参数是需要匹配的资源对象的 NameNamespace。

Reconciler 不关心触发它的事件的内容和类型。例如,对于同步 ReplicaSet资源的Reconciler来说,触发它的是 ReplicaSet 的创建还是更新并不重要,Reconciler总是会比较系统中相应的 Pod数量和 ReplicaSet中指定的副本数量。

(6)  WebHook:准入 WebHook(AdmissionWebHook)是扩展 KubernetesAPI的一种机制,WebHook   可以根据事件类型进行配置,比如资源对象的创建、删除、更改等事件, 当配置的事件发生时,KubernetesAPIServer会向 WebHook发送准入请

(AdmissionRequests,WebHook可以对请求中的资源对象进行更改或准入验证,然后将处理结果响应给 APIServer。准入 WebHook分两种类型:变更(Mutating)准入和验证准入。变更准入用于在 APIServer进行准入验证前,更改请求中的 CRD或核心 API资源。证准入用于验证请求中的对象是否满足某些要求。

准入 WebHook要求提供处理方法(Handler)来处理接收到的AdmissionRequests。


 

(7)   Source:resource.SourceController.Watch 的参数,提供事件,事件通常是来KubernetesAPIServerPod创建、更新和删除。例如,source.Kind使用指定对象通过 GroupVersionKind指定KubernetesAPIWatch 接口来提供此对象的创建、更新、删除事件。

Source通过 WatchAPI提供 Kubernetes 指定对象的事件流。

② 建议开发者使用 Controller-runtime中已有的Source实现,而不是自己实现此接口。

(8)  EventHandler:handler.EventHandlerController.Watch的参数, 用于将事件对应的 reconcile.Requests加入队列。例如, 从 Source中接收到一个 Pod的创建事件,eventhandler.EnqueueHandler会根据 PodNameNamespace生成reconcile.Requests后,加入队列。

EventHandlers 处理事件的方式是将一个或多个 reconcile.Requests 加入队列。

② 在 EventHandler的处理中,事件所属的对象的类型比如 Pod的创建事件属于Pod对象,可能与reconcile.Requests所加入的对象类型相同。

③ 事件所属的对象的类型也可能与 reconcile.Requests 所加入的对象类型不同。例如Pod的事件映射为所属的ReplicaSetreconcile.Requests。

EventHandler可能会将一个事件映射为多个reconcile.Requests 并加入队列,多个reconcile.Requests 可能属于一个对象类型,也可能涉及多个对象类型。例如,由于集群扩展导致的 Node事件。

⑤ 在大多数情况下,建议开发者使用 Controller-runtime中已有的 EventHandler实现,而不是自己实现此接口。

(9)  Predicate:predicate.PredicateController.Watch的参数,是用于过滤事件的过滤器,过滤器可以复用或者组合。

Predicate接口以事件作为输入,以布尔值作为输出,当返回True时,表示需要将事件加入队列。

Predicate 是可选的。

③ 建议开发者使用 Controller-runtime中已有的Predicate实现,但可以使用其他Predicate进行过滤。

相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
12天前
|
监控 Cloud Native 开发者
云原生技术浪潮下的微服务架构实践
云原生技术正引领着现代软件开发的潮流,其中微服务架构作为其核心理念之一,为复杂应用提供了灵活、可扩展的解决方案。本文将探讨在云原生环境下实施微服务架构的策略和挑战,并结合实际案例分析微服务设计的最佳实践,旨在为开发者提供一套可行的微服务部署与管理指南。
|
25天前
|
机器学习/深度学习 算法 Cloud Native
利用机器学习进行情感分析:从理论到实践云原生技术在现代软件开发中的应用与挑战
【5月更文挑战第31天】本文旨在深入探讨机器学习在情感分析领域的应用。首先,我们将解释什么是情感分析以及为什么它在今天的世界中如此重要。然后,我们将详细介绍几种主要的机器学习算法,包括决策树、随机森林和神经网络,以及它们如何被用于情感分析。最后,我们将通过一个实际的案例研究来展示这些理论在实践中的应用。
|
1天前
|
人工智能 Cloud Native Java
从云原生视角看 AI 原生应用架构的实践
本文核心观点: • 基于大模型的 AI 原生应用将越来越多,容器和微服务为代表的云原生技术将加速渗透传统业务。 • API 是 AI 原生应用的一等公民,并引入了更多流量,催生企业新的生命力和想象空间。 • AI 原生应用对网关的需求超越了传统的路由和负载均衡功能,承载了更大的 AI 工程化使命。 • AI Infra 的一致性架构至关重要,API 网关、消息队列、可观测是 AI Infra 的重要组成。
|
1天前
|
Kubernetes 监控 Cloud Native
云原生架构下的微服务治理实践
【6月更文挑战第23天】在云计算的浪潮中,云原生架构以其弹性、可扩展性和高效性成为企业数字化转型的重要推手。本文将深入探讨如何利用云原生技术实现微服务的治理与优化,确保系统的稳定性和高可用性。我们将从微服务的基本概念出发,通过具体案例分析,揭示云原生环境下微服务治理的关键策略,并分享实践经验,旨在为读者提供一套完整的微服务治理解决方案。
|
6天前
|
存储 运维 监控
云原生架构下的微服务治理实践
【6月更文挑战第19天】在数字化转型的浪潮中,云原生技术以其灵活、可扩展的特性成为企业IT架构升级的首选。本文深入探讨了在云原生架构下,如何有效实施微服务治理,包括服务发现、配置管理、服务监控和故障处理等方面的最佳实践。文章旨在为读者提供一套全面的微服务治理框架,帮助团队构建更加稳定、高效的分布式系统。
9 2
|
5天前
|
运维 Cloud Native 持续交付
云原生技术:现代应用开发的革命性变革
云原生技术正在重新定义软件开发和部署的方式。通过采用容器、微服务、持续集成与持续交付(CI/CD)等关键技术,企业可以显著提升开发效率、缩短上市时间,并提高应用的可扩展性和可靠性。本文深入探讨了云原生技术的核心组件及其带来的实际业务价值,展示了其在现代应用开发中的革命性影响。
10 1
|
6天前
|
监控 Cloud Native 安全
云原生架构下的微服务治理实践
【6月更文挑战第18天】本文深入探讨了在云原生架构背景下,微服务治理的实践方法与技术选型。文章首先介绍了云原生的基本概念和微服务治理的重要性,随后详细阐述了服务发现、配置管理、弹性设计等关键技术的实施细节,并结合实际案例分析如何构建高效、稳定的微服务系统。最后,文章讨论了微服务治理面临的挑战及未来发展趋势。
|
8天前
|
运维 Cloud Native 云计算
云原生架构的演变与实践
在数字化浪潮不断推进的今天,企业对于IT基础设施的要求日益增高,云原生技术因此成为推动现代软件开发的关键力量。本文将深入探讨云原生架构的概念、核心价值及其在实际业务中的应用,同时分析面临的挑战和未来的发展趋势,为读者呈现一幅云原生技术演进的全景图。
|
14天前
|
监控 Cloud Native 持续交付
云原生架构:从理念到实践的全面解析
云原生架构已经成为现代软件开发和部署的核心理念。它不仅改变了传统的软件开发模式,还为企业提供了更高的灵活性、可扩展性和可靠性。本篇文章将深入探讨云原生架构的基本概念、关键组件以及实际应用案例,帮助读者更好地理解和应用这一先进的技术框架。
81 3
|
1天前
|
Kubernetes Cloud Native Devops
云原生架构:现代应用开发的未来之路
在当今快速发展的技术环境中,云原生架构正成为企业构建和部署现代应用的首选方式。本文探讨了云原生的基本概念、优势以及在实际应用中的关键组件和最佳实践,为企业如何利用云原生实现更高效、更灵活的应用开发提供了深入分析。

热门文章

最新文章