带你读《云原生应用开发 Operator原理与实践》第三章 Kubebuilder 原理3.1 Kubebuilder 介绍与架构(一)

简介: 带你读《云原生应用开发 Operator原理与实践》第三章 Kubebuilder 原理3.1 Kubebuilder 介绍与架构

3.1.1         什么是 Kubebuilder

通过前面章节的介绍,我们了解到 Kubebuilder是一个用 Go语言构建 KubernetesAPIs的框架,通过使用Kubebuilder,用户可以遵循一套简单的编程框架,使用 CRDAPI、ControllersAdmissionWebHooks,实现对 k8s的扩展。

Kubebuilder中 的 主 要 组 件 包 含 Manager、Cache、ClientFinalizers。 其 中,Manager组件主要实现管理外层,负责初始化Controller、Cache、Client的工作;Cache组件负责生成SharedInformer,Watch关注的GVK下的GVR 的变化增、删、改以触发 ControllerReconcile逻辑;Client组件在工作中实现对资源进行 CURD操作,CURD操作封装到 Client 中进行,其中的写操作(增、删、改)直接访问 APIServer,读操作(查)对接的是本地的 Cache;Finalizers组件主要用于处理 Kubernetes资源的预删除逻辑,保障资源被删除后能够从 Cache中读取到,清理相关的其他资源。

3.1.2       Kubebuilder 架构

Kubebuilder 这 种“ 脚手架”工具,将 Kubernetes的可扩展能力 CRD 进 行了简化封装, 那么它是如何实现的呢? 下面来介绍Kubebuilder的架构及实现原理。Kubebuilder架构如3-1所示。

Kubebuil-der 总体上将它涉及的资源所属位置划分为四大块:UserDefined、APIScaffoldsControllerRuntime

Kubernetes集群。                                            

KubebuilderScaffolds是实现这个脚手架最核心的逻辑,它借助 APIScaffolder对象模块,实现了 CRDTemplateController的核心代码块。

CRD的定义和 Controller 两个最核心的内容构建完成后,Userdefined 的模块开始发挥作用,主要是用户根据实际场景,设计 CRD的结构定义,当然这里的 CRD的数量可以有多个;另外,用户需要实现 Reconcile的逻辑,Reconcile 有什么用?为什么要实现它?这是我们即将介绍的ControllerRuntime模块的重点工作。这里,首先了解 Reconcile含义,用户自定义了CRD结构,而在 Kubernetes集群中,想要实现这样的 CRD 结构定义,Reconcile 需要协调逻辑。举例来说,假设用户定义了 MysqlCluster{Name:demo,Num:3} 这样的结构体,而希望在系统中创建MySQL的集群,而构造 MySQL 集群的构造过程,就是 Reconcile过程做的工作。

用户自定义的部分能工作的前提是要有一个 Kubernetes集群,即架构中最下面的部分,它负责安装 CRD及运行 Controller。而如何运行 Controller及其核心逻辑?通过ControllerRuntime库可以实现。

