Kubebuilder简介与架构
什么是Kubebuilder
Kubebuilder是一个用Go原因构建Kubernetes APIs的框架,通过使用KubeBuilder,用户可以遵循一套简单的编程框架,使用CRD构建API、Controllers和Admission WebHooks,实现对k8s的扩展。
Kubebuilder中的主要组件包含Manager、Cache、Client与Finalizers。其中,Manager组件主要实现管理外层,负责初始化Controller、Cache、Client的工作,Cache组件负责生成ShareInformer,Watch关注的GVK下的GVR的变化(增、删、改),以触发Controller的Reconcile逻辑;Client组件在工作中实现对资源进行CURD操作,CURD操作封装到Client中进行,其中的写操作(增、删、改)直接访问APIServer,读操作(查)对接的是本地的Cache;Finzlizers组件主要用于处理Kubernetes资源的预删除逻辑,保障资源被删除后能够从Cache中读取到,清理相关的其它资源。
Kubebuilder架构
Kubebuilder这种脚手架中间,将Kubernetes的可扩展能力CRD进行了简化封装,如下图所示,kubebuilder总体上将它设计的资源所属位置划分为四大块:User Defined、API Scaffolds、Controller Runtime、Kubernetes集群。

Kubebuilder Scaffolds是实现这个脚手架最核心的逻辑,它借助APIScaffolder对象模块,实现了CRD的Template和Controller的核心代码块。
在Controller Rumetime模块中,Kubebuilder构建出来的CRD会注册到Scheme模块,它提供了Kinds与对应的Go Type的映射,即给定了Go Type,就能够知道它的GKV(Group Kind Version),这也是Kubernetes所有资源的注册模块。举例来说,我们给定了一个Scheme, “demo1.example.org/v1” .Demo{}, 这个Go Type映射到demo1.example.org/v1的Demo GVk,从kubernetes的APIServer获取的部分JSON内容如下
{
"apiVersion": "demo1.example.org/v1",
"kind": "Demo",
"metadata": {
}
}
通过这个Go Type,能够正确地获取Group Kind Version的信息,从而提供给Controller,获取期望的状态,即协调的逻辑。而在Controller Runtime中Controller最依赖的除了Scheme之外,还包括Manager的初始化、安装和启动工作。Manager的初始化依赖Controller Runtime库初始化Manager对象,包括Client、Cache等模块的生成工作。然后Client就可以实现对CRD的创建、删除、更新、查询等过程,而查询的逻辑是通过本地的Cache模块实现的。这里的Cache负责监听CRD的变化,它是通过监听Scheme,从而收集所有与Controller有关的Group Kind Version资源,并创建对应的监听器,从而实现当监听到Kubernetes集群中的CRD发生变化触发Controller的协调进程Reconcile工作。
初次之外,Kubebuilder工具生成的内容还包括Finalizer,它用于处理kubernetes资源的预删除逻辑,保障资源被删除后能够从Cache中读取到,清理相关的其它资源,OwnerReference用于清理资源时,对于任何一个资源,若它的OwnerReference字段值为待删除对象,则这个对象也会被清理,支持对象的变更,也会触发Owner对象的Controller对的协调过程;Index用于提供资源的缓存,提升客户端资源的查询效率。
Kubebuilder简介与架构的更多相关文章
- FastDFS简介和架构图(内容来自于阅读fastdfs官方文档的总结)
一.FastDFS简介 1. FastDFS是一个轻量级的开源分布式文件系统 2. FastDFS主要解决了大容量的文件存储和高并发访问的问题,文件存取时实现了负载均衡 3. FastDFS实现了软件 ...
- SpringCloud系列一:SpringCloud的简介和架构
一.SpringCloud简介 SpringCloud就是一套分布式服务治理的框架,既然它是一套服务治理的框架,那么它本身不会提供具体功能性的操作,更专注于服务之间的通讯.熔断.监控等.因此就需要很多 ...
- OpenVPN简介及架构详解
OpenVPN简介 1 简介 VPN(Virtual Private Network)直译就是虚拟专用通道,是提供给企业之间或者个人与公司之间安全数据传输的隧道. OpenVPN无疑是Linux ...
- Kafka(一)Kafka的简介与架构
一.简介 1.1 概述 Kafka是最初由Linkedin公司开发,是一个分布式.分区的.多副本的.多订阅者,基于zookeeper协调的分布式日志系统(也可以当做MQ系统),常见可以用于web/ng ...
- nginx 练习(将游戏图片部署到NFS+LNMP架构简介+uwsgi架构简介)
nginx(将游戏图片部署到NFS) 练习 一.首先去NFS这里创建挂载点 1.先在NFS的opt下面创建文件夹存放图片 [root@linux opt]# mkdir /opt/img 2.然后将此 ...
- Java异常(一) Java异常简介及其架构
概要 本章对Java中的异常进行介绍.内容包括:Java异常简介Java异常框架 转载请注明出处:http://www.cnblogs.com/skywang12345/p/3544168.html ...
- (一)Shiro笔记——简介、 架构分析
1. Shiro是什么 Apache Shiro是一个强大灵活的开源安全框架,可以完全处理身份验证,授权,企业会话管理和加密. Apache Shiro的首要目标是易于使用和理解. 安全有时可能非常复 ...
- Android Sensor详解(1)简介与架构【转】
本文转载自:https://blog.csdn.net/u013983194/article/details/53244686 最近在学习有关如何porting sensor的东西,仅借此机会写博客来 ...
- Hadoop简介及架构
狭义上来说,hadoop就是单独指代hadoop这个软件, 广义上来说,hadoop指代大数据的一个生态圈,包括很多其他的软件 2.hadoop的历史版本介绍 0.x系列版本:hadoop当中最早的一 ...
随机推荐
- STL空间分配器源码分析(三)pool_allocator
一.摘要 pool_allocator是一种基于单锁内存池的空间分配器,其内部采用内存池思想,通过构建16个空闲内存块队列,来进行内存的申请和回收处理.每个空闲队列管理的内存块大小固定,且均为8的倍数 ...
- Java学习day17
继续学习了IO流的一些常用类以及GUI基础 做了自己的第一个Frame窗口 在做第一个Frame窗口时程序报错:java: 无法从静态上下文中引用非静态 变量 this 查看后发现不小心把MyFram ...
- el-tree小知识点
<el-tree ref="tree" :props="props" :data="initData" node-key=" ...
- Vue+element搭建后台管理系统-二、安装插件
我们继续上一章的内容,上一章讲到我们已经能将项目成功跑起来了,那么我们接下来把项目必用的东西完善一下. 一.安装elementUI 终于到了我们的男二了,继续在VSCode中新建一个终端,然后通过这个 ...
- HCIE笔记-第八节-传输层协议
传输层:实现"端到端"的服务 应用到应用 端口 = port [逻辑端口] 基于应用级别的互访,就是 端口到端口的互访. 传输层 = 0-65535[端口范围] === TCP/U ...
- 反射解决微信开发加解密illegal key size,不需要修改JDK jar包
在微信开发时,消息接口时,涉及到消息加密,抛出了 java.security.InvalidKeyException: Illegal key size 的异常,异常堆栈如下: 按照网上的解决方案,都 ...
- pgpool-II 4.3 中文手册 - 入门教程
本章解释了如何开始使用 Pgpool-II. 安装 在本节中,我们假设您已经安装了 Pgpool-II 与 PostgreSQL 集群. 你的第一个复制(Replication) 在本节中,我们将解释 ...
- C++ 栈内存与堆内存小探究
实验方式:尝试以不同方式创建超大号二维数组 测试代码: #include <iostream> using namespace std; const int maxn=1000000; c ...
- Swift字符串操作-持续更新-2022
Swift字符串追加 var str = "OC" str.append(" Swfit") print(str) // 输出结果: OC Swift 输出结果 ...
- 详解六大国产CPU处理器
一个执着于技术的公众号 CPU作为计算机设备的运算和控制核心,负责指令读取.译码与执行,因研发门槛高.生态构建难,被认为是集成电路产业中的"珠穆朗玛峰". 纵观全球,Intel.A ...