kubernetes replicaset基础原理

1)概述

replicaset对象描述一个[ 特定版本 ]的[ 应用 ],控制着pod的属性(镜像、容器的环境变量等等)以及数量。
说明:
1)replicaset对象不控制pod对象的版本,针对的是同一个镜像的pod。
2)deployment对象控制的是replicaset对象,它才能描述一个应用,因为应用有版本之分。

2)大致原理

replicaset的控制器会监听kuberntes的pod对象、replicaset对象,这些被监听的对象之变动,就会触发syncLoop循环(叫做syncReplicaSet()方法)让kubernetes集群朝着replicaset对象描述的状态进行演进。

3)细节实现

控制器每一次执行回调方法syncReplicaSet(),都执行了以下操作:

1)根据入参字符串key,获取rs对象:
namespace, name, err := cache.SplitMetaNamespaceKey(key)
rs, err := rsc.rsLister.ReplicaSets(namespace).Get(name)

2)获得一个布尔值:检查是否需要真的执行同步pod数量的操作
rsNeedsSync := rsc.expectations.SatisfiedExpectations(key)

3)获取rs对象底下的pod,这个pod列表称为filteredPods:
allPods, err := rsc.podLister.Pods(rs.Namespace).List(labels.Everything())
filteredPods := controller.FilterActivePods(allPods)
filteredPods, err = rsc.claimPods(rs, selector, filteredPods)

4)根据rsNeedsSync的值决定是否同步pod的[ 数量 ]:实际创建Pod或删除pod:批量新建pod或删除pod
rsc.manageReplicas(filteredPods, rs)

5)更新rs对象的status字段

4)源码简易流程图


								SatisfiedExpectations(此机制决定是否真的执行manageReplicas()方法)
									|
									|
									∨									
rs对象的变更或pod对象的变更 --> syncReplicaSet方法 --> manageReplicas(保持数量一致性:为rs创建pod或删除pod)  -->  1.判断究竟是新建pod还是删除pod  
																									     2. 创建为rs对象创建一个expectations对象,并设置add值/del值 
																									     3.调用slowStartBatch()方法批量创建pod 或 删除经过筛选出的多余的pod  
																								  	     4.更新rs对象关联的expectations对象
										|
										|
									    ∨
								updateReplicaSetStatus(更新rs对象的status字段)	

猜你喜欢

转载自blog.csdn.net/nangonghen/article/details/106153278
今日推荐