什么是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. 从.net开发做到云原生运维(八)——DevOps实践

    1. DevOps的一些介绍 DevOps(Development和Operations的组合词)是一组过程.方法与系统的统称,用于促进开发(应用程序/软件工程).技术运营和质量保障(QA)部门之间的 ...

  2. CDN绕过

    信息收集_CDN绕过 什么是CDN?为什么要绕过? ​ CDN全称是内容分发网络(content delivery network).其目的是让用户能够更快速的得到请求的数据. ​ 网上找了一张图片, ...

  3. Restful API和传统的API的区别

    一.功能区别 Restful API是当作资源的唯一标识符,而传统是实现某某功能 如:/api/getList/1 and /api/getList?page=1 二.methods多样性 Restf ...

  4. git详情、git工作流程、常用命令、忽略文件、分支操作、gitee远程仓库使用

    今日内容概要 git详情 git工作流程 git常用命令 过滤文件 分支操作 git远程仓库使用 可参照:https://www.cnblogs.com/liuqingzheng/p/15328319 ...

  5. 新华三Gen10服务器ILO 5 安装中文语言包

    ILO 5 安装中文语言包 在官网下载语言包文件,并解压 选择firmware&OS software,点击右侧的update firmware 选择本地文件,浏览到语言包里面的lpk文件,点 ...

  6. pyqt5 重启相同线程错误:QThread: Destroyed while thread is still running

    背景: 把一个基于QObject的类的槽运行在另一个线程,我们可以用moveToThread的方法. 1 新建一个子线程类,编写槽函数和信号,MyClass *m_MyClass=new MyClas ...

  7. Git在项目中使用技巧

    1.常用的命令 mkdir 文件夹名 创建文件夹 clear 清楚屏幕 ls或者ll 将当前目录下的子文件和子目录平铺在控制台 find 目录名 将对应目录下的子孙文件或子孙目录平铺在控制台 rm 文 ...

  8. CentOS 下 MySQL 8.0 安装部署,超详细!

    点击上方"开源Linux",选择"设为星标" 回复"学习"获取独家整理的学习资料! Mysql8.0安装 (YUM方式) 首先删除系统默认或 ...

  9. 【hexo博客搭建】将搭建好的hexo博客部署到阿里云服务器上面(下)

    一.部署到阿里云服务器 既然博客也已经成功在本地部署,然后主题也成功安装,接下来就可以部署到服务器上面了,如果你也想要魔改matery主题,可以去各种博客上面找一找大佬的教程,或者联系我,也可以让你少 ...

  10. .NET混合开发解决方案10 WebView2控件调用网页JS方法

    系列目录     [已更新最新开发文章,点击查看详细] WebView2控件应用详解系列博客 .NET桌面程序集成Web网页开发的十种解决方案 .NET混合开发解决方案1 WebView2简介 .NE ...