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

相关文章

来自专栏机器学习原理

爬虫篇(1)——从爬取练习题开始1 1.对python练习100例内容的爬取

前言: 介绍小例子,加深对爬虫的理解,主要用bs4完成 1 1.对python练习100例内容的爬取 页面分析 主页面: ? image.png ...

2947
来自专栏林冠宏的技术文章

全面总结: Golang 调用 C/C++,例子式教程

作者:林冠宏 / 指尖下的幽灵 掘金:https://juejin.im/user/587f0dfe128fe100570ce2d8 博客:htt...

4135
来自专栏增长技术

git对象模型

所有用来表示项目历史信息的文件,是通过一个40个字符的(40-digit)“对象名”来索引的,对象名看起来像这样:

753
来自专栏云时之间

基于百度翻译的爬虫(二):页面篇

在这一篇文章里,我将通过一个开源的HTML页面再去进行修改,来达到我们的使用要求,最终的目的是学会我们如何使用网页,来达到自己的需求. 首先,我们的环境是Pyt...

3743
来自专栏伦少的博客

如何解决spark开发中遇到需要去掉文件前几行数据的问题

1283
来自专栏JMCui

Linux 学习记录 四(Bash 和 Shell scirpt).

一、什么是 Shell?        狭义的shell指的是指令列方面的软件,包括基本的Linux操作窗口Bash等,广义的shell则包括 图形接口的软件,...

3814
来自专栏玄魂工作室

怎样学Python之第十九课 高级文件输入和输出

欢迎回来!如果您还记得以前的几次培训课程,我们介绍了基本的文件I/O。 这是使我们的脚本适用于现实生活场景中的一个非常重要的步骤,今天我们将要深入这些概念。 我...

3045
来自专栏优启梦

WordPress 如何判断一篇文章是否存在

一直以来子凡都计划为泪雪网添加一个文章的收藏功能,直到现在也依旧也还只是在计划中,最近几天子凡在研究微信小程序,试图折腾用守望轩开源的WordPress微信小程...

38010
来自专栏大数据挖掘DT机器学习

用scrapy爬虫抓取慕课网课程数据详细步骤

关于如何安装scrapy框架,可以参考这篇文章 史上最完全Mac安装Scrapy指南 http://www.jianshu.com/p/a03aab073...

4218
来自专栏闻道于事

HTML表格表单综合——用户注册表

今天学习了表格和表单知识,我综合了他们添加了一些拓展知识做了一个用户注册表,以下面代码来整理表格和表单知识: <!DOCTYPE html PUBLIC "-/...

3996

扫描关注云+社区