本篇文章给大家分享的是有关如何用K8S源码分析GenericAPIServer,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。
API Server对外提供的是RESTful接口,GenericAPIServer结构主要解决的就是URI路由的问题,即把URI映射到对应的处理逻辑。可以把GenericAPIServer理解为一个微型的mvc框架,它是整个API Server的骨架。
GenericAPIServer相关的代码在/staging/src/k8s.io/apiserver/pkg下(不是特别明白为啥是在/staging目录,而不是直接在/pkg下)。
核心结构
核心的类关系如下图:
最关键的三种结构简单解释如下:
Config相关 - 构造配置类。通过Config.Complete(...)方法获得一个CompletedConfig实例,再在后者上调用New()方法就可以获得一个GenericAPIServer的实例指针
GenericAPIServer & Handler - GenericAPIServer本身包括http server相关的所有参数,当中最重要的是Handler field,用于实际处理业务逻辑
Handler是一个指向APIServerHandler的指针,APIServerHandler结构提供了ServeHTTP()方法,能够直接提供给http.Server类生成http service
APIServerHandler中的FullHandlerChain结构是最终装配完成的http.Handler,是所有handle逻辑的入口
所有内部资源(Pods/Deployments)的访问路径都注册到GoRestfulContainer结构中,外部访问方式(如通过API Server的proxy功能访问node)注册到NonGoRestMux中
Director是一个内部的dispatcher,在GoRestfulContainer和NonGoRestfulMux间执行路由
API Group - 类似于spring mvc中的RequestMapping结构,代表一个URI资源路径。每一个内部资源(如Pods/Deployments)只要实现了rest.Storage等系列接口,就可以通过构造APIGroupInfo在GenericAPIServer上暴露出来
综上所述,通过Config结构来创建并初始化GenericAPIServer,并把APIGroupInfo install到GenericAPIServer上就可以实现http接口的暴露。
初始化流程
在APIServerHandler构建过程中会调用DefaultHandlerChain函数来加入默认的处理handler。
以上就是如何用K8S源码分析GenericAPIServer,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注编程之家行业资讯频道。