api-server 源码学习

这篇博客深入探讨了Kubernetes API Server的实现细节,从main函数开始,逐步解析资源创建的流程。涉及apiserver的handler.go、go-restful库、RESTStorage接口、GenericAPIServer、InstallAPIGroup等多个关键组件。文章还介绍了如何通过不同的函数和接口注册API资源,包括apiserver内部的路由设置和存储操作,如CreateHandler、Store的Create函数,以及etcd的存储操作。此外,还涵盖了核心资源如namespace、pod以及apps资源如deployment的实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

apiserver实现

server的实现

  1. 在apiserver/pkg/server/handler.go里的direct实现

  2. 使用go-restfule实现路由功能

  3. 所有的都是NewRESTStorage

资源创建,从main函数开始,到db层

  1. kube-apiserver/apiserver.go里的main函数

  2. kube-apiserver/app/server.go里的

    • NewAPIServerCommand函数
    • Run函数
    • CreateServerChain函数
      • createAPIExtensionsServer函数
        • apiextensions-apiserver/pkg/apiserver/apiserver.go的Config里的New函数
          • apiverver/pkg/server.genericapiserver.go里的GenericAPIServer里的InstallAPIGroup
      • CreateKubeAPIServer函数
        • kubernetes/pkg/controlplane/instance.go的completedConfig的New函数
          • kubernetes/pkg/controlplane/instance.go的Instance的InstallLegacyAPI函数
            • GenericAPIServer的InstallLegacyAPIGroup
          • kubernetes/pkg/controlplane/instance.go的Instance的InstallAPIs
            • GenericAPIServer的InstallAPIGroups
      • createAggregatorServer函数
        • kubernetes/pkg/controlplane/instance.go的completedConfig的NewSWithDelegate(Delegate代表)函数
          • GenericAPIServer的InstallAPIGroup
  3. apiverver/pkg/server.genericapiserver.go里的GenericAPIServer里的

    • 注册api的两种方式
      • InstallAPIGroup
        • InstallAPIGroups
      • InstallLegacyAPIGroup
    • installAPIResources函数
  4. apiverver/pkg/endpoints/groupversion里的APIGroupVersion里的InstallRest

  5. apiverver/pkg/endpoints/installer.go里的

    • APIInstaller

      • Install函数
      • registerResourceHandlers函数
    • restfulCreateNamedResource、restfulCreateResource

  6. apiserver/pkg/endpoints/handler的CreateNamedResource和CreateResource函数

  7. apiserver/pkg/endpoints/handlers/create.go里的createHandler

  8. apiserver/pkg/endpoints/handlers/create.go里的namedCreaterAdapter里的Create函数

  9. apiserver/pkg/registry/generic/registry/store.go里的Store的Create函数

  10. apiserver/pkg/registry/rest/create.go的BeforeCreate,函数里面调用各种资源实现的RESTCreateStrategy接口

  11. apiserver/pkg/registry/generic/registry/dryrun.go里的DryRunnableStrorage的Create函数

  12. apiserver/pkg/storage/cache/cacher.go里的Cache里的Create函数

  13. apiserver/pkg/storage/etcd3/store.go的store的Create函数

  14. etcd里

  15. 目录介绍

  16. Kubernetes/pkg/registry里面实现各种资源的实际实现,整体实现为具体资源目录、rest目录,rest用作资源集成,资源目录,一般包含strategy文件和storage目录,strategy实现资源操作的接口,storage实现k8s.io/apiserver/pkg/registry/rest/rest.go的Storage接口的实现,即一个New资源,一个对资源的操作

    • adminssionregistration: 动态准入控制
      • mutatingwebhookconfiguration:对应的资源是ValidatingWebhookConfiguration,介绍,变更钩子
      • validatingwebhookconfiguration:ValidatingWebhookConfiguration验证钩子
      • rest
    • app:应用相关的,包含deployment、replicaset、statefulset、daemonset,具体资源包含strategy和storage两部分,strategy即RESTCreateStrategy、RESTCreateStrategy、RESTDeleteStrategy、ResetFieldsStrategy等接口的具体实现
      • controllerrevision:ControllerRevision实现不变状态数据的snapshot
      • daemonset
      • deployment
      • replicaset
      • statefulset
      • rest:进行apps资源的集成,包含上面的5种,定义了StorageProvider,并实现了RESTStorageProvider
    • apiserverinternal
      • StorageVersion
    • authentication:认证
      • TokenReview验证token
    • authorization: 授权
      • LocalSubjectAccessReview:检查一个用户或者组是否有权限在给定的namespace下
      • SelfSubjectAccessReview:检查当前用户是否有权限
      • subjectaccessreview:Autorizer: 认证结果
      • rest
    • autoscaling: 弹性伸缩
      • horizontalpodautoscaler:水平pod弹性伸缩
      • rest
    • batch
      • cronjob:定期任务
      • job:任务
      • rest
    • certificates
      • certificates证书,CertificateSigningRequest 证书签名请求
      • rest
    • coordination:协作
      • lease:租约
      • rest
    • core:核心资源
      • componentstatus:组件状态,在1.19+被废弃
      • configmap
      • endpoint
      • event
      • LimitRange:资源限制
      • namespace
      • node
      • persistentvolume
      • persistentvolumeclaim
      • pod
      • podtemplate
      • replicationcontroller‘
      • resourcequota
      • secret
      • service
      • serviceaccout
      • rest:调用各个资源下面的rest,集成所有的资源
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值