目录结构
- kubernetes/cmd/kube-apiserver/ 入口文件
- server.go 启动文件,和创建master server
- aggregator.go 创建了聚合服务器
- apiextensions.go 创建了扩展api 服务器
- optoons 启动选项构建文件
从上面这个目录结构可以看出。apiserver主要创建了三个服务器
服务器名字 | 代码路径 | 作用 | 创建在哪里 |
---|---|---|---|
master | /k8s.io/kubernetes/pkg/master | 主服务器 | server.go->CreateKubeAPIServer |
AggregatorServer | /k8s.io/kube-aggregator | APIService 聚合apiserver的处理 | agregator.go->createAggregatorServer |
master | /k8s.io/apiextensions-apiserver | 主CustomResourceDefinition 扩展apiserver的处理 | apiextensions.go->createAPIExtensionsServer |
以上三个服务器中都包含了一个 GenericAPIServer 通用的服务器。
GenericAPIServer 代码在 /k8s.io/apiserver/pkg/server目录下。
好了 到这里我们就知道了apiserver 涉及的主要代码目录了。
启动流程
server.go-> NewAPIServerCommand 是cobra的主命令启动函数。我们关注里面的 RunE函数
RunE: func(cmd *cobra.Command, args []string) error {
verflag.PrintAndExitIfRequested()
utilflag.PrintFlags(cmd.Flags())
completedOptions, err := Complete(s)
if err != nil {
return err
}
if errs := completedOptions.Validate(); len(errs) != 0 {
return utilerrors.NewAggregate(errs)
}
return Run(completedOptions, stopCh)
}
Complete 设置了下默认的选项。 命令行参数传进来的选项在 optiops/options.go里面的 Flags() 函数里面把参数绑定到了各个模块的options里面。 cobra. 库在执行RunE之前就解析好了。 所以 Complete 是处理命令行没传入的选项的默认参数。
默认选项设置完成后, Validate 验证了下。 就开始进入Run 跑apiserver了。
Run函数是启动函数
// Run runs the specified APIServer. This should never exit.
func Run(completeOptions completedServerRunOptions, stopCh <-chan struct{}) error {
// To help debugging, immediately log version
klog.Infof("Version: %+v", version.Get())
server, err := CreateServerChain(completeOptions, stopCh)
if err != nil {
return err
}
return server.PrepareRun().Run(stopCh)
}
启动分为了两步,第一步是创建了流程链,第二部是启动。 我们从 CreateServerChain开始看。
nodeTunneler, proxyTransport, err := CreateNodeDialer(completedOptions)
kubeAPIServerConfig, insecureServingInfo, serviceResolver, pluginInitializer, admissionPostStartHook, err := CreateKubeAPIServerConfig(completedOptions, nodeTunneler, proxyTransport)
apiExtensionsConfig, err := createAPIExtensionsConfig(*kubeAPIServerConfig.GenericConfig, kubeAPIServerConfig.ExtraConfig.VersionedInformers, pluginInitializer, completedOptions.ServerRunOptions, completedOptions.MasterCount,
serviceResolver, webhook.NewDefaultAuthenticationInfoResolverWrapper(proxyTransport, kubeAPIServerConfig.GenericConfig.LoopbackClientConfig))
apiExtensionsServer, err := createAPIExtensionsServer(apiExtensionsConfig, genericapiserver.NewEmptyDelegate())
kubeAPIServer, err := CreateKubeAPIServer(kubeAPIServerConfig, apiExtensionsServer.GenericAPIServer, admissionPostStartHook)
kubeAPIServer.GenericAPIServer.PrepareRun()
apiExtensionsServer.GenericAPIServer.PrepareRun()
aggregatorConfig, err := createAggregatorConfig(*kubeAPIServerConfig.GenericConfig, completedOptions.ServerRunOptions, kubeAPIServerConfig.ExtraConfig.VersionedInformers, serviceResolver, proxyTransport, pluginInitializer)
aggregatorServer, err := createAggregatorServer(aggregatorConfig, kubeAPIServer.GenericAPIServer, apiExtensionsServer.Informers)
去掉错误处理的流程如上
CreateKubeAPIServerConfig 根据completedServerRunOptions选项 创建了master服务器的配置