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”,变量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、开始监听客户端请求。