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

相关文章

来自专栏网络

摸金Redis漏洞

摘要:漏洞可以参考乌云案例 ? 1.Redis漏洞基本信息漏洞名称:Redis服务器远程执行漏洞漏洞详情:Redis因配置不当可以无密码登录,导致未授权访问。 ...

3035
来自专栏云计算教程系列

如何在Ubuntu 16.04上使用Apache或Nginx加密Tomcat 8连接

Apache Tomcat是一个Web服务器和servlet容器,旨在为Java应用程序提供服务。Tomcat经常用于生产企业部署和较小的应用程序需求,既灵活又...

4693
来自专栏云原生架构实践

Jhipster技术栈理解 - UAA原理分析

密码模式(Resource Owner Password Credentials)中,用户向客户端提供自己的用户名和密码。客户端使用这些信息,向"认证服务器"进...

3063
来自专栏C/C++基础

Linux命令(40)——nohup命令

nohup的作用可以将程序以忽略挂起信号(SIGHUP)的方式运行。常见的用法是和&命令一同使用,将命令放置到后台运行,即使终端挂掉,进程会忽略挂起信号,继续运...

1132
来自专栏优启梦

emlog后台登录地址加密

这几天在写YoungxjTools新版前端,所以没怎么发教程。该灵感来自wp后台登录地址加密,按照该教程操作成功后可有效避免软件批量扫描爆破后台

54113
来自专栏java小记

服务器ssh链接安全漏洞修复

对域名进行安全扫描时发现,域名的安全漏洞当中有一项是关于ssh的,名为SSH Weak Ciphers And Mac Algorithms Supported...

2610
来自专栏python学习路

二、urllib进阶

Handler处理器 和 自定义Opener opener是 urllib.request.OpenerDirector 的实例,我们之前一直都在使用的ur...

3125
来自专栏Youngxj

emlog后台登录地址加密

4638
来自专栏JackeyGao的博客

Django小技巧09: 创建修改密码视图

就此而言, 使用函数式视图更容易实现。 因为PasswordChangeForm不从ModelForm继承。并且其构造函数使用user参数.

2221
来自专栏FreeBuf

TinyShop缓存文件获取WebShell之0day

TinyShop是一款电子商务系统(网店系统),适合企业及个人快速构建个性化网上商店。系统是基于Tiny(自主研发)框架开发的,使系统更加的安全、快捷、稳定、高...

2449

扫码关注云+社区

领取腾讯云代金券