Replication Controlle:
Replication Controlle在K8s集群中,维持着pod的稳定数量,控制着集群中pod的生成和销毁。当集群中的pod数量不够的时候,会自动生成,当集群中的pod数量过多的时候,则自动删除部分pod。以保证集群pod群的可用性。在这个过程中Replication Controlle起了一个监管者的作用,当需要创建新的pod的时候,它会委托节点上的kubectl或者docker来启动新的资源。
特性:
1. 只对RestartPolicy属性为aways的实例生效。
2. 不论pod是应为什么原因被终止或者异常的,Replication Controlle都会启动新的pod进行补充。
3. Replication Controlle在进行应用更新的时候,是用户无感知的。通过逐渐更新pod的方式进行应用更新。
工作原理:
通过模板创建Pod:
Replication Controlle通过Pod template来创建新的pod,所有新创建的pod都具有相同的初始状态。
Pod template是创建pod的模板,这个服务在目前是归属于Replication Controlle的,但是官方有计划在将来把这个服务设计为一个独立的服务。
pod在创建完成之后,就与模板没有关系了,我们如果需要修改应用,则需要创建新的模板来使用,通过新的模板创建pod替换原先的pod。
通过lable来确定哪些Pod是被管理的:
创建的pod都会带有特定的lable,Replication Controlle通过label selector这个标签选择器来筛选出它管理的pod。对这些筛选出来的pod进行监控,从而确保这些pod的数量的稳定。
但是这样就会出现问题,相同的一群带有相同lable的pod被不同的两个Replication Controller管理着,那么就会产生冲突。为了避免这样的情况出现,RC会检查label selector是否具有覆盖关系,如果一个label selector的标签在另外一个label selector中也全部都存在,那么表示该label selector不合理,无法进行管理。
使用场景
1. Rescheduling(容错规划)
当集群中有节点出现问题的时候,RC会在其他的节点上启动新的pod,以维持pod数量。
Scaling(伸缩)
2. RC提供了控制pod副本数量的简单方法,可以直接修改replicas的值,来扩展pod的数量,或者减少pod的数量,不用手动的创建或者销毁pod。
Rolling updates(动态更新)
3. 运行在容器中的应用如果需要更新的时候,可以使用RC来进行动态更新,通过逐渐创建新的pod来逐渐替换旧的pod这样的方式。逐渐将应用替换为新的版本,通过这种方式,可以避免应用更新中出错。