本篇文章给大家分享的是有关如何用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,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注编程之家行业资讯频道。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。