K8S中代码生成器
deepcopy-gen
用于为资源定义生成deepcopy函数,生成的文件为zz_generated.deepcopy.go
defaulter-gen
用于为资源生成Defaulter相关函数,并为其生成RegisterDefaults注册函数
conversion-gen
用于为资源生成convert相关函数
openapi-gen
自动生成OpenAPI定义文件
go-bindata
用于将静态资源生成go文件,比如html静态资源
资源类型注册
代码在pkg/api/legacyscheme/scheme.go
Scheme = runtime.NewScheme()
Codecs = serializer.NewCodecFactory(Scheme)
ParameterCodec = runtime.NewParameterCodec(Scheme)
scheme用于资源的注册,资源注册中心
codec用于资源的编解码
资源注册表scheme
scheme的主要代码逻辑在staging/src/k8s.io/apimachinery/pkg/runtime/scheme.go
func NewScheme() *Scheme {
s := &Scheme{
gvkToType: map[schema.GroupVersionKind]reflect.Type{},
typeToGVK: map[reflect.Type][]schema.GroupVersionKind{},
unversionedTypes: map[reflect.Type]schema.GroupVersionKind{},
unversionedKinds: map[string]reflect.Type{},
fieldLabelConversionFuncs: map[schema.GroupVersionKind]FieldLabelConversionFunc{},
defaulterFuncs: map[reflect.Type]func(interface{}){},
versionPriority: map[string][]string{},
schemeName: naming.GetNameFromCallsite(internalPackages...),
}
s.converter = conversion.NewConverter(s.nameFunc)
// Enable couple default conversions by default.
utilruntime.Must(RegisterEmbeddedConversions(s))
utilruntime.Must(RegisterStringConversions(s))
return s
}
codec编解码器
代码在staging/src/k8s.io/apimachinery/pkg/runtime/serializer/codec_factory.go
k8s目前支持3中编解码器 (json编解码器,yaml编解码器,protobuf编解码器)
func NewCodecFactory(scheme *runtime.Scheme, mutators ...CodecFactoryOptionsMutator) CodecFactory {
options := CodecFactoryOptions{Pretty: true}
for _, fn := range mutators {
fn(&options)
}
serializers := newSerializersForScheme(scheme, json.DefaultMetaFactory, options)
return newCodecFactory(scheme, serializers)
}
pretty参数用来区分,是否是human-readable的json格式,被注册在了json编解码器中
ParameterCodec
官方注释
ParameterCodec handles versioning of objects that are converted to query parameters.
处理转化为查询参数的对象的版本控制?
不太清楚实际作用???
type ParameterCodec interface {
// DecodeParameters takes the given url.Values in the specified group version and decodes them
// into the provided object, or returns an error.
DecodeParameters(parameters url.Values, from schema.GroupVersion, into Object) error
// EncodeParameters encodes the provided object as query parameters or returns an error.
EncodeParameters(obj Object, to schema.GroupVersion) (url.Values, error)
}
DecodeParameters将url.values中的参数按照schema.GroupVersion进行解码
EncodeParameters将obj按照schema.GroupVersion进行编码
一些不太清楚的概念
unversionedType
无版本资源类型,主要用于某些没有版本的资源类型,该类型的资源对象并不需要进行转换。