Kubernetes架构设计

核心组件

  • api server 功能
  • controller manager
负责维护集群的状态
  • scheduler
负责资源的调度
按照预定的调度策略将Pod调度到相应的机器上
  • kubelet
  • Container runtime
  • kube-proxy
为Service提供cluster内部的服务发现和负载均衡

Add-ons

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

K8S分层结构

生态系统

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

接口层

管理层

应用层

核心层

K8S工作流程分析

时序图

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

kubeproxy

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

Api Server的工作流程

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

Controller的工作流程

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大致工作流程

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