什么是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. 如丝般顺滑:DDD再实践之类目树管理

    在上次反思DDD实践之后,在类目树管理项目中再次实践DDD.从需求分析到建模和具体的落地,结合个人体会,都是干货.

  2. Blazor WebAssembly 渐进式 Web 应用程序 (PWA) 使用 LocalStorage 离线处理数据

    原文链接:https://www.cnblogs.com/densen2014/p/16133343.html Window.localStorage 只读的localStorage 属性允许你访问一 ...

  3. JavaScript基础第04天笔记

    JavaScript基础第04天笔记 1 - 数组 1.1 数组的概念 数组可以把一组相关的数据一起存放,并提供方便的访问(获取)方式. 数组是指一组数据的集合,其中的每个数据被称作元素,在数组中可以 ...

  4. axios 内存泄漏

    有一个项目需要post后台几万条数据,每次只能请求三五条,所以只能在每次请求成功后自调用这个请求函数. 但这样请求了成千上万次后,浏览器会崩溃并报出 out of Memory 错误,经查询,这是内存 ...

  5. php第一次实验个人博客网站的设计编写①

    先上效果图: 网页代码:index.html <!DOCTYPE html> <html lang="en"> <head>     <m ...

  6. 浅谈MatrixOne如何用Go语言设计与实现高性能哈希表

    目录 MatrixOne数据库是什么? 哈希表数据结构基础 哈希表基本设计与对性能的影响 碰撞处理 链地址法 开放寻址法 Max load factor Growth factor 空闲桶探测方法 一 ...

  7. XCTF练习题---MISC---掀桌子

    XCTF练习题---MISC---掀桌子 flag:flag{hjzcydjzbjdcjkzkcugisdchjyjsbdfr} 解题步骤: 1.观察题目,发现没有附件,只有一串代码. 2.根据代码内 ...

  8. 前端面试 -HTTP系列

    http和https 的区别? 端口 经济 安全性 响应速度 http 80端口 不需要 明文传输,安全性差 页面响应速度快,使用tcp的3次握手 https 443端口 费钱SSL需要ca 证书 S ...

  9. 【DIY】【CSAPP-LAB】深入理解计算机系统--datalab笔记

    title: 前言 <深入理解计算机系统>一书是入门计算机系统的极好选择,从其第三版的豆瓣评分9.8分可见一斑.该书的起源是卡耐基梅龙大学 计算机系统入门课(Introduction to ...

  10. Base64隐写

    0x00: 前言 Base64编码的作用: 将一些特殊的字符转换成常见的字符.特殊的字符可能是不可见字符或者是大于ascii码127的,将其变成常见的字符(在base64中为a~z A~Z 0~9 + ...