KubeAPIServer create resource的Decode流程

kubernetes在create resource时,首先通过kube-apiserver的authenticate和authorization等chain进行过滤,通过所有filter后,再由kube-apiserver dispatch到Handler进行处理。这里我们举例create namespace scoped resource进行分析。

KubeAPIServer create resource的Decode流程

1. decoder对象追溯

概括来讲,decoder对象时通过handlers.RequestScope.Serializer构造而来,handlers.RequestScope是从APIInstaller对象的group数据进行构造,APIInstaller的goup即为APIGroupVersion,且APIGroupVersion是使用APIGroupInfo对象中的数据进行构造。

对于APIGroupInfo,APIGroupVersion和APIInstaller对象构造流程如下。

KubeAPIServer create resource的Decode流程KubeAPIServer create resource的Decode流程KubeAPIServer create resource的Decode流程

对于handlers.RequestScope对象相关信息构造如下。

KubeAPIServer create resource的Decode流程KubeAPIServer create resource的Decode流程KubeAPIServer create resource的Decode流程

RequestScope.Serializer.DecoderToVersion.Decode调用即为decoder.Decode调用,从RequestScope.Serializer.DecoderToVersion.Decode调用的流程了解到主要用到了codec.decoder,codec.defaulter和codec.convertor,那么这3个对象是什么呢,如何构造的呢?流程如下:

KubeAPIServer create resource的Decode流程KubeAPIServer create resource的Decode流程KubeAPIServer create resource的Decode流程

2. decoder.Decode调用

这里我们看看decoder.Decode中的codec.convertor的流程。

KubeAPIServer create resource的Decode流程KubeAPIServer create resource的Decode流程

3. 总结

这一部分的工作便是Decode流程,在Decode流程处理完成后,KubeAPIServer将进行Admission准入控制。最后再将resource写入etcd进行保存。