K8S源码分析: API Server

基于kubernetes 1.9版本源码

启动

入口地址在\cmd\kube-apiserver\apiserver.go\main()

函数很短,里面只有三句重要的代码

s := options.NewServerRunOptions()  //新生成一个ServerRunOptions对象
s.AddFlags(pflag.CommandLine)       //ServerRunOptions填值
......
if err := app.Run(s, stopCh); err != nil {  //生成一个API Server实例

NewServerRunOptions() 调用了\cmd\kube-apiserver\app\options\options.go\NewServerRunOptions()函数, 里面做的事件很简单, 就是初始化一个ServerRunOptions结构体, 这个是API Server中的关键结构体

type ServerRunOptions struct {
   GenericServerRunOptions *genericoptions.ServerRunOptions   // 服务器通用的运行参数
   Etcd                    *genericoptions.EtcdOptions
   SecureServing           *genericoptions.SecureServingOptions
   InsecureServing         *kubeoptions.InsecureServingOptions
   Audit                   *genericoptions.AuditOptions
   Features                *genericoptions.FeatureOptions
   Admission               *genericoptions.AdmissionOptions
   Authentication          *kubeoptions.BuiltInAuthenticationOptions
   Authorization           *kubeoptions.BuiltInAuthorizationOptions
   CloudProvider           *kubeoptions.CloudProviderOptions
   StorageSerialization    *kubeoptions.StorageSerializationOptions
   APIEnablement           *kubeoptions.APIEnablementOptions
   AllowPrivileged           bool  // 是否配置超级权限,即允许Pod中运行的容器拥有系统特权
   EnableLogsHandler         bool  
   EventTTL                  time.Duration // 事件留存事件, 默认1h
   KubeletConfig             kubeletclient.KubeletClientConfig // K8S kubelet配置
   KubernetesServiceNodePort int
   MaxConnectionBytesPerSec  int64
   ServiceClusterIPRange     net.IPNet // TODO: make this a list
   ServiceNodePortRange      utilnet.PortRange
   SSHKeyfile                string    // 指定的话,可以通过SSH指定的秘钥文件和用户名对Node进行访问
   SSHUser                   string    ProxyClientCertFile string
   ProxyClientKeyFile  string    EnableAggregatorRouting bool    MasterCount            int
   EndpointReconcilerType string }

上面的genericoptions定义在\staging\src\k8s.io\apiserver\pkg\server\options里面

初始化完成之后,最重要的任务就是启动实例了。所有的操作都是在run函数中执行,app.run()接口实现在cmd/kube-apiserver/app/server.go

func Run(runOptions *options.ServerRunOptions, stopCh <-chan struct{}) error {
   // To help debugging, immediately log version
  glog.Infof("Version: %+v", version.Get())

   server, err := CreateServerChain(runOptions, stopCh)
   if err != nil {
      return err
   }

   return server.PrepareRun().Run(stopCh)
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值