k8s源码分析-----kubectl(1)api.RESTMapper

说明:此文章为腾讯云机器自动从本人csdn博客搬迁过来。是本人授权操作。

申明:无本人授权,不可转载本文。如有转载,本人保留追究其法律责任的权利。

龚浩华,QQ 29185807,月牙寂 道长

第一时间获取文章,可以关注本人公众号 月牙寂道长 yueyajidaozhang

源码为k8s v1.1.1稳定版本

api. RESTMapper是kube-apiserver和kubectl的基础,在讲解kube-apiserver的时候,我们就有简单的讲解 api. RESTMapper,但并没有系统的讲解。那么这一章,我们先系统的讲解下

1、构建

源码在k8s.io\kubernetes\pkg\api\mapper.go

声明了一个全局变量RESTMapper,并在init函数中初始化了

那么什么时候注册呢?

在之前,我们需要看看,group/version 是一个很重要的东西

1.1 版本号注册

我们先看下版本号的注册

代码在k8s.io\kubernetes\pkg\api\registered

先读取了环境变量KUBE_API_VERSIONS,一般来说这个设置为空,那就是默认的为"v1,extensions/v1beta1"

1.2 GroupMeta

我们再看下groupmeta的保存

代码在k8s.io\kubernetes\pkg\api\latest

groupmeta保持的group的metadata信息

接下来就是保存group的信息

上面有一个函数,用来注册group

1.3 Scheme

代码在k8s.io\kubernetes\pkg\api\register.go

api下注册了很多types

k8s.io\kubernetes\pkg\api\v1\register.go

v1下注册了很多的types

1.4 注册

代码在k8s.io\kubernetes\pkg\api\install

从上面的init函数来看,先注册了“”的一个group信息,然后初始化了GroupVersiongroupVersion,Group:apiutil.GetGroup(groupVersion),Version:apiutil.GetVersion(groupVersion),Codec:runtime.CodecFor(api.Scheme, groupVersion),groupMeta.Versions = versionsgroupMeta.GroupVersions = groupVersionsgroupMeta.SelfLinker = runtime.SelfLinker(accessor) 在之后NewDefaultRESTMapper

遍历了所有注册在Scheme的类型,ignoredKinds类型将直接跳过,这里我们要注意两个rootScoped对应的是meta.RESTScopeRoot,其余的对应的是meta.RESTScopeNamespace

2、DefaultRESTMapper

下面我们来分析下RESTMapper的作用代码在k8s.io\kubernetes\pkg\api\meta\restmapper.go在上面mapper调用了meta.NewDefaultRESTMapper

我们看看结构体

其实从结构体来看,就是保存了一个mapping。这个是这个结构的最主要东西 根据上面构建的流程,最后调用了Add

3、功能

那么最后就是mapper的提供的功能了

查找version版本

根据version和kind查找相关的信息

最后返回一个结构体,主要的就是相对应的kind包含的所有信息

4、总结

首先,注册所有的version版本,用于版本管理。

然后注册了所有的group版本,用于group管理

最后,针对group和version注册了RESTMapper。

RESTMapper用于管理所有对象的信息。外部要获取的话,直接通过version,group获取到RESTMapper,然后通过kind类型可以获取到相对应的信息

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏计算机编程

ionic4 -- angular 跳转页面

ionic4 与前辈们最大的不同就是通过angular引入了route,这样每次跳转的时候只需要直接跳转对应的路由地址就可以了,给了路由器上的解耦,也解决了原来...

892
来自专栏零基础使用Django2.0.1打造在线教育网站

零基础使用Django2.0.1打造在线教育网站(十二):错误信息提示

努力与运动兼备~~~有任何问题可以加我好友或者关注微信公众号,欢迎交流,我们一起进步!

61
来自专栏前端架构与工程

Node.js建站笔记-使用react和react-router取代Backbone

斟酌之后,决定在《嗨猫》项目中引入react,整体项目偏重spa模式,舍弃部分server端的模板渲染,将一部分渲染工作交给前端react实现。 react拥有...

2009
来自专栏HaHack

jQuery-based Local Search Engine for Hexo

924
来自专栏逸鹏说道

05.LoT.UI 前后台通用框架分解系列之——漂亮的时间选择器

LOT.UI分解系列汇总:http://www.cnblogs.com/dunitian/p/4822808.html#lotui LoT.UI开源地址如下:h...

26710
来自专栏.Net移动开发

Smobiler 4.4 更新预告 Part 1(Smobiler能让你在Visual Studio上开发APP)

在4.4版本中,大家对产品优化的一些建议和意见进行了相应的优化和修复,同时,还新增了一些令人激动的功能和插件。

723
来自专栏云飞学编程

python爬虫小知识,中文在url中的编码解码

有时候我们做爬虫经常会遇到这种编码格式,大概的样式为 %xx%xx%xx,对于这部分编码,python提供了一个quote的方法来编码,对应的解码为unquot...

132
来自专栏沈唁志

微信公众号开发之创建自定义菜单数据拼接

在开启微信公众号开发者模式以后,在微信公众号平台设置的自动回复和自定义菜单会失效,所以我们要进行自定义

162
来自专栏xiaoheike

es suggest did you mean资料

term suggester 根据提供的文档提供搜索关键词的建议,也就是关键词自动纠错。该链接介绍如何使用 term suggester 语法。term sug...

502
来自专栏JetpropelledSnake

Vue学习笔记之vue-cli脚手架项目中组件的使用

在webpack-simple模板中,包括webpck模板。一个.vue文件就是一个组件。

933

扫描关注云+社区