一篇文章带你了解kubernetes各组件间的通信机制
2019-11-04 11:06:36我们对kubernetes有了一定的认识,本文我们将继续深入的对kubernetes在系统层面上进行讨论,一起看看kubernetes的各个基本组件,以及各个组件是如何相互配合来撑起如此复杂的集群系统。
我们对kubernetes有了一定的认识,本文我们将继续深入的对kubernetes在系统层面上进行讨论,一起看看kubernetes的各个基本组件,以及各个组件是如何相互配合来撑起如此复杂的集群系统。下面跟随文章内容,一起来领略kubernetes令人惊叹的设计内幕吧。
Kubernetes的基本组件
Kubernetes将整个集群分为控制节点和工作节点,如下图所示。
Kubernetes中的Master是指集群控制节点,每个Kubernetes集群中需要一个Master节点来负责整个集群的管理和控制,Kubernetes中所有的控制指令都是交由Master来进行处理。引起在集群中处于非常重要的地位,因此在部署中需进行多节点单独部署。
Maste节点关键进程
Apiserver:提供kubernetes所有资源增删改查的唯一入口,也是集群控制的入口,提供http Rest接口,完成集群管理,资源配额,访问控制,认证授权,以及对etcd的操作。
Controller-manager:是集群内所有资源对象的自动化控制中心,负责Pod和node的管理,节点控制器,服务控制器,副本控制器,服务账户和令牌控制器等
Scheduler:负责资源调度,监听Apiserver,查询是否有未调度的pod。
Etcd:在kubernetes系统中,主要有两个服务需要用到etcd来存储:
网络插件:如flannel等需要存储网络配置信息
Kubernetes本身,包括各种对象的状态和原信息配置。
除Master节点外,集群中其他集群被称为Node节点,较早的版本中也叫Minion。Node节点是集群中具体的工作负载节点,其可以使物理机也可以为虚拟机。
Node节点关键进程(包括但不限于以下进程)
kubelet:处理Master下发到本节点的任务,管理pod及pod的容器,每个kubelet在Apiserver上注册自身信息,定期向Master汇报节点的资源使用情况,并通过cAdvisor监控容器和节点信息。
kube-proxy:将到service的访问转发到后端的多个pod实例上,维护路由信息,对于每一个TCP类型的k8s service,kube-proxy会在本地建立一个sockerserver来负责均衡算法,使用rr负载均衡算法。
CNI网络组件:作为容器平台的网络标准化组件,为容器提供跨网段的通信支持,是kubernetes集群overlay网络的实现关键。
Docker:kubernetes支持多种容器工具,目前Docker作为主流的容器,为kubernetes集群提供容器创建及管理。
集群各组件间的交互
Kubernetes为所有资源增删改查的唯一入口,各组件均以list-watch的方式向Apiserve发送请求。为减少Apiserver的压力,各组件都采用缓存来缓存数据。功能模块在某些情况下不直接访问Apiserver,而是通过访问缓存来间接访问Apiserver。
Kubelet&Apiserver

