上一篇文章里,我们主要介绍了 kubernetes 中资源服务类接口的实现,包括操作策略类接口以及其它的类型的具体实现。但是不论如何, 在 kubernetes 定义中所有的组以及组内各个版本的资源都是通过 REST API 来向外暴露提供操作的,在本篇文章中我们主要介绍 kubernetes 资源 API 的数据结构。
从 kubernetes 相关资源 API 的数据结构角度上看,主要包括三个结构体, APIGroupInfo 结构体, APIGroupVersion 结构体,APIInstaller 结构体,下面我们逐一对其介绍。
APIGroupInfo结构体
对于 APIGroupInfo 结构体,其主要定义了具体某一个资源组 API 的相关信息,例如常见的 apps 和 core 资源组,其图解和源码如下:
// k8s.io/apiserver/pkg/server/genericapiserver.go
type APIGroupInfo struct {
PrioritizedVersions []schema.GroupVersion
VersionedResourcesStorageMap map[string]map[string]rest.Storage
OptionsExternalVersion *schema.GroupVersion
MetaGroupVersion *schema.GroupVersion
Scheme *runtime.Scheme
NegotiatedSerializer runtime.NegotiatedSerializer
ParameterCodec runtime.ParameterCodec
StaticOpenAPISpec *spec.Swagger
}
func NewDefaultAPIGroupInfo(group string, scheme *runtime.Scheme, parameterCodec runtime.ParameterCodec, codecs serializer.CodecFactory) APIGroupInfo {
return APIGroupInfo{
PrioritizedVersions: scheme.PrioritizedVersionsForGroup(group),
VersionedResourcesStorageMap: map[string]map[string]rest.Storage{},
OptionsExternalVersion: &schema.GroupVersion{Version: "v1"},
Scheme: scheme,
ParameterCodec: parameterCodec,
NegotiatedSerializer: codecs,
}
}
APIGroupVersion结构体
对于 APIGroupVersion 结构体,其主要定义了某一个资源组下的某一个具体版本 API 的相关信息,例如我们常见的 apps 资源组下的 v1 版本,其图解和相关源码如下:
// k8s.io/apiserver/pkg/endpoints/groupversion.go
type APIGroupVersion struct {
Storage map[string]rest.Storage
Root string
GroupVersion schema.GroupVersion
OptionsExternalVersion *schema.GroupVersion
MetaGroupVersion *schema.GroupVersion
RootScopedKinds sets.String
Serializer runtime.NegotiatedSerializer
ParameterCodec runtime.ParameterCodec
Typer runtime.ObjectTyper
Creater runtime.ObjectCreater
Convertor runtime.ObjectConvertor
ConvertabilityChecker ConvertabilityChecker
Defaulter runtime.ObjectDefaulter
Linker runtime.SelfLinker
UnsafeConvertor runtime.ObjectConvertor
TypeConverter fieldmanager.TypeConverter
EquivalentResourceRegistry runtime.EquivalentResourceRegistry
Authorizer authorizer.Authorizer
Admit admission.Interface
MinRequestTimeout time.Duration
OpenAPIModels openapiproto.Models
MaxRequestBodyBytes int64
}
APIInstaller结构体
对于 APIInstaller 结构体,主要用来辅助完成资源到 REST API 的注册,其图解和源码如下:
// k8s.io/apiserver/pkg/endpoints/installer.go
type APIInstaller struct {
group *APIGroupVersion
prefix string // Path prefix where API resources are to be registered.
minRequestTimeout time.Duration
}
目前先我们写到这里,在下一篇文章中我们继续来介绍 kubernetes 资源 API 结构体的创建。