Kubernetes架构设计
核心组件
- api server 功能
- controller manager
负责维护集群的状态
- scheduler
负责资源的调度 按照预定的调度策略将Pod调度到相应的机器上
- kubelet
- 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大致工作流程