Kubernetes架构设计

K8S架构设计及工作流程分析_负载均衡

核心组件

  • api server 功能

K8S架构设计及工作流程分析_数据_02

  • controller manager
负责维护集群的状态

K8S架构设计及工作流程分析_负载均衡_03

  • scheduler
负责资源的调度
按照预定的调度策略将Pod调度到相应的机器上
  • kubelet

K8S架构设计及工作流程分析_工作流程_04

  • Container runtime

K8S架构设计及工作流程分析_工作流程_05

  • kube-proxy
为Service提供cluster内部的服务发现和负载均衡

Add-ons

  • kube-dns负责为整个集群提供DNS服务
  • Ingress Controller为服务提供外网入口
  • Heapster提供资源监控
  • Dashboard提供GUI
  • Federation提供跨可用区的集群
  • Fluentd-elasticsearch提供集群日志采集、存储与查询

K8S分层结构

K8S架构设计及工作流程分析_数据_06

​生态系统​

在接口层之上的庞大容器集群管理调度的生态系统

K8S架构设计及工作流程分析_数据_07

​接口层​

K8S架构设计及工作流程分析_负载均衡_08

​管理层​

K8S架构设计及工作流程分析_工作流程_09

​应用层​

K8S架构设计及工作流程分析_负载均衡_10

​核心层​

K8S架构设计及工作流程分析_工作流程_11

K8S工作流程分析

K8S架构设计及工作流程分析_工作流程_12

​时序图​

K8S架构设计及工作流程分析_工作流程_13

  • kubectl提交部署申请
  • replication 创建指定数量的pod
  • scheduler将pod调度到节点
  • 节点上的kubelet管理pod的生命周期

​kubeproxy​

K8S架构设计及工作流程分析_数据_14

1、
kubeproxy运行在集群各个主机上
管理网络通信,服务发现,负载均衡
2、
当有数据发送到主机时
其将路由到正确的pod或容器
3、
对于主机上发出的数据
它可以基于请求地址发现远程服务器
并将数据正确路由
4、
在某些情况下会使用轮询调度算法将请求发送到集群中的多个实例

Api Server的工作流程

K8S架构设计及工作流程分析_数据_15

  • 数据验证
  • 根据不同的资源类型找对应的handler处理器
  • yaml文件转换成处理对象
  • 验证对象属性的合法性
  • 将合法对象保存到etcd中

Controller的工作流程

K8S架构设计及工作流程分析_负载均衡_16

1、controller和apiserver通过Informer建立连接
(创建Informer的时候 需要传递一个networkClient对象 用于两者之间建立连接)

2、Informer的Reflector负责维护这个连接
有了连接之后就可以监听apiserver中的数据变化了
通过ListAndWatch方法获取并监听API对象实例的变化

3、在ListAndWatch机制下
一旦APIServer有新的API实例被创建、删除或者更新
Reflector都会收到“事件通知”

4、该事件和它所对应的API对象这个组合
就被称为增量(Delta)
它被放进一个Delta FIFO Queue中
(api对象中的key会放入工作队列中)

5、Informer会从这个队列中读取增量
每拿到一个增量
Informer就会判断这个增量里的事件类型
然后创建或者更新本地对象缓存(Store)
并且Informer会根据这个事件类型
触发事先注册好的ResourceEventHandler
这些Handler需要在创建控制器的时候注册给它对应的Informer

​controller大致工作流程​

K8S架构设计及工作流程分析_负载均衡_17