StorageFactory
StorageFactory 的作用是封装并简化对资源的操作。StorageFactory 最主要的作用是根据传入的 GroupResource 获取对应于该资源的存储配置 Config。
在 API Server 中,StorageFactory 由 StorageFactoryConfig 来生成,StorageFactoryConfig 又通过 EtcdOption 来生成,毕竟无论如何变化,etcd 存储才是最终的目的地。
DefaultStorageFactory
DefaultStorageFactory 是到 1.18 版本前,K8S 内部 StorageFactory 的唯一实现,下面我们来详细分析 DefaultStorageFactory 的模式。
Cohabitating Resources
DefaultStorageFactory 将关联的 GroupResource 组织在一起,从上图可以看到,每一个传入的 GroupResource 是按顺序处理的,因此,关联的 GroupResource 间也是有优先级问题存在的。下图为创建 kube-apiserver 时,使用的 StorageFactory 中关联资源的配置情况
RESTOptionsGetter
Etcd 配置与 StorageFactory 最终都汇入 RESTOptionsGetter 中。RESTOptionsGetter 做为核心配置项,用于通过 GroupResource 找到最终的存储。
创建 storage.Interface 的过程如下图所示
StorageFactoryRestOptionFactory
以 StorageFactoryRestOptionFactory 为例,GetRESTOptions 方法步骤如下
- 使用 StorageFactory 生成 Storage Config
- 创建 RESTOptions 结构体,并保存生成的 Storage Config
- 默认使用 generic.UndecoratedStorage 方法作为 Decorator
- 如果开启了 EnableWatchCache 选项,会修改 Decorator
UndecoratedStorage
UndecoratedStorage 只使用了传入的 storagebackend.Config 参数
直接调用 factory.Create 创建后端存储