k8s的master节点上会有kube-controler-manager这个组件,顾名思义,这个组件就是用来管理所有的controler的。
控制器模式的思想就是用一个对象来管理另外一个对象。
可以通过如下方式查看所有的controler:
$ cd kubernetes/pkg/controller/
$ ls -d */
今天要讲的deployment就是最常见的一种controler。
注意:deployment控制器管理的是ReplicaSet,而不是pod。


ReplicaSet:
ReplicaSet是K8S中特别重要的一个api对象。 Deployment中ReplicaSet和pod的关系如下:
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。
网友评论