您的位置:首页 > 其它

kubernetes的kube-apiserver组件源码分析

2016-08-24 16:43 666 查看

1 apiserver模块main函数

func main(){
   runtime.GOMAXPROCS(runtime.NumCPU())//多核cpu,增加系统吞吐量

   rand.Seed(time.Now().UTC().UnixNano())
   s:=options.NewAPIServer()//新建一个APIServer对象,APIServer结构体
   s.AddFlags(pflag.CommandLine)//添加用户命令行输入

   util.InitFlags()
 //解析并格式化传入的参数,填充kubeletserver结构体
   util.InitLogs()
 //初始化log配置
   defer util.FlushLogs()
 //延迟函数,保证了异常崩溃时能够将内存中的log信息保存到磁盘文件中
   verflag.PrintAndExitIfRequested()
   if err:=app.Run(s);err!=nil{//运行apiserver
       fmt.Fprintf(os.Stderr,"%v\n",err)
       os.Exit(1)
   }
}

2  APIServer数据结构

APIServer结构体存放apiserver使用到的各种参数。InsecurePort、SecurePort、EtcdPathPrefix:etcd中所有资源前缀,默认

是”/registry”,EnableLogsSupport、MasterServiceNamespace:默认是”default”,、ClusterName集群中实例的前缀,默认

是”kubernetes”,变量
f201
CertDirectory表示TLS认证目录,默认是”/var/run/kubernetes”,这个目录中会存放TLS证书文件和TLS私钥文

件,用于两个应用程序之间提供保密性和数据完整性。

Master结构体,这个结构体存放kubernetesmaster节点中apiserver信息。Master结构体中用到了第三方组件etcd,将kubernetes中

的pod、service等信息注册到etcd中,实现这些信息的数据持久化。

3  执行流程

1、verifyClusterIPFlags(s) 验证clusterIP参数

2、配置AdvertiseAddress参数(没有指定的话使用HostIP)

3、验证--etcd-servers参数

4    资源限额配置

5、初始化CloudProvider

6、创建kubeletclient对象(只用于kubelet的健康检查)

7、创建restclient对象

8、newEtcd()方法创建访问etcdserver的客户端

9、authenticator(鉴权)、authorizer(授权)、admissionController(准入许可)

10、获取配置ExternalHost

11、构造master的config结构,生成一个master实例。各种api请求最后都是通过master对象来处理的。

12、开始监听客户端请求。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息