k8s storage随手记
k8s源码中关于每个资源对象(比如:pod、deployment等等)会有一个map类型的变量用于存储该资源对象相关的storage,什么是storage呢?如下简单描述,仅用于我个人方便理解,方便回忆起大致工作原理,因为本人最近在aggregated api,对apiserver中一些我关注的逻辑不是很明白1)map[${资源路径,比如,取值可为:pod、pod/status 等等}]xxx_s
k8s源码中关于每个资源对象(比如:pod、deployment等等)会有一个map类型的变量用于存储该资源对象相关的storage,什么是storage呢?如下简单描述,仅用于我个人方便理解,方便回忆起大致工作原理,因为本人最近在aggregated api,对apiserver中一些我关注的逻辑不是很明白
1)map[${资源路径,比如,取值可为:pod、pod/status 等等}]xxx_storage(说明:每个资源路径对应一个xxx_storage);
2)apiserver在注册url时,比如GET /api/xxx/xxx/xxx/pod/status时,会判断对应的xxx_storage有实现某个interface,并且这个interface有GET()方法,就会注册GET /api/xxx/xxx/xxx/pod/status这个url,否则就不会注册该url;
3)假如pod/status支持GET /api/xxx/xxx/xxx/pod/status(实际上也支持),通过第2)步可知道,该url的处理逻辑在xxx_storage实现的GET()方法中,GET方法中包含了如何和后端存储进行交互,获取pod/status
图示
总结:
storage的作用:
1)资源路径是否支持某个方法,要看对应的storage有没有实现对应接口,并且对应接口有对应的方法;
2)storage具体所实现的接口方法中,包含了如何和后端数据库进行交互,k8s内置的资源的对象都是和etcd进行交互的,在实现自己的aggregate api的时候,想要和其它后端存储进行交互来存取数据,可以在storage实现的接口方法中进行编写
3)实现了webservicer操作后端数据库的逻辑,链路为 url -> storage(实现了interface) -> 后端存储
更多推荐
所有评论(0)