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 条评论
登录 后参与评论

相关文章

来自专栏SDNLAB

LINC switch系列之配置与运行

前言: LINC switch是一个由flowforwarding. org主导开发的一款基于Apache2.0协议开源的Openflow交换机软件。本文在安装...

3144
来自专栏mySoul

一个基于Node.js的本地快速测试服务器

第一个参数为post地址,第二个参数为端口号,将会把读取的JSON数据输出在控制台,并写入文件中,文件路径为 ./log/data.json

935
来自专栏北京马哥教育

Nginx 进阶 (ssl、fpm、rewrite、cache配置等)

一、配置https网站 1、自建CA (1)生成私钥文件 mkdir -p /etc/pki/CA/private #创建私钥保存的目录 (umask 077;...

4258
来自专栏Java成长之路

十三、JDK的命令行工具

前面的博文我们介绍了一些关于jvm的一些基础知识,本文介绍一些jdk的命令行工具,通过这些工具我们可以对运行日志、异常堆栈、GC日志、线程快照(threaddu...

1022
来自专栏PHP技术

PHP的错误机制总结

PHP的错误机制也是非常复杂的,做了几年php,也没有仔细总结过,现在就补上这一课。

1104
来自专栏柠檬先生

mybatis——学习笔记

配置文件    <properties resource="dbconfig.properties"></properties>     1. properti...

18610
来自专栏容器云生态

运维工作常用的shell命令

#seq 1 100    //1到100排序 #seq 1 3 100   //1到100排序,间隔为3 shell中的变量设置规则: 1.变量与变量的内容用...

1906
来自专栏深度学习之tensorflow实战篇

mysql、mongodb、python(dataframe).聚合函数的形式,以及报错解决方案

1、mysql select * from table_name group by name,id 有的时候执行下面语句报错sql_mode=only_ful...

2864
来自专栏王纯的专栏

Valgrind 使用入门

Valgrind 是一套类似于 gprof 的动态检测的工具集,由于使用方便,不需修改目标程序源码,输出清晰图文并茂等优势,常被用作后台(特别是linux后台)...

8930
来自专栏zingpLiu

Django快速入门

Django 是用 Python 写的一个自由和开放源码 web 应用程序框架。 web框架是一套组件,能帮助你更快、更容易地开发web站点。当你开始构建一个w...

723

扫码关注云+社区