K8S架构设计及工作流程分析
原创
©著作权归作者所有:来自51CTO博客作者wx58c2b58cac641的原创作品,请联系作者获取转载授权,否则将追究法律责任
Kubernetes架构设计
核心组件
负责资源的调度
按照预定的调度策略将Pod调度到相应的机器上
为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大致工作流程