KubeAPIServer create resource的Decode流程
kubernetes在create resource时,首先通过kube-apiserver的authenticate和authorization等chain进行过滤,通过所有filter后,再由kube-apiserver dispatch到Handler进行处理。这里我们举例create namespace scoped resource进行分析。
1. decoder对象追溯
概括来讲,decoder对象时通过handlers.RequestScope.Serializer构造而来,handlers.RequestScope是从APIInstaller对象的group数据进行构造,APIInstaller的goup即为APIGroupVersion,且APIGroupVersion是使用APIGroupInfo对象中的数据进行构造。
对于APIGroupInfo,APIGroupVersion和APIInstaller对象构造流程如下。
对于handlers.RequestScope对象相关信息构造如下。
RequestScope.Serializer.DecoderToVersion.Decode调用即为decoder.Decode调用,从RequestScope.Serializer.DecoderToVersion.Decode调用的流程了解到主要用到了codec.decoder,codec.defaulter和codec.convertor,那么这3个对象是什么呢,如何构造的呢?流程如下:
2. decoder.Decode调用
这里我们看看decoder.Decode中的codec.convertor的流程。
3. 总结
这一部分的工作便是Decode流程,在Decode流程处理完成后,KubeAPIServer将进行Admission准入控制。最后再将resource写入etcd进行保存。