什么是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简介与架构的更多相关文章

  1. FastDFS简介和架构图(内容来自于阅读fastdfs官方文档的总结)

    一.FastDFS简介 1. FastDFS是一个轻量级的开源分布式文件系统 2. FastDFS主要解决了大容量的文件存储和高并发访问的问题,文件存取时实现了负载均衡 3. FastDFS实现了软件 ...

  2. SpringCloud系列一:SpringCloud的简介和架构

    一.SpringCloud简介 SpringCloud就是一套分布式服务治理的框架,既然它是一套服务治理的框架,那么它本身不会提供具体功能性的操作,更专注于服务之间的通讯.熔断.监控等.因此就需要很多 ...

  3. OpenVPN简介及架构详解

    OpenVPN简介 1 简介    VPN(Virtual Private Network)直译就是虚拟专用通道,是提供给企业之间或者个人与公司之间安全数据传输的隧道. OpenVPN无疑是Linux ...

  4. Kafka(一)Kafka的简介与架构

    一.简介 1.1 概述 Kafka是最初由Linkedin公司开发,是一个分布式.分区的.多副本的.多订阅者,基于zookeeper协调的分布式日志系统(也可以当做MQ系统),常见可以用于web/ng ...

  5. nginx 练习(将游戏图片部署到NFS+LNMP架构简介+uwsgi架构简介)

    nginx(将游戏图片部署到NFS) 练习 一.首先去NFS这里创建挂载点 1.先在NFS的opt下面创建文件夹存放图片 [root@linux opt]# mkdir /opt/img 2.然后将此 ...

  6. Java异常(一) Java异常简介及其架构

    概要 本章对Java中的异常进行介绍.内容包括:Java异常简介Java异常框架 转载请注明出处:http://www.cnblogs.com/skywang12345/p/3544168.html ...

  7. (一)Shiro笔记——简介、 架构分析

    1. Shiro是什么 Apache Shiro是一个强大灵活的开源安全框架,可以完全处理身份验证,授权,企业会话管理和加密. Apache Shiro的首要目标是易于使用和理解. 安全有时可能非常复 ...

  8. Android Sensor详解(1)简介与架构【转】

    本文转载自:https://blog.csdn.net/u013983194/article/details/53244686 最近在学习有关如何porting sensor的东西,仅借此机会写博客来 ...

  9. Hadoop简介及架构

    狭义上来说,hadoop就是单独指代hadoop这个软件, 广义上来说,hadoop指代大数据的一个生态圈,包括很多其他的软件 2.hadoop的历史版本介绍 0.x系列版本:hadoop当中最早的一 ...

随机推荐

  1. 函数 装饰器 python

    今日内容概要 1.闭包函数 2.闭包函数的实际应用 3.装饰器简介(重点加难点) 4.简易版本装饰器 5.进阶版本装饰器 6.完整版本装饰器 7.装饰器模板(拷贝使用即可) 8.装饰器语法糖 9.装饰 ...

  2. 『忘了再学』Shell基础 — 10、Bash中的特殊符号(二)

    提示:本篇文章接上一篇文章,主要说说()小括号和{}大括号的区别与使用. 8.()小括号 ():用于一串命令执行时,()中的命令会在子Shell中运行.(和下面大括号一起说明) 9.{}大括号 {}: ...

  3. Unity减小安装包的体积(210MB减小到7MB)

    概述 项目简介 由于是公司内做的项目,不方便开源,就只分享优化过程吧. 项目信息 逐日是一个移动端单机小游戏,使用Unity开发,目前已将项目使用的Unity升级到2019.4.14f1c1 (3e5 ...

  4. vue项目中cookie的使用

    Vue使用cookie和session 1:cookie和session 为了防止数据运输或存储终端,特地设置了cookie和session,他们其实都是将数据存储当地. cookie数据保存在客户端 ...

  5. [AcWing 822] 走方格

    点击查看代码 #include<iostream> using namespace std; int n, m, ans = 0; void dfs(int x, int y) { if ...

  6. 如何用好Nginx的gzip指令

    说一段废话 压缩响应数据有什么作用呢?问的好:从用户体验和IT成本两方面回答这个问题: 用户体验上 网速一定的情况下,传输10MB数据比传输5MB数据的时间快了一半.所以传输数据越小用户加载页面就越快 ...

  7. MySQL字段约束条件、字段类型、存储引擎、配置文件

    字符编码与配置文件 # 查看MySQL默认字符编码 \s ''' 如果是5.X系列 显示的编码有很多种 Latin1 gbk 如果是8.X系列 显示的统一是utf8mb4 utf8mb4是utf8优化 ...

  8. 让 API 测试变的简单。

    做开发已经四年有余了,之前在接口测试的时候最开始用的自己写的测试类进行测试,后来接触到了 postman 和 swagger ,虽然用起来比自己写的强太多了,但是总觉得差点事儿. 一方面是 postm ...

  9. Spring-Batch处理MySQL数据后存到CSV文件

    1 介绍 用Spring Batch实现了个简单的需求,从MySQL中读取用户表数据,根据生日计算年龄,将结果输出到csv文件. 1.1 准备表及数据 user test; DROP TABLE IF ...

  10. SQL中常用的字符串LEFT函数和RIGHT函数详解!

    今天继续整理日常可能经常遇到的一些处理字符串的函数,记得点赞收藏!以备不时之需!看到最后有惊喜! LEFT(expression, length)函数 解析:从提供的字符串的左侧开始提取给定长度的字符 ...