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 存储资源到资源实体的对应关系。 ...

2023-11-04 · xhy

Kubernetes:kube-apiserver 之启动流程(一)

前言 前面两篇文章 Kubernetes:kube-apiserver 之 scheme(一) 和 Kubernetes:kube-apiserver 之 scheme(二) 重点介绍了 kube-apiserver 中的资源注册表 scheme。这里进入正题,开始介绍 kube-apiserver 的核心实现。 kube-apiserver 启动流程 kube-apiserver 使用 Cobra 作为 CLI 框架,其初始化示意图如下。 ...

2023-10-25 · xhy

Kubernetes:kube-apiserver 之 scheme(二)

接 Kubernetes:kube-apiserver 之 scheme(一)。 资源 convert 上篇说到资源版本之间通过内部版本 __internal 进行资源转换。这里进一步扩展介绍资源转换内容,以加深理解。 同样以例子开始,通过 kubectl 将 apps/v1beta1/Deployment 转换为 apps/v1/Deployment。 ...

2023-10-19 · xhy

Kubernetes:kube-apiserver 之 scheme(一)

前言 在进入 kube-apiserver 源码分析前,有一个非常重要的概念需要了解甚至熟悉的:资源注册表(scheme)。 Kubernetes 中一切皆资源,管理的是资源,创建、更新、删除的是资源。如何对庞杂的资源进行管理就成了一件大事。Kubernetes 通过引入 scheme 资源注册表,将资源信息注册到资源注册表,各个组件通过索引资源注册表实现资源的管理。 ...

2023-10-17 · xhy