K8s-核心数据结构-scheme资源注册表

所有的K8s资源类型都会注册到Scheme资源注册表中,有如下的特点:

  1. 支持多种资源类型,包括内部版本和外部版本
  2. 支持多种版本转换机制
  3. 支持不同资源的的序列化/反序列化

Scheme资源注册支持俩种类型,分别是UnversionedTypeKnowType资源类型。

  • UnversionedType:无版本资源类型,这类资源对象不需要进行转换。目前比少
  • KnowType:目前K8s最常用资源类型,UnversionedType通过scheme.AddUnversionedTypes方法进行注册,Knowtype通过scheme.AddKnowType 进行注册

Scheme资源注册表结构字段说明如下:

  • gvToType:存储GVK与Type的映射关系

  • typeToGVK:存储typeGVK的映射关系,一个Type会对应一个或多个GVK

  • unversionedTypes:存储UnversionedTypeGVK的映射关系

  • unversionedKind:存储kind名称和UnversionedType的映射关系

Scheme资源注册通过Go的map结构实现映射关系,这些映射关系可以实现高效的正向和反向的检索

注册方法

  • scheme.AddUnversionedTypes:注册UnversionedTypes资源类型
  • scheme.AddKnowTypes:注册KnownType资源类型
  • scheme.AddKnownTypeWithName:注册KnownType资源类型

查询方法

  • scheme.KnowType:查询注册表中的GV下的资源类型
  • scheme.AllKnowTypes:查询注册表所有的GVK下的资源类型
  • scheme.ObjectKinds:查询资源对象中所对应的GVK,一个资源对象可能存在多个GVK
  • scheme.New:查询GVK所对应的资源对象
  • scheme.IsGroupRegisted:判断指定的资源组是否已经注册
  • scheme.IsVersionRegisted:判断指定GV是否已经注册
  • scheme.Recognizes:判断指定GVK是否已经注册
  • scheme.IsUnversioned:判断指定资源对象是否属于UnversionedType类型