上一篇文章中,我们主要介绍了 kubernetes 资源的数据访问层, 包括接口以及相关的 etcd3 数据访问层实现,支持 dry run 的数据访问层实现。在本篇文章里, 我们主要来介绍资源的服务层接口。
在数据服务层的设计上,也是秉承接口和实现的原则,定义接口功能,由相关的具体实现类来实现功能。kubernetes 在服务层上定义分为两大类,一类是增删改查类接口,定义增删改查 watch 等操作。另一类是操作的策略类型接口,用来定义资源在增删改查等不同操作中的逻辑。
对于增删改查类接口定义,图解和源码如下:
// staging/src/k8s.io/apiserver/pkg/registry/rest/rest.go
type Storage interface {
New() runtime.Object
}
type Scoper interface {
NamespaceScoped() bool
}
type Getter interface {
Get(ctx context.Context, name string, options *metav1.GetOptions) (runtime.Object, error)
}
type Lister interface {
NewList() runtime.Object
List(ctx context.Context, options *metainternalversion.ListOptions) (runtime.Object, error)
TableConvertor
}
type Watcher interface {
Watch(ctx context.Context, options *metainternalversion.ListOptions) (watch.Interface, error)
}
type Creater interface {
New() runtime.Object
Create(ctx context.Context, obj runtime.Object, createValidation ValidateObjectFunc, options *metav1.CreateOptions) (runtime.Object, error)
}
type Updater interface {
New() runtime.Object
Update(ctx context.Context, name string, objInfo UpdatedObjectInfo, createValidation ValidateObjectFunc, updateValidation ValidateObjectUpdateFunc, forceAllowCreate bool, options *metav1.UpdateOptions) (runtime.Object, bool, error)
}
type CreaterUpdater interface {
Creater
Update(ctx context.Context, name string, objInfo UpdatedObjectInfo, createValidation ValidateObjectFunc, updateValidation ValidateObjectUpdateFunc, forceAllowCreate bool, options *metav1.UpdateOptions) (runtime.Object, bool, error)
}
type GracefulDeleter interface {
Delete(ctx context.Context, name string, deleteValidation ValidateObjectFunc, options *metav1.DeleteOptions) (runtime.Object, bool, error)
}
type CollectionDeleter interface {
DeleteCollection(ctx context.Context, deleteValidation ValidateObjectFunc, options *metav1.DeleteOptions, listOptions *metainternalversion.ListOptions) (runtime.Object, error)
}
type StandardStorage interface {
Getter
Lister
CreaterUpdater
GracefulDeleter
CollectionDeleter
Watcher
}
对于操作类策略接口定义,图解和源码如下:
// k8s.io/apiserver/pkg/registry/rest/create.go
type RESTCreateStrategy interface {
runtime.ObjectTyper
names.NameGenerator
NamespaceScoped() bool
PrepareForCreate(ctx context.Context, obj runtime.Object)
Validate(ctx context.Context, obj runtime.Object) field.ErrorList
Canonicalize(obj runtime.Object)
}
// k8s.io/apiserver/pkg/registry/rest/update.go
type RESTUpdateStrategy interface {
runtime.ObjectTyper
NamespaceScoped() bool
AllowCreateOnUpdate() bool
PrepareForUpdate(ctx context.Context, obj, old runtime.Object)
ValidateUpdate(ctx context.Context, obj, old runtime.Object) field.ErrorList
Canonicalize(obj runtime.Object)
AllowUnconditionalUpdate() bool
}
// k8s.io/apiserver/pkg/registry/rest/create_update.go
type RESTCreateUpdateStrategy interface {
RESTCreateStrategy
AllowCreateOnUpdate() bool
PrepareForUpdate(ctx context.Context, obj, old runtime.Object)
ValidateUpdate(ctx context.Context, obj, old runtime.Object) field.ErrorList
AllowUnconditionalUpdate() bool
}
// k8s.io/apiserver/pkg/registry/rest/delete.go
type RESTDeleteStrategy interface {
runtime.ObjectTyper
}
目前先我们写到这里,在下一篇文章中我们继续来介绍资源数据服务层接口的实现。