一、初识apiserver
apiserver是kubernetes控制平面的核心组件,同时也是kubernetes集群对外的唯一入口。apiserver负责将kubernetes的资源,资源组,资源版本以RESTGFULAPI对外暴露并提供服务,而且apiserver也是唯一一个可以和etcd交互的组件,将集群数据存储到etcd的/registry目录下。
kube-apiserver属于kubernetes中的核心组件,该组件具有如下特性:
- kubernetes 系统中的所有资源对象,均被封装成restfulAPI进行管理。
- 唯一与etcd交互的核心组件,将集群中资源状态存储到etcd中进行统一管理。
- 集成了多种安全机制。
-
二、kube-apiserver架构解析
1、kube-apiserver架构
kube-apiserver的架构图如下
ApiExtensionsServer:API扩展服务,为kubernetes提供了CRD自定义资源服务。可通过CustomresourceDefinitions对象进行管理,通过extensionsapiserver.Scheme资源注册表管理CRD资源。
- AggregatorServer:API聚合服务。该服务提供了ApiAggregator聚合服务。可通过APIAggregatorServer对象管理,通过aggregatorscheme.Scheme资源注册表管理ApiAggregator资源。
- KubeAPIServer:API核心服务。提供了kubernetes内置核心资源服务。
2、kube-apiserver启动流程
kube-apiserver作为kubernetes的核心服务,自身设计还是比较重的,启动流程也较为复杂,简单地说可以概括为9步。
- 资源注册:kube-apiserver将所有支持的资源注册到Scheme资源注册表中。
- Cobra命令行参数解析:kuber-apiserver通过Cobra填充配置参数并验证参数。
- 创建APIServer通用配置:为kube-apiserver不同模块实例化创建通用配置。
- 创建ApiExtensionsServer:依次执行创建GenericAPIserver、实例化CustomResourceDefinitions、实例化APIGroupInfo、将InstallAPIGroup注册APIGrop完成ApiExtensionsServer创建。
- 创建KubeAPIServer:依次执行创建GenericAPIserver、实例化Master、InstallLegacyAPI注册/api资源、InstallAPIs注册/api资源。
- 创建AggregatorServer:依次执行创建GenericAPIserver
- 创建GenericAPIServer:
- 启动HTTP服务:
- 启动HTTPS服务: