一、初识apiserver

apiserver是kubernetes控制平面的核心组件,同时也是kubernetes集群对外的唯一入口。apiserver负责将kubernetes的资源,资源组,资源版本以RESTGFULAPI对外暴露并提供服务,而且apiserver也是唯一一个可以和etcd交互的组件,将集群数据存储到etcd的/registry目录下。
kube-apiserver属于kubernetes中的核心组件,该组件具有如下特性:

  1. kubernetes 系统中的所有资源对象,均被封装成restfulAPI进行管理。
  2. 唯一与etcd交互的核心组件,将集群中资源状态存储到etcd中进行统一管理。
  3. 集成了多种安全机制。
  4. 提供了各个组件的安全通信与交互功能。

    二、kube-apiserver架构解析

    1、kube-apiserver架构

    kube-apiserver的架构图如下
    深入理解kube-apiserver - 图1

  5. ApiExtensionsServer:API扩展服务,为kubernetes提供了CRD自定义资源服务。可通过CustomresourceDefinitions对象进行管理,通过extensionsapiserver.Scheme资源注册表管理CRD资源。

  6. AggregatorServer:API聚合服务。该服务提供了ApiAggregator聚合服务。可通过APIAggregatorServer对象管理,通过aggregatorscheme.Scheme资源注册表管理ApiAggregator资源。
  7. KubeAPIServer:API核心服务。提供了kubernetes内置核心资源服务。

2、kube-apiserver启动流程

kube-apiserver作为kubernetes的核心服务,自身设计还是比较重的,启动流程也较为复杂,简单地说可以概括为9步。

  1. 资源注册:kube-apiserver将所有支持的资源注册到Scheme资源注册表中。
  2. Cobra命令行参数解析:kuber-apiserver通过Cobra填充配置参数并验证参数。
  3. 创建APIServer通用配置:为kube-apiserver不同模块实例化创建通用配置。
  4. 创建ApiExtensionsServer:依次执行创建GenericAPIserver、实例化CustomResourceDefinitions、实例化APIGroupInfo、将InstallAPIGroup注册APIGrop完成ApiExtensionsServer创建。
  5. 创建KubeAPIServer:依次执行创建GenericAPIserver、实例化Master、InstallLegacyAPI注册/api资源、InstallAPIs注册/api资源。
  6. 创建AggregatorServer:依次执行创建GenericAPIserver
  7. 创建GenericAPIServer:
  8. 启动HTTP服务:
  9. 启动HTTPS服务: