kube-apiserver源码分析之一启动流程

目录结构

  • 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-aggregatorAPIService 聚合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服务器的配置

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值