千家信息网

构建API Server的详细步骤

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,本篇内容介绍了"构建API Server的详细步骤"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!AP
千家信息网最后更新 2026年11月03日构建API Server的详细步骤

本篇内容介绍了"构建API Server的详细步骤"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

API Server利用GenericAPIServer框架依次创建了api_extension_server\api_server\aggregator_server来处理所有请求,server构建的核心逻辑如下:

func CreateServerChain(runOptions *options.ServerRunOptions, stopCh <-chan struct{}) (*genericapiserver.GenericAPIServer, error) {

// api server的config结构

kubeAPIServerConfig, sharedInformers, versionedInformers, insecureServingOptions, serviceResolver, err := CreateKubeAPIServerConfig(runOptions, nodeTunneler, proxyTransport)

if err != nil {

return nil, err

}

// extension server的config结构

apiExtensionsConfig, err := createAPIExtensionsConfig(*kubeAPIServerConfig.GenericConfig, versionedInformers, runOptions)

if err != nil {

return nil, err

}

// 1. 创建api extensions server

apiExtensionsServer, err := createAPIExtensionsServer(apiExtensionsConfig, genericapiserver.EmptyDelegate)

if err != nil {

return nil, err

}

// 2. 创建api server,delegate到extensions server上(注意,第二个参数)

kubeAPIServer, err := CreateKubeAPIServer(kubeAPIServerConfig, apiExtensionsServer.GenericAPIServer, sharedInformers, versionedInformers)

if err != nil {

return nil, err

}

.....

// otherwise go down the normal path of standing the aggregator up in front of the API server

// this wires up openapi

kubeAPIServer.GenericAPIServer.PrepareRun()

// This will wire up openapi for extension api server

apiExtensionsServer.GenericAPIServer.PrepareRun()

....

// 3. 创建aggregator server, delegate到api server上

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.GenericAPIServer, nil

}

当中,三个server创建的过程大体类似。以下是API Server创建方法CreateKubeAPIServer的核心逻辑:

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

}

经过以上几个步骤,API Server就完成了所有资源的install,可以开始监听并响应请求。

"构建API Server的详细步骤"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!

步骤 内容 方法 更多 核心 知识 结构 资源 过程 逻辑 实用 学有所成 接下来 三个 参数 困境 实际 对象 情况 接口 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网科技有限公司 新华互联网科技学院 互联网与科技金融数据 互联网金融 科技金融 百单互联网科技有限公司 赫美联合互联网科技 万达互联网科技 玖二柒互联网科技公司待遇 北京三清互联网科技 宁夏科技产业互联网案例 崇明区互联网教育科技售后服务 迪庆互联网科技招生 恒生互联网科技业指数调整周期 上海科技产业互联网平台 广州互联网高科技取餐柜 广州燕处互联网科技有限公司 互联网科技手抄报图片 同城互联网络科技 互联网科技博主张洲 平安好医生打造互联网科技医疗 互联网科技行业发展 科技互联网项目 互联网科技公司介绍 广西拼得多互联网科技有限公司 河南猎农互联网科技有限公司 赶超互联网科技 微信多开 南通创西澳互联网科技有限公司 科技信息时代互联网发展 盐城市攀科互联网科技有限公司 北京瑞云互联网科技有限公司
0