ControllerRuntime模块中,Kubebuilder构建出来的 CRD会注册到 Scheme块,它提供了 Kinds与对应的 GoType的映射,即给定了 GoType,就能够知道它的GKV(GroupKindVerision,这也是Kubernetes所有资源的注册模式。举例来说,我们给定了一个Scheme“demo1.example.org/v1”.Demo{},这个GoType映射到demo1. example.org/v1DemoGVK,从 KubernetesAPIServer获取的部分 JSON内容见代码清单 3-1。

{

"apiVersion":"demo1.example.org/v1","kind":"Demo",

"metadata":{

...


}

 

通过这个 GoType,能够正确地获取 GVR的信息,从而提供给 Controller, 获取期望的状态,即协调的逻辑。而在ControllerRuntimeController最依赖的除了Scheme之外,还包括 Manager 的初始化、安装和启动工作。Manager 的初始化依赖 ControllerRuntime库初始化 Manager对象,包括 Client、Cache 等模块的生成工作。然后 Client就可以实现CRD增、删、改、查,即创建、删除、更新、查询等过程,而查询的逻辑是通过本地的Cache 模块实现的。这里的Cache 负责监听CRD 的变化,它是通过监听Scheme从而收集所有与 Controller有关的GVR 资源,并创建对应的监听器,从而实现当监听到Kubernetes集群中的CRD发生变化触发 Controller的协调进程Reconcile工作。

除此之外,Kuberbuilder工具生成的内容还包括 Finalizer,它用于处理   Kubernetes资源的预删除逻辑,保障资源被删除后能够从 Cache中读取到,清理相关的其他资源;OwnerReference用于清理资源时, 对于任何一个对象, 若它的 OwnerReference字段值为待删除对象,则这个对象也会被清理,支持对象的变更,也会触发 Owner对象的Controller 的协调过程;Index 用于提供资源的缓存,提升客户端资源的查询效率。

 

相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
6月前
|
数据采集 监控 API
移动端性能监控探索:iOS RUM SDK 技术架构与实践
阿里云 RUM SDK 作为一款性能体验监控采集工具,可以作为辅助 App 运维的强有力助手,提升您的问题排查效率。
385 55
|
存储 Cloud Native 数据处理
从嵌入式状态管理到云原生架构:Apache Flink 的演进与下一代增量计算范式
本文整理自阿里云资深技术专家、Apache Flink PMC 成员梅源在 Flink Forward Asia 新加坡 2025上的分享,深入解析 Flink 状态管理系统的发展历程,从核心设计到 Flink 2.0 存算分离架构,并展望未来基于流批一体的通用增量计算方向。
539 0
从嵌入式状态管理到云原生架构:Apache Flink 的演进与下一代增量计算范式
|
6月前
|
存储 运维 分布式计算
零售数据湖的进化之路:滔搏从Lambda架构到阿里云Flink+Paimon统一架构的实战实践
在数字化浪潮席卷全球的今天,传统零售企业面临着前所未有的技术挑战和转型压力。本文整理自 Flink Forward Asia 2025 城市巡回上海站,滔搏技术负责人分享了滔搏从传统 Lambda 架构向阿里云实时计算 Flink 版+Paimon 统一架构转型的完整实战历程。这不仅是一次技术架构的重大升级,更是中国零售企业拥抱实时数据湖仓一体化的典型案例。
443 0
|
8月前
|
运维 监控 Cloud Native
从本土到全球,云原生架构护航灵犀互娱游戏出海
本文内容整理自「 2025 中企出海大会·游戏与互娱出海分论坛」,灵犀互娱基础架构负责人朱晓靖的演讲内容,从技术层面分享云原生架构护航灵犀互娱游戏出海经验。
690 15
|
7月前
|
数据采集 运维 数据可视化
AR 运维系统与 MES、EMA、IoT 系统的融合架构与实践
AR运维系统融合IoT、EMA、MES数据,构建“感知-分析-决策-执行”闭环。通过AR终端实现设备数据可视化,实时呈现温度、工单等信息,提升运维效率与生产可靠性。(238字)
|
7月前
|
数据采集 存储 运维
MyEMS:技术架构深度剖析与用户实践支持体系
MyEMS 是一款开源能源管理系统,采用分层架构设计,涵盖数据采集、传输、处理与应用全流程,支持多协议设备接入与多样化能源场景。系统具备高扩展性与易用性,结合完善的文档、社区、培训与定制服务,助力不同技术背景用户高效实现能源数字化管理,降低使用门槛与运维成本,广泛适用于工业、商业及公共机构等场景。
303 0
|
6月前
|
存储 SQL 消息中间件
从 ClickHouse 到 StarRocks 存算分离: 携程 UBT 架构升级实践
查询性能实现从秒级到毫秒级的跨越式提升
|
6月前
|
Cloud Native Serverless API
微服务架构实战指南:从单体应用到云原生的蜕变之路
🌟蒋星熠Jaxonic,代码为舟的星际旅人。深耕微服务架构,擅以DDD拆分服务、构建高可用通信与治理体系。分享从单体到云原生的实战经验,探索技术演进的无限可能。
微服务架构实战指南:从单体应用到云原生的蜕变之路
|
6月前
|
Java Linux 虚拟化
【Docker】(1)Docker的概述与架构,手把手带你安装Docker,云原生路上不可缺少的一门技术!
1. Docker简介 1.1 Docker是什么 为什么docker会出现? 假定您在开发一款平台项目,您的开发环境具有特定的配置。其他开发人员身处的环境配置也各有不同。 您正在开发的应用依赖于您当前的配置且还要依赖于某些配置文件。 您的企业还拥有标准化的测试和生产环境,且具有自身的配置和一系列支持文件。 **要求:**希望尽可能多在本地模拟这些环境而不产生重新创建服务器环境的开销 问题: 要如何确保应用能够在这些环境中运行和通过质量检测? 在部署过程中不出现令人头疼的版本、配置问题 无需重新编写代码和进行故障修复
536 2

热门文章

最新文章