Kubernetes:kube-apiserver 之启动流程(二)
接着 Kubernetes:kube-apiserver 之启动流程(一) 加以介绍。 创建 APIExtensions Server 创建完通用 APIServer 后继续创建 APIExtensions Server。 1func (c completedConfig) New(delegationTarget genericapiserver.DelegationTarget) (*CustomResourceDefinitions, error) { 2 genericServer, err := c.GenericConfig.New("apiextensions-apiserver", delegationTarget) 3 4 s := &CustomResourceDefinitions{ 5 GenericAPIServer: genericServer, 6 } 7 8 // 存储建立 REST API 到资源实体的信息 9 apiGroupInfo := genericapiserver.NewDefaultAPIGroupInfo(apiextensions.GroupName, Scheme, metav1.ParameterCodec, Codecs) 10 11 // 资源实体 12 storage := map[string]rest.Storage{} 13 14 // customresourcedefinitions 15 if resource := "customresourcedefinitions"; apiResourceConfig.ResourceEnabled(v1.SchemeGroupVersion.WithResource(resource)) { 16 // 创建资源实体 17 customResourceDefinitionStorage, err := customresourcedefinition.NewREST(Scheme, c.GenericConfig.RESTOptionsGetter) 18 if err != nil { 19 return nil, err 20 } 21 storage[resource] = customResourceDefinitionStorage 22 storage[resource+"/status"] = customresourcedefinition.NewStatusREST(Scheme, customResourceDefinitionStorage) 23 } 24 if len(storage) > 0 { 25 apiGroupInfo.VersionedResourcesStorageMap[v1.SchemeGroupVersion.Version] = storage 26 } 27 28 if err := s.GenericAPIServer.InstallAPIGroup(&apiGroupInfo); err != nil { 29 return nil, err 30 } APIGroupInfo 对象用于描述资源组信息,storage 存储资源到资源实体的对应关系。 ...