" nodes/status " : nodeStorage.Status

时间:2021-11-09 08:58:33

Openshift API包罗了两部分,一部分是Kubernetes v1 REST API,另一部分是OpenShift v1 REST API,这些RESTful API都是通过HTTP(s)来访谒OpenShift Container Platform的master处事器来挪用的。这些API可用于打点终端用户的应用措施,集群和集群用户。

Openshift里面Kubernetes api的前缀是 /api,而OpenShift 本身开发了一些api,它们的前缀是 /oapi,kubernetes原生api已有的成果Openshift并没有从头写接口而是直接用的kubernetes的原生apii,只不过开发了一些kubernetes原先没有的成果和api接口。

源码分析

github地点:https://github.com/openshift/origin(此文中代码对应1.3版本)

sourcegraph网站地点:https://sourcegraph.com/github.com/openshift/[email protected]/-/blob/cmd/openshift/openshift.go

代码入口

--》openshift/origin/cmd/openshift/openshift.go

openshift.go里面的main要领有启动处事逻辑,通过挪用CommandFor获取哪些启动命令需要执行。

" nodes/status " : nodeStorage.Status

CommandFor要领里面按照传入的basename参数来决定获取哪些命令,默认是挪用NewCommandOpenShift要领获取所有命令

" nodes/status " : nodeStorage.Status

NewCommandOpenShift要领先创建一个Command布局root,然后往root里面添加命令。逻辑里会首先挪用NewCommandStartAllInOne要领获取一些主要命令集。

" nodes/status " : nodeStorage.Status

--》openshift/origin/pkg/cmd/server/start/start_allinone.go

NewCommandStartAllInOne要领里面添加命令的主要逻辑如下:

" nodes/status " : nodeStorage.Status

此处会拿到master,node等等的启动命令,还有kubernetes相关处事组件的启动。

1).这里我先从获取kubernetes相关命令的要领开始看

--》openshift/origin/pkg/cmd/server/start/kubernetes/kubernetes.go 

NewCommand要领里面主要逻辑如下:

" nodes/status " : nodeStorage.Status

这里包罗了好几部分kubernetes组件的启动命令,我们主要存眷api部分,因此是NewAPIServerCommand要领

--》openshift/origin/pkg/cmd/server/start/kubernetes/apiserver.go

这后面的逻辑跟kubernetes源码里面api这部分的逻辑大抵不异,,先按照默认参数新建一个APIServer

然后通过server.go里面的run要领启动指定的APIServer

--》openshift/origin/vendor/k8s.io/kubernetes/cmd/kube-apiserver/app/server.go 

run要领里面启动api server的主要逻辑如下,先按照配置新建一个server然后启动

" nodes/status " : nodeStorage.Status

--》openshift/origin/vendor/k8s.io/kubernetes/pkg/master/master.go

master里面的new要领先按照配置信息返回一个api server的实例,然后挪用InstallAPIs要领初始化所有的api

InstallAPIs要领里面会按照条件来创建好几个apiGroupsInfo布局并将它们添加到一个apiGroupsInfo组中间去,这些差此外apiGroupsInfo对应差此外版本信息,例如v1,v1beta1等等。添加到数组中去好了之后会挪用InstallAPIGroups要领来安置所有的apiGroupsInfo中的api。这里我们拿v1这个group来看,逻辑里面会先挪用initV1ResourcesStorage要领来初始化v1这个group的所有storage,例如podStorage,nodeStorage

" nodes/status " : nodeStorage.Status

新建好这些storage之后会将它们配置到一个map中去,此map即相当于一个配置文件去打点要用到哪些storage以及对应的路径path,这些即决定了后面会供给哪些api