千家信息网

构建API Server的详细步骤

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