云原生|k8s api-server代码了解

2023-03-18 17:18:13 浏览数 (1)

代码语言:javascript复制
func main() {
  command := app.NewAPIServerCommand()
  code := cli.Run(command)
  os.Exit(code)
}
代码语言:javascript复制
func Run(completeOptions completedServerRunOptions, stopCh <-chan struct{}) error {
  // To help debugging, immediately log version
  klog.Infof("Version: % v", version.Get())

  klog.InfoS("Golang settings", "GOGC", os.Getenv("GOGC"), "GOMAXPROCS", os.Getenv("GOMAXPROCS"), "GOTRACEBACK", os.Getenv("GOTRACEBACK"))

  server, err := CreateServerChain(completeOptions)
  if err != nil {
    return err
  }

  prepared, err := server.PrepareRun()
  if err != nil {
    return err
  }

  return prepared.Run(stopCh)
}

/Users/heidsoft/go/src/k8s.io/kubernetes/cmd/kube-apiserver/app/server.go

代码语言:javascript复制
// CreateServerChain creates the apiservers connected via delegation.
func CreateServerChain(completedOptions completedServerRunOptions) (*aggregatorapiserver.APIAggregator, error) {
  kubeAPIServerConfig, serviceResolver, pluginInitializer, err := CreateKubeAPIServerConfig(completedOptions)
  if err != nil {
    return nil, err
  }

  // If additional API servers are added, they should be gated.
  apiExtensionsConfig, err := createAPIExtensionsConfig(*kubeAPIServerConfig.GenericConfig, kubeAPIServerConfig.ExtraConfig.VersionedInformers, pluginInitializer, completedOptions.ServerRunOptions, completedOptions.MasterCount,
    serviceResolver, webhook.NewDefaultAuthenticationInfoResolverWrapper(kubeAPIServerConfig.ExtraConfig.ProxyTransport, kubeAPIServerConfig.GenericConfig.EgressSelector, kubeAPIServerConfig.GenericConfig.LoopbackClientConfig, kubeAPIServerConfig.GenericConfig.TracerProvider))
  if err != nil {
    return nil, err
  }

  notFoundHandler := notfoundhandler.New(kubeAPIServerConfig.GenericConfig.Serializer, genericapifilters.NoMuxAndDiscoveryIncompleteKey)
  apiExtensionsServer, err := createAPIExtensionsServer(apiExtensionsConfig, genericapiserver.NewEmptyDelegateWithCustomHandler(notFoundHandler))
  if err != nil {
    return nil, err
  }

  kubeAPIServer, err := CreateKubeAPIServer(kubeAPIServerConfig, apiExtensionsServer.GenericAPIServer)
  if err != nil {
    return nil, err
  }

  // aggregator comes last in the chain
  aggregatorConfig, err := createAggregatorConfig(*kubeAPIServerConfig.GenericConfig, completedOptions.ServerRunOptions, kubeAPIServerConfig.ExtraConfig.VersionedInformers, serviceResolver, kubeAPIServerConfig.ExtraConfig.ProxyTransport, pluginInitializer)
  if err != nil {
    return nil, err
  }
  aggregatorServer, err := createAggregatorServer(aggregatorConfig, kubeAPIServer.GenericAPIServer, apiExtensionsServer.Informers)
  if err != nil {
    // we don't need special handling for innerStopCh because the aggregator server doesn't create any go routines
    return nil, err
  }

  return aggregatorServer, nil
}

0 人点赞