k8s组件间调用关系简述
etcd是集群中所有数据的存储,所有的资源状态都存在这,apiserver和etcd交互,提取数据,并提供一个总的路由入口controller-manager、scheduler都是通过listwatch从apiserver中拿数据controller-manager就是一个大管家,他是一个包工头,他自己不干活,从apiserver中去分包,拿到小的工程(创建pod等),分给他下面的小弟(pod-
etcd是集群中所有数据的存储,所有的资源状态都存在这,
apiserver和etcd交互,提取数据,并提供一个总的路由入口
controller-manager、scheduler都是通过listwatch从apiserver中拿数据
controller-manager就是一个大管家,他是一个包工头,他自己不干活,从apiserver中去分包,拿到小的工程(创建pod等),分给他下面的小弟(pod-controller等)去干
小弟就负责干两件事,1是找用户的期望状态,2是找集群的目标状态,对两个状态进行不停的比对,比如说现在需要nginx的实例有3个(3个nginx的pod),当前已经有2个,deployment-controller会要求其对应的rs把2改成3,rs会把这个消息推送给apiserver,apiserver收到这个消息后会把消息给到etcd进行持久化,持久化的内容是某个deployment需要3个pod,把之前的2改成3。
然后apiserver会把这个消息通过listwathc推送给scheduler去计算哪个node最合适创建,计算出合适的node后,scheduler会把这个消息推送给apiserver
apiserver会把这个消息推送给scheduler计算出的node上的kubelet,kubelet会检查自己节点上的资源是否满足,如果满足要求给apiserver发一个确认的消息,告诉apiserver可以在我的节点上创建pod。
apiserver此时会在etcd中的,deployment对应的pod列表中,pod对应的nodename字段上进行nodename的填写,把node和pod的关系进行持久化,然后把这个消息再推给controller-manager,将消息下发给他的小弟deployment-controller,再下发给小弟的rs,rs拿到消息后更新自己的状态,将pod数量设置为3个。
kubelet是node健康检查、node状态采集、container状态、pod状态采集;
kube-proxy就是负责service的创建,里面有ipvs、iptables两种规则;
更多推荐
所有评论(0)