每个node上的kubelet每个一个时间周期,就会调用Apiserver的REST接口来报告自身状态。Kubelet通过watch接口,监听pod信息。监听创建、删除、修改事件。
Controller-manager&Apiserver
controller-manager中包含多个controller,举例:Node Controller模块通过API server提供的Watch接口,实现监控Node信息,并做相应处理。
Scheduler&Apiserver
Scheduler通过API server的watch接口来监听,监听到新建pod副本后,检索所有符合该Pod要求的Node列表,开始执行Pod调度,调度成功后将pod绑定到具体节点。
以下是一张典型pod创建的流程图,其中可以看到Apiserver处于核心的位置,集群内的各个功能模块的所有原数据正删改查都是通过kube-apiserver操作etcd,当需要获取和操作这些数据时,通过Apiserver的REST接口来实现。
list-watch机制
kubernetes没有像其他分布式系统中额外引入MQ,是因为其设计理念采用了level trigger而非edge trigger。其仅仅通过http+protobuffer的方式,实现list-watcher机制来解决各组件间的消息通知。因此,在了解各组件通信前,必须先了解list-watch机制在kubernetes的应用。
List-watch是k8s统一的异步消息处理机制,list通过调用资源的list API罗列资源,基于HTTP短链接实现;watch则是调用资源的watch API监听资源变更事件,基于HTTP长链接实现。在kubernetes中,各组件通过监听Apiserver的资源变化,来更新资源状态。
这里对watch简要说明,流程如下图所示:
这一部分流程图看起来并不复杂,实际上里面的实现相当精妙。结合这幅图进行简要的解释:
1 首先需要强调一点,list或者watch的数据,均是来自于etcd的数据,因此在Apiserver中,一切的设计都是为了获取最新的etcd数据并返回给client。
2 当Apiserver监听到各组件发来的watch请求时,由于list和watch请求的格式相似,先进入ListResource函数进行分析,若解析为watch请求,便会创建一个watcher结构来响应请求。watcher的生命周期是每个http请求的。
3 创建了watcher,但谁来接收并缓存etcd的数据呢?Apiserver使用cacher来接收etcd的事件,cacher也是Storage类型,这里cacher可以理解为是监听etcd的一个实例,cacher针对于某个类型的数据,其cacher通过ListAndWatch()这个方法,向etcd发送watch请求。etcd会将某一类型的数据同步到watchCache这个结构,也就是说,ListAndWatch()将远端数据源源不断同步到cacher结构中来。Cacher的结构如下所示:
watchCache的结构如下所示:
cache里面存放的是所有操作事件,而store中存放的是当前最新的事件。
4 cacheWatcher从watchCache中拿到从某个resourceVersion以来的所有数据,即initEvents,然后将数据放到input这个channel里面去,通过filter然后输出到result这个channel里面,返回数据到某个client。
从一个pod创建过程看k8s组件通信
我们再回到上面的Pod创建流程图。从图中我们可以看出以下信息:
1 首先各组件也会在初始化时向Apiserver发送watch请求,即在图中标0的指令。Apiserver在创建kubeApiserver并注册各API路由信息时,获取Watch请求的路由信息
2 从Kubectl向Apiserver发送创建pod请求起,每一步创建、更新操作,都会存储到etcd中。
3 各组件向Apiserver发送watch请求,Apiserver从etcd获取最新数据并返回。
注意:当事件发生时,Apiserver会给这些watcher中的通道推送,每个watcher都有自己的Filter过滤,找到自己想要监听的事件则通过管道的方式将该数据发送到相应的组件。
为什么细菌能够广泛传播?
1.细菌繁殖快,数量多,适应能力强2.细菌的种类多,同化作用类型有自养、有异养,异化作用类型有好氧、有厌氧,还有兼性厌氧型,这就导致在什么样的环境都有细菌生存,有氧行,无氧也行;有有机物行,无有机物也行!3.有些细菌还有特殊的结构,比如有些有芽孢,产生芽孢以后可以让细菌度过恶劣环境
怎样提高初三英语学生的完型填空和阅读理解
建议如下:
1.首先你的单词量要过关,要懂得基本的意思。
2.完形填空无非是考察语法,其中包括句子的时态,介词的运用,主谓一致的用法等,所以你要对这些知识点要多练习和恐固。
3.阅读理解要讲究时间,要掌握一篇文章的重点,一般都是首句或者末尾句是段的主要内容,要判断好就容易了解文章的意思。
4.其次都是靠自己多点练习去掌握啦
如何高效阅读 pdf
对于大部分书籍,重要的内容只占全书的20%左右,所以学会高效阅读很重要。 阅读中,最好能练成一边阅读一边在脑海中简单构架思维导图的习惯和能力,这样可以大大的提升阅读效率。 现在,我已经养成了有目的、有重点地进行阅读的习惯,这样可以使我在阅读中善于发现重点、新问题、新观点和新材料,这样既有助于提升阅读速度,同时也能提升阅读理解和记忆效率。 当然了,这需要自己在平时的阅读中有意识的培养。 如果阅读效率低的话,可以学习一下快速阅读法。 快速阅读是一种眼脑直映式的高效阅读学习方法,掌握之后,在阅读文章、材料的时候可以快速的提取重点,促进整理、归纳和分析,提高理解和记忆效率;同时很快的阅读速度,还可以节约大量的时间,游刃有余的做其它事情。 掌握不是一句两句话就可以做到的,想学习的可以自己去了解,或者参考《精英特速读记忆训练软件》,主要就是训练快速阅读的,里面也有“思维导图”的训练,如果你的阅读效率低,可以好好的去练习提高一下。 读书的过程中以及读完一本书后,要学会做读书笔记。 读书过程中:①遇到重要的、有趣的、有疑问的等的内容就记录下来,以备份查阅。 ②做好读书批注。 也就是记录阅读过程中的阅读感受或感悟,比如你对某一句话、某一观点的理解、联想、灵感等方面,都要及时的记录下来。 读完之后:①以知识框架或思维导图的形式来来整理书籍,主要是书本的重要内容提炼,也包括自己在读的过程中的一些理解和感悟。 知识框架,特备是思维导图形式的笔记,有一个好处就是方便添加新内容,当我在后期的学习或阅读中有相关的新知识点、新体会,都可以加进去,促进知识的衔接,方便掌握和运用。 ②针对一部分书,比如看了之后很有感触的那种,我也会写一写读书感悟。
发表评论