func CreateKubeAPIServer(kubeAPIServerConfig *master.Config, delegateAPIServer genericapiserver.DelegationTarget, sharedInformers informers.SharedInformerFactory, versionedInformers clientgoinformers.SharedInformerFactory) (*master.Master, error) { kubeAPIServer, err := kubeAPIServerConfig.Complete(versionedInformers).New(delegateAPIServer) if err != nil { return nil, err } kubeAPIServer.GenericAPIServer.AddPostStartHook( "start-kube-apiserver-informers" , func(context genericapiserver.PostStartHookContext) error { sharedInformers.Start(context.StopCh) return nil }) return kubeAPIServer, nil } // kubeAPIServerConfig.Complete(versionedInformers).New(delegateAPIServer)中的New方法如下所示: func (c completedConfig) New(delegationTarget genericapiserver.DelegationTarget) (*Master, error) { ... // 通过Config创建APIServer对应的GenericAPIServer对象 s, err := c.GenericConfig.New( "kube-apiserver" , delegationTarget) if err != nil { return nil, err } .... m := &Master{ GenericAPIServer: s, } // 将所有REST资源(Pods/Deployments)的Storage接口实现类都install到master内含的GenericAPIServer上 restStorageProviders := []RESTStorageProvider{ authenticationrest.RESTStorageProvider{Authenticator: c.GenericConfig.Authenticator}, authorizationrest.RESTStorageProvider{Authorizer: c.GenericConfig.Authorizer, RuleResolver: c.GenericConfig.RuleResolver}, autoscalingrest.RESTStorageProvider{}, batchrest.RESTStorageProvider{}, certificatesrest.RESTStorageProvider{}, extensionsrest.RESTStorageProvider{}, networkingrest.RESTStorageProvider{}, policyrest.RESTStorageProvider{}, rbacrest.RESTStorageProvider{Authorizer: c.GenericConfig.Authorizer}, schedulingrest.RESTStorageProvider{}, settingsrest.RESTStorageProvider{}, storagerest.RESTStorageProvider{}, // keep apps after extensions so legacy clients resolve the extensions versions of shared resource names. // See https://github.com/kubernetes/kubernetes/issues/42392 appsrest.RESTStorageProvider{}, admissionregistrationrest.RESTStorageProvider{}, } m.InstallAPIs(c.ExtraConfig.APIResourceConfigSource, c.GenericConfig.RESTOptionsGetter, restStorageProviders...) ... return m, nil } |