k8s api注册

APIserver注册api:

 api一般有group和version两项,group分为了Core、abac、apps、authtication、authorization、autoscaling、batch、componentconfig、extensions、policy、rbac等,其中core的groupname为空,他是核心的api,就是包括pod、service等.它的代码位于pkg/api下面,其实11个Group代码位于pkg/apis的相应目录下.

    这些api是在kubernetes/pkg/master/import_known_versions.go 文件引入的时候调用init函数注册的。

“实际上apiserver操作的都是internal version。举个例子,假如有一个创建Pod的请求来了,apiserver首先会将请求给反序列化,用户发过来的pod请求往往是有版本的,比如为v1,因此会反序列化为一个v1.Pod。apiserver会立即将这个v1.Pod利用convertor转换成internal.Pod,然后进行一些操作,最后要把它存到etcd里面去,etcd里面的Pod信息是有版本的,因此会先发生一次转换,将其转换为v1.Pod,然后序列化存入etcd。这样看上去是不是多此一举?其实这就是k8s对api多版本的支持,这样有什么好处了,用户可以以一个v1betal创建一个Pod,然后存入etcd的是一个相对稳定的版本,比如v1版本。转换必定存在着效率的问题,为了解决效率问题,转换函数由开发者自己写,然后会重新用代码生成一边。”

------引自“http://licyhust.com/%E5%AE%B9%E5%99%A8%E6%8A%80%E6%9C%AF/2016/10/06/k8s-api/

具体注册的函数在

func (a *APIInstaller) registerResourceHandlers(path string, storage rest.Storage, ws *restful.WebService, proxyHandler http.Handler) (*unversioned.APIResource, error) {
	...

    

猜你喜欢

转载自blog.csdn.net/wasd12121212/article/details/82808395