博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【原创】k8s源码分析------kube-apiserver分析(3)
阅读量:4032 次
发布时间:2019-05-24

本文共 1585 字,大约阅读时间需要 5 分钟。

转自本人自己的空间,

继续接上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

 

龚浩华

qq 月牙寂 道长 29185807

2016年3月23日

  (版权声明:本文为作者原创,如需转载请通知本人,并标明出处和作者。擅自转载的,保留追究其侵权的权利。)

如果你觉得本文对你有帮助,可以转到你的朋友圈,让更多人一起学习。

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

 

你可能感兴趣的文章
Python自动化之pytest框架使用详解
查看>>
【正则表达式】以个人的理解帮助大家认识正则表达式
查看>>
性能调优之iostat命令详解
查看>>
性能调优之iftop命令详解
查看>>
非关系型数据库(nosql)介绍
查看>>
移动端自动化测试-Windows-Android-Appium环境搭建
查看>>
Xpath使用方法
查看>>
移动端自动化测试-Mac-IOS-Appium环境搭建
查看>>
Selenium之前世今生
查看>>
Selenium-WebDriverApi接口详解
查看>>
Selenium-ActionChains Api接口详解
查看>>
Selenium-Switch与SelectApi接口详解
查看>>
Selenium-Css Selector使用方法
查看>>
Linux常用统计命令之wc
查看>>
测试必会之 Linux 三剑客之 sed
查看>>
Socket请求XML客户端程序
查看>>
Java中数字转大写货币(支持到千亿)
查看>>
Java.nio
查看>>
函数模版类模版和偏特化泛化的总结
查看>>
VMware Workstation Pro虚拟机不可用解决方法
查看>>