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

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
简介: 带你读《云原生应用开发 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 用于提供资源的缓存,提升客户端资源的查询效率。

 

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
6天前
|
API 持续交付 开发者
后端开发中的微服务架构实践与挑战
在数字化时代,后端服务的构建和管理变得日益复杂。本文将深入探讨微服务架构在后端开发中的应用,分析其在提高系统可扩展性、灵活性和可维护性方面的优势,同时讨论实施微服务时面临的挑战,如服务拆分、数据一致性和部署复杂性等。通过实际案例分析,本文旨在为开发者提供微服务架构的实用见解和解决策略。
|
7天前
|
弹性计算 Kubernetes Cloud Native
云原生架构下的微服务设计原则与实践####
本文深入探讨了在云原生环境中,微服务架构的设计原则、关键技术及实践案例。通过剖析传统单体架构面临的挑战,引出微服务作为解决方案的优势,并详细阐述了微服务设计的几大核心原则:单一职责、独立部署、弹性伸缩和服务自治。文章还介绍了容器化技术、Kubernetes等云原生工具如何助力微服务的高效实施,并通过一个实际项目案例,展示了从服务拆分到持续集成/持续部署(CI/CD)流程的完整实现路径,为读者提供了宝贵的实践经验和启发。 ####
|
2天前
|
消息中间件 设计模式 运维
后端开发中的微服务架构实践与挑战####
本文深入探讨了微服务架构在现代后端开发中的应用,通过实际案例分析,揭示了其在提升系统灵活性、可扩展性及促进技术创新方面的显著优势。同时,文章也未回避微服务实施过程中面临的挑战,如服务间通信复杂性、数据一致性保障及部署运维难度增加等问题,并基于实践经验提出了一系列应对策略,为开发者在构建高效、稳定的微服务平台时提供有价值的参考。 ####
|
2天前
|
运维 Kubernetes Cloud Native
Kubernetes云原生架构深度解析与实践指南####
本文深入探讨了Kubernetes作为领先的云原生应用编排平台,其设计理念、核心组件及高级特性。通过剖析Kubernetes的工作原理,结合具体案例分析,为读者呈现如何在实际项目中高效部署、管理和扩展容器化应用的策略与技巧。文章还涵盖了服务发现、负载均衡、配置管理、自动化伸缩等关键议题,旨在帮助开发者和运维人员掌握利用Kubernetes构建健壮、可伸缩的云原生生态系统的能力。 ####
|
2天前
|
消息中间件 监控 数据管理
后端开发中的微服务架构实践与挑战####
【10月更文挑战第29天】 在当今快速发展的软件开发领域,微服务架构已成为构建高效、可扩展和易于维护应用程序的首选方案。本文探讨了微服务架构的核心概念、实施策略以及面临的主要挑战,旨在为开发者提供一份实用的指南,帮助他们在项目中成功应用微服务架构。通过具体案例分析,我们将深入了解如何克服服务划分、数据管理、通信机制等关键问题,以实现系统的高可用性和高性能。 --- ###
21 2
|
4天前
|
监控 安全 应用服务中间件
微服务架构下的API网关设计策略与实践####
本文深入探讨了在微服务架构下,API网关作为系统统一入口点的设计策略、实现细节及其在实际应用中的最佳实践。不同于传统的摘要概述,本部分将直接以一段精简的代码示例作为引子,展示一个基于NGINX的简单API网关配置片段,随后引出文章的核心内容,旨在通过具体实例激发读者兴趣,快速理解API网关在微服务架构中的关键作用及实现方式。 ```nginx server { listen 80; server_name api.example.com; location / { proxy_pass http://backend_service:5000;
|
8天前
|
Kubernetes 负载均衡 Cloud Native
云原生应用:Kubernetes在容器编排中的实践与挑战
【10月更文挑战第27天】Kubernetes(简称K8s)是云原生应用的核心容器编排平台,提供自动化、扩展和管理容器化应用的能力。本文介绍Kubernetes的基本概念、安装配置、核心组件(如Pod和Deployment)、服务发现与负载均衡、网络配置及安全性挑战,帮助读者理解和实践Kubernetes在容器编排中的应用。
32 4
|
8天前
|
Kubernetes Cloud Native API
云原生架构下微服务治理的深度探索与实践####
本文旨在深入剖析云原生环境下微服务治理的核心要素与最佳实践,通过实际案例分析,揭示高效、稳定的微服务架构设计原则及实施策略。在快速迭代的云计算领域,微服务架构以其高度解耦、灵活扩展的特性成为众多企业的首选。然而,伴随而来的服务间通信、故障隔离、配置管理等挑战亦不容忽视。本研究聚焦于云原生技术栈如何赋能微服务治理,涵盖容器编排(如Kubernetes)、服务网格(如Istio/Envoy)、API网关、分布式追踪系统等关键技术组件的应用与优化,为读者提供一套系统性的解决方案框架,助力企业在云端构建更加健壮、可维护的服务生态。 ####
|
2天前
|
Cloud Native API 云计算
云原生架构的深度探索与实践####
本文深入探讨了云原生架构的核心概念、技术特点及其在现代软件开发中的应用实践。通过分析云原生架构如何促进企业数字化转型,提升业务敏捷性与可扩展性,本文旨在为读者提供一个全面而深入的理解框架。我们将从云原生的定义出发,逐步深入到其关键技术组件、最佳实践案例及面临的挑战与解决方案,为开发者和企业决策者提供宝贵的参考与启示。 ####
|
2天前
|
Cloud Native 持续交付 云计算
云原生时代的技术革新与实践探索
【10月更文挑战第33天】在云计算的浪潮下,云原生技术如雨后春笋般涌现。本文将深入浅出地介绍云原生的基本概念、优势及其在现代IT架构中的应用,并探讨如何通过云原生技术推动企业的数字化转型,最后通过实际案例分析,展示云原生技术的强大潜力和广阔前景。