摘要:简介本文向您展示如何访问与后端存储相关的源代码。 主要在公共接口原来的注释中定义了一个用于后端存储的公共接口,主要是增、删、改、查询一些方法。 这种面向接口的编程负责实现和设计。 解耦的设计提高了软件的可扩展性并减少了模块之间的耦合。 例如,本文除了使用
前言
之外,还使用kube-apiserver到etcd,只要提供具体的实现即可。我们将向您展示如何访问它。 后端存储相关源码主要位于kubernetes/staging/src/k8s.io/apiserver/pkg/storage
通用接口
提供通用的用于对接口对象进行编组/解组操作的接口,并隐藏其后面所有与存储-相关的操作(原始注释)
// kubernetes/vendor /k8s .io/apiserver/storage/interfaces.gotype 接口 接口{ Versioner() Versioner Create(...) Delete(...) Watch(...) WatchList(...) Get(...) GetToList (. ..) List(...) DeliveredUpdate (. ..)}
接口是后端存储的常用接口,主要是一些“增、删、改、确认”方法。 这种面向接口的编程通过设计实现和设计之间的分离来提高软件的可扩展性并减少模块之间的耦合。 例如,除了使用etcd作为你的后端存储之外,只要提供接口的具体实现即可:难道我们也不能像consul/zookeeper那样使用分布式kv存储吗?
具体实现
接口接口目前有两个具体实现类,对应etcd v2和etcd v3都有。 etcd API 版本
// kubernetes/vendor/k8s.io/apiserver/pkg/storage/etcd/etcd_helper.go type etcdHelper struct { ...}// kubernetes/vendor/k8s.io/apiserver /pkg/storage/etcd3/store.gotype store struct { ...}
这两个实现类的名称有很大不同。 。 。 go语言使用非侵入式接口,因此从类(结构体)名称中并不能明显看出这两者与storage.Interface有远程关系,但是只要使用storage.Interface接口上声明的方法就可以。他们实现了``is -a'' storage.Interface
Create
factory包的``Factory Method''创建相应的存储接口。 Config
func Create(c storagebackend.Config) (storage.Interface, DestroyFunc, error) { swtich c.Type { case storagebackend.StorageTypeETCD2: return newETCD2Storage(c) case storagebackend.StorageTypeUnset,storageback.StorageTypeETCD3:返回newETCD3Storage(c)。 默认值:nil,nil,返回fmt.Errorf("未知存储类型:%s",c.Type)。 }}
使用
storage.Interface用于实现Store类(?)上使用的rest.StandardStorage(RESTful Add,Delete,Modify,Query)接口
// kubernetes/vendor/k8s.io/ apiserver/pkg/registry /generic/registry/store.gotype Store struct { ... Storage storage.Interface}// 创建为 objectfunc (e * Store ) Create(ctx genericapirequest.Context , obj runtime.Object , includeUninitialized bool)(runtime.Object, error) { ... key, err := e.KeyFunc(ctx , name) ... out := e.NewFunc( ) if err := e.Storage.Create(ctx , key, obj, out, ttl); err != nil { ... } ...}
概述
本文介绍 kube- API服务器访问etcd后端的存储相关类(结构)和方法,以及使用的设计模式和架构例程。
评论前必须登录!
注册