K8S - deployment 控制器

k8s的master节点上会有kube-controler-manager这个组件,顾名思义,这个组件就是用来管理所有的controler的。

控制器模式的思想就是用一个对象来管理另外一个对象。

可以通过如下方式查看所有的controler:

$ cd kubernetes/pkg/controller/

$ ls -d */             


今天要讲的deployment就是最常见的一种controler。

注意:deployment控制器管理的是ReplicaSet,而不是pod。

所有的控制器都遵循了如下所示的控制循环( control loop )模式。 控制循环模式和事件驱动模式的区别: 事件驱动是基于一次性的事件触发之后进行处理,如果处理失败了则不好重试; 控制循环模式是主动的,循环的进行重复的处理,不停的重试,一直达到最终的一致性。

ReplicaSet: 

ReplicaSet是K8S中特别重要的一个api对象。 Deployment中ReplicaSet和pod的关系如下: 

ReplicaSet通过“控制器模式”保证当前的pod的个数永远等于配置文件中配置的个数。 


Deployment,ReplicaSet和Pod之间的关系图

Deployment通过“控制器模式”来控制ReplicaSet的数量和属性,从而达到了ReplicaSet的水平扩展/收缩 和 滚动更新的功能。 举例: Deployment要实现水平扩展功能,Deployment Controler只需要修改他控制的ReplicaSet的数量就可以了。 也可以通过指令($ kubectl scale deployment nginx-deployment --replicas=4)来实现。 

Deployment实现滚动更新的原理是,创建一个新的ReplicaSet,然后滚动的在这个新的RepicaSet中创建新的pod,同时移除旧的ReplicaSet中的pod,还可以通过RollingUpdateStrategy策略来配置滚动更新过程中,最大不可用的pod个数等属性。 

如上图所示,Deployment真正控制的是ReplicaSet的数量和属性,这样Deployment对应的多个ReplicaSet其实就是对应的应用的过个版本。 应用版本和 ReplicaSet是 一一对应的。 


Deployment Controler还会保证在任何时间,只要有pod出现了问题,它会自动创建出来一个新的pod。 

你可能感兴趣的:(K8S - deployment 控制器)