目录
2.22 Replicaset 和 Deployment 关系
上一章 对k8s理论做了一些说明,为了更透彻讲述k8s 的工作过程,本章将详细阐述 k8s 的数据流向 与 核心概念供君参考。
一 k8s 数据流向
1,超级详细版
1.首先Kubectl通过Auth认证,访问到Master节点的APIserver。
2.APIserver会先将访问数据发送给ETCD存储,相当于将Kubectl发送的请求,例如创建服务的指令形成一个类似与模板的数据,进行存储
3.ETCD会将请求重新发送给APIserver
4.APIserver会先调用controller-manager组件去执行ETCD模板请求,类似与生成一条指令,但是它没有执行的目标
5.controller-manager组件并不能直接在Node节点上创建服务,它会将类似于执行命令的数据发送给APIserver
6.APIserver再将该数据发送到ETCD,ETCD会记录操作请求,而后会将指令需求发送给scheduler组件
7.scheduler组件会kubelet监控,并发送给APIserver的节点信息,而后根据预选、优选策略去选择合适的节点去执行指令,但是它也无法直接将指令发送给kubelet,而是将指令发送给APIserver
8.APIserver将指令发送给kubelet
9.kubelet会在每一个node节点上执行,它将APIserver发送的指令在其所在的node节点上执行,同时它还会负责监控所在节点的Pod实例状态,管理所有Pod实例的生命周期。在执行完指令后,会将执行记录返回给APIserver,APIserver会将记录存储在ETCD当中。并负责与master进行通信。
10.此时用户访问服务,会通过kube-proxy来访问pod实例
注释:
①所有的执行操作与访问数据,都会记录到ETCD当中
②master组件之间并不会互相进行通信与调用,所有的操作都会通过APIserver进行调用执行
2,核心主键及含义
- apiserver:接入的唯一入口,集群的大脑,负责所有操作的读写,增删改查
- kube-comtroller-manager:增删改查,创建pod的资源模板,一个资源一个控制器,资源控制器,任务控制
- kube-scheduler:调度器,根据模板初选节点pod,以实现最优资源利用
- kubelet:API小弟,节点代理,监视 管理 反馈管理节点上容器和资源,接收指令跟容器引擎交互实现容器生命周期管理
- kube-proxy:为pod提供网络代理和负载均衡,负责写入规则到iptables或ipvs实现服务映射和访问容器
- ETCD:分布式键值对存储重要信息,并持久化
3,K8S 创建Pod 流程
kubectl 创建一个Pod(在提交时,转化为json格式)
- 首先经过auth认证(鉴权),然后传递给api-server进行处理
- api-server 将请求信息提交给etcd
- scheduler和controller-manager 会watch(监听) api-server ,监听请求
- 在scheduler 和controller-manager监听到请求后,scheduler 会提交给api-server一个list清单——》包含的是获取node节点信息
- 此时api-server就会向etcd获取后端node节点信息,获取到后,被scheduler watch到,然后进行预选优选进行打分,最后将结果给与api-server
- 此时api-server也会被controller-manager watch(监听) controller-manager会根据请求创建Pod的配置信息(需求什么控制器)将控制器资源给与api-server
- 此时api-server 会提交list清单给与对应节点的kubelet(代理)
- kubelet代理通过K8S与容器的接口(例如containerd)进行交互,假设是docker容器,那么此时kubelet就会通过dockershim 以及runc接口与docker的守护进程docker-server进行交互,来创建对应的容器,再生成对应的Pod
- kubelet 同时会借助于metrics server 收集本节点的所有状态信息,然后再提交给api-server
- 最后api-server会提交list清单给与etcd来存储(最后api-server会将数据维护在etcd中)
4,用户访问流程
- 假设用户需创建 nginx资源(网站/调度)kubectl ——》auth ——》api-server
- 基于yaml 文件的 kubectl create run / apply -f nginx.yaml(pod 一些属性,pod )
- 请求发送至master 首先需要经过apiserver(资源控制请求的唯一入口)
- apiserver 接收到请求后首先会先记载在Etcd中
- Etcd的数据库根据controllers manager(控制器) 查看创建的资源状态(有无状态化)
- 通过controllers 触发 scheduler (调度器)
- scheduler 通过验证算法() 验证架构中的nodes节点,筛选出最适合创建该资源,接着分配给这个节点进行创建
- node节点中的kubelet 负责执行master给与的资源请求,根据不同指令,执行不同操作
- 对外提供服务则由kube-proxy开设对应的规则(代理)
- container 容器开始运行(runtime 生命周期开始计算)</