前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >K8s源码分析(16)-资源的API数据结构

K8s源码分析(16)-资源的API数据结构

作者头像
TA码字
发布2022-02-25 09:33:02
5160
发布2022-02-25 09:33:02
举报
文章被收录于专栏:TA码字TA码字

上一篇文章里,我们主要介绍了 kubernetes 中资源服务类接口的实现,包括操作策略类接口以及其它的类型的具体实现。但是不论如何, 在 kubernetes 定义中所有的组以及组内各个版本的资源都是通过 REST API 来向外暴露提供操作的,在本篇文章中我们主要介绍 kubernetes 资源 API 的数据结构。

从 kubernetes 相关资源 API 的数据结构角度上看,主要包括三个结构体, APIGroupInfo 结构体, APIGroupVersion 结构体,APIInstaller 结构体,下面我们逐一对其介绍。

APIGroupInfo结构体

对于 APIGroupInfo 结构体,其主要定义了具体某一个资源组 API 的相关信息,例如常见的 apps 和 core 资源组,其图解和源码如下:

代码语言:javascript
复制
//  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,
  }
}
  • 结构体中包含 PrioritizedVersions 属性代表某一组下资源所有的版本。
  • 包含了 VersionedResourcesStorageMap 属性来 map 该组下某一个具体版本对应的资源操作实例,key 为具体的版本的名称,例如 v1/v1beta1 等版本。value 则为另外一个 map ,在此 map 中 key 为该版本里某一个具体的资源的名称,例如常见资源 depployment/demonset 等,value 则为在以前文章中我们介绍的资源操作接口 rest.Storage 类型。
  • 结构体中有以前文章中介绍的 Scheme 属性,来 hold 各种资源注册在其中。
  • 在该结构体中定义有以前文章中我们介绍的 NegotiatedSerializer 接口类型属性来辅助完成资源的序列化和反序列化。

APIGroupVersion结构体

对于 APIGroupVersion 结构体,其主要定义了某一个资源组下的某一个具体版本 API 的相关信息,例如我们常见的 apps 资源组下的 v1 版本,其图解和相关源码如下:

代码语言:javascript
复制
//  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
}
  • 该结构体有属性 GroupVersion 来代表是哪个资源组的哪个版本,例如 apps/v1, apps/v1beta1 等版本。
  • 该结构体有属性 Storage 来 map 此版本下各个资源对应的操作类,key 为某一个具体的资源的实际名称,例如常见资源 depployment/demonset 等等,value 则为以前文章中我们介绍的资源操作接口 rest.Storage 类型。
  • 结构体有属性 Root 代表 API 的根路径。
  • 结构体中有 Serializer 属性来辅助完成资源的序列化和反序列化操作。
  • 结构体有 Typer 属性辅助识别资源类型。
  • 结构体有 Creater 属性辅助实例化资源。
  • 结构体中有 Defaulter 属性来辅助资源默认值的初始化。
  • 结构体中有 Convertor 属性来辅助完成资源的不同版本的转化。

APIInstaller结构体

对于 APIInstaller 结构体,主要用来辅助完成资源到 REST API 的注册,其图解和源码如下:

代码语言:javascript
复制
//  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
}
  • 该结构体有上面介绍的 APIGroupVersion 指针类型的属性 group,其代表将要对某个组下的某个版本的所有资源注册相关的 REST API。
  • 结构体有 prefix 属性代表 API 的前缀。
  • 该结构体中包含 minRequestTimeout 属性来代表 API 的请求最小时间。

目前先我们写到这里,在下一篇文章中我们继续来介绍 kubernetes 资源 API 结构体的创建。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-02-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 TA码字 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档