1 kubernetes的资源注册表
kube-apiserver组件启动后的第一件事情是将Kubernetes所支持的资源注册到Scheme资源注册表中,这样后面启动的逻辑才能够从Scheme资源注册表中拿到资源信息并启动和运行API服务。
kube-apiserver资源注册分为两步:第1步,初始化Scheme资源注册表;第2步,注册Kubernetes所支持的资源。
资源的注册过程并不是通过函数调用触发的,而是通过Go语言的导入(import)和初始化(init)机制触发的。
-
- KubeAPIServer代码路径(cmd/kube-apiserver/app/server.go),kube-apiserver导入了legacyscheme和master包;
- legacysheme包下面,定义了全局变量 Scheme, 这样就可以通过legacysheme.Scheme的方式进行全局调用;
- kube-apiserver启动时导入了master包,master包中的import_known_versions.go文件调用了Kubernetes资源下的install包,通过导入包的机制触发初始化函数。
- core.AddToScheme函数注册了core资源组内部版本的资源,v1.AddToScheme函数注册了core资源组外部版本的资源,scheme.SetVersionPriority函数注册了资源组的版本顺序。如果有多个资源版本,排在最前面的为资源首选版本。
2 待注册资源的代码路径
打开 kubernetes 指定版本源码,根据下述路径可得,待注册的GVR列表信息
路径 |
描述 |
---|---|
kubernetes/pkg/apis/ | k8s 待注册的资源组 |
kubernetes/pkg/apis/apps/install/install.go | k8s 待注册的资源版本 |
kubernetes/pkg/apis/apps/register. |