一、整体架构介绍

在这里插入图片描述

二、Master节点组件构成

在这里插入图片描述

1、etcd

etcd是k8s集中的状态存储,所有的集群状态数据,如集群节点、pod状态、发布配置等。

etcd它本身是一个分布式数据库,如果要配置它的高可用最少要3个节点。etcd可以单独部署,也可以和master在一起。

2、API server

API server 它是k8s的通讯接口和命令总线,无论是kubectl、dashboard、sdks操作k8s背后都是通过API server 交互的。

API server是唯一可以直接访问etcd的组件,其他组件想操作etce都需要经过它,你也可以理解成API server是etcd的代理,想操作etcd就必须经过API server;

API server不仅接受其他组件的API请求,它还是集群的事件总线。其他组件可以订阅在API server上面,当有新的事件发生时API server会将相关的事件通知到外围这些感兴趣的组件。

3、scheduler

它是k8s负责调度决策的组件,scheduler掌握着当前集群资源的使用情况。当有新的应用请求被提交到k8s集群时,scheduler会负责决策相应的pods应该分布到哪些节点上去。k8s集群调度算法是可以更具需要进行扩展的

4、controller manager

controller manager是保证集群状态最终一致的组件。它通过API server监控集群的状态,确保集群实际状态和预期的一致。

如果某个应用要求启动10个pod,那么它会保证这个应用最终启动10个,如果中间有某个pod挂了,controller manager会负责协调重启这个pod。如果启动多了controller manager又会负责协调关闭多余的pod。

k8s采用的是最终一致调度策略,controller manager是集群自愈背后的机制

三、work节点组件构成

work节点也叫node节点,它是资源的提供者。
在这里插入图片描述

1、kubelet

kubelet是work节点的资源管理者。它也订阅监听API server上的事件。根据一些指示,关闭或启动一些pod,它还将本节点的状态汇报给master节点。如果说master是公司的总经理,那kubelet就是部门经理。

2、container runtime

container runtime 它是本节点容器的管理者,kubelet不直接管理容器,它委托给container runtime来启动或关闭容器,以及收集容器的状态。
container runtime在启动容器时,如果本地没有镜像则会到docker hub上去拉去。

3、kube-proxy

kube-proxy 是管理k8s上面的服务和网络的组件。pod在k8s有一个ephemeral(不固定的)这么个概念,就是说这个Pod是不固定的,IP可能会变。为了解决这个IP的变化,k8s中引入了service这个概念,并且service在调用pod的时候进行负载均衡,而kube-proxy就是实现k8s服务网络的机制。另外当需要把k8s中的服务暴露给外网的时候,也需要通过kube-proxy进行代理和转发。

四、流程样例

在这里插入图片描述

1、假设用kubectl想集群中发布一个replicaset的请求,那么API server会先把这个请求存储到etcd当中;
2、controller manager 会监听replicaset的创建和修改,它会接受到一个通知 ;
3、controller manager会根据第1步请求所提交的发布模版,在API server当中创建预期的pod节点,然后会将当前的集群状态和预期的状态进行对比。经过对比之后controller manager会发现实际状态和预期状态不一致。需要创建新的pod。
4、scheduler会监听到需要创建新的pod,就会运行调度算法选择空闲的节点,然后通过API server更新pod的自定,指派发布到哪些空闲节点上
5、6、一旦pod被分配给某个节点,API server就会通知节点上的kubelet,kubelet接受到通知之后,就会指示本节点上的container runtime去运行指定的容器
7、container runtime 就会开始下载镜像启动容器,同时kubelet就会开始监控容器的启动状况,并且汇报给API server。

五、kubernetes总体架构

在这里插入图片描述
集群当中有一个覆盖网络,偏平化的网络overlay network,集群当中的这些pods可以通过overlay network实现IP寻址和通讯,实现这个覆盖网络的技术有很多,比如Flannel 、Calico、Vxlan、Weave Net等,详情可以点击这里查看

如果外部的流量需要访问集群内部的服务,一般要走负载均衡器Load Balander,后台的流量会通过kube-proxy间接的转发到相应的pod上面;

k8s除了我们之前讲过的这些组件之外,外围还有其他一些其他组件:

  • 存储(storage service )
  • 监控(monitoring )
  • 日志(logging )
  • 分析(Analytics )

六、总结

在这里插入图片描述

Logo

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

更多推荐