k8s源码分析------kube-apiserver分析(3)

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

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

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

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

继续接上kube-apiserver分析(2)

在上一篇中,我们分析了storage的注册。下面分析下storage是怎么转换成restful格式的。

我们从k8s.io\kubernetes\pkg\master\master.go 入手

在函数func (m *Master) init(c *Config)中

我们看到api_v1的installrest

跟踪进去

这里面选择了默认的apigroupversion,storage则为之前注册好的storage。

下面我们跟踪进去看下defaultApiGroupVersion

这里返回了一个apiserver. APIGroupVersion。暂时我们不管里面初始化了那些参数。

代码在k8s.io\kubernetes\pkg\apiserver\apiserver.go

下面是APIGroupVersion的结构体

我们回到第一张图中,跟踪进去APIGroupVersion. InstallREST

我们看到了128行 container.Add(ws) 从这里就完成了storage变成restful的真正注册

但我们还是没有看到具体是怎么转的。

我们继续跟踪

在这里生成了一个APIInstaller。prefix则为root+version。

我们看下info

生成了APIInstaller之后NewWebService

这里做了一些参数设定,其中的path就是之前的root+version

紧接着就是

在上面,我们看到遍历了storage的key,然后生成了paths,并排序

然后针对每个path都进行registerResourceHandlers

所以真正的注册在registerResourceHandlers中

这函数比较长

上面的没什么好看的,主要是看看有没有subresource,还有就是获取到一些kind,version等信息

重要的是下图中的第一行,mapping

再接着就是一些处理接口,现在应该比较熟悉了,这个就是storage里面的

我们中间跳过一些代码

直接看到下图。其中scope 则为mapping.scope

scope有两个参数。其中之一为RESTScopeNameRoot。 等到后面我再介绍这个参数的来由

接着,我们看真正的处理封装

scope另外一个参数RESTScopeNameNamespace。

也是注册了一些action

再往下,一个参数结构体

然后遍历所有的actions。

从下图中,我们看到了熟悉的

411行 route := ws.GET(action.Path).To(handler).

425行 ws.Route(route)

当然还有一些

等等,就不一一截图列出来了。

至此我们看到了所有的storage都已经转换成了restful格式,并注册进去了

上面我们还遗留了一个问题,那就是scope有连个类型参数。

现在我们看下k8s.io\kubernetes\pkg\api\install\install.go

在这里有两个类型的sets

然后调用了api. NewDefaultRESTMapper

k8s.io\kubernetes\pkg\api\mapper.go

其中注册在rootscope中的几个类型设置为RESTScopeRoot

剩下的类型为RESTScopeNamespace

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

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏编程

花5分钟教会你用python搭建出一个动态网页,零基础也能学得会

本套录屏教程,是为初学者准备的,确保非计算机专业的也能跟着一步一步玩转python,既培养出兴趣,又玩出点东西。 上一讲介绍了我们如何用python发布一个静态...

1967
来自专栏互联网大杂烩

拜占庭容错机制

Client会发送一系列请求给各个replicas节点来执行相应的操作,BFT算法保证所有正常的replicas节点执行相同序列的操作。因为所有的replica...

782
来自专栏FreeBuf

微信支付SDK 0元购Hack思路分享

* 本文作者:zjie2O71,本文属FreeBuf原创奖励计划,未经许可禁止转载

1163
来自专栏腾讯云API

腾讯云 API 最佳实践: 善用幂等性

有些开发者问我云服务器“创建实例”接口有一个参数“ClientToken”不知道有什么作用。本文作一个简单的解答。

4.5K15
来自专栏IT技术精选文摘

RPC原理及实现

1 简介 RPC 的主要功能目标是让构建分布式计算(应用)更容易,在提供强大的远程调用能力时不损失本地调用的语义简洁性。为实现该目标,RPC 框架需提供一种透明...

6549
来自专栏Seebug漏洞平台

CVE-2017-5123 漏洞利用全攻略

原文:https://salls.github.io/Linux-Kernel-CVE-2017-5123/

3977
来自专栏嵌入式程序猿

MQX任务学习

MQX也是基于对任务的调度和管理来运行的,所以今天来简单学习下MQX的任务。 MQX像其他操作系统一样,提供对任务的调度和管理,任务是完成一定功能的函数...

2818
来自专栏为数不多的Android技巧

Android Studio你不知道的调试技巧

写代码不可避免有Bug,通常情况下除了日志最直接的调试手段就是debug;那么你的调试技术停留在哪一阶段呢?仅仅是下个断点单步执行吗?或者你知道 Evaluat...

711
来自专栏Ryan Miao

Git 工作流的正确打开方式

前言 一直在使用git做版本控制,也一直工作很顺利,直到和别人发生冲突的时候。这才注意到git 工作流并不是那么简单。比如,之前遇到的清理历史。百度到的资料很...

2906
来自专栏北京马哥教育

Python在自动化运维时经常会用到的方法

本文由马哥教育Python自动化实战班6期学员推荐,转载自互联网,作者为seed,内容略经小编改编和加工,观点跟作者无关,最后感谢作者的辛苦贡献与付出。 随着信...

3578

扫码关注云+社区