Kubernetes 源码 (4) kube-apiserver

Submitted by Lizhe on Thu, 07/02/2020 - 09:07

kube-apiserver 负责对外暴露管理用的Restful 服务。它是几乎所有其他组件沟通的主要桥梁。

参考下面 Pod 资源创建流程如下:

  1. 使用 Kubectl 工具向 Api Server 发起创建 Pod 资源请求
  2. Api Server 验证请求并将其保存到 Etcd
  3. Api Server 基于Watch机制通知scheduler
  4. Scheduler 根据调度算法为Pod资源对象选择最优节点并通知Api Server
  5. Api Server 将最优节点保存到 Etcd
  6. Api Server 通知该节点上的 kubelet
  7. Kubelet 调用docker环境
  8. Kubelet 将状态报告至 Api Server
  9. Api Server 保存容器状态到 Etcd

由此可见,Api Server 是一切动作交互的桥梁

 

kube-apiserver的启动流程如下

  1. 注册资源
  2. Cobra命令行解析
  3. 创建Api Server通用配置
  4. 创建APIExtensionsServer ( API扩展服务 )
  5. 创建KubeAPIServer ( API核心服务 )
  6. 创建AggregatorServer ( API聚合服务,metrics-server是聚合器之一 )
  7. 创建GenericAPIServer ( 可以理解成上面3个服务的父类 )
  8. 启动 HTTP
  9. 启动 HTTPS

 

 

Kubernetes API Server 使用 Go 的 HTTP 标准库,启动 api 服务的代码在

vendor/k8s.io/apiserver/pkg/server/secure_serving.go

 

20200703101324