由于Replication Controller与Kubernetes代码中的模块Replication Controller同名,同时这个词也无法准确表达它的意思,所以从Kubernetes v1.2开始,它就升级成了另外一个新的对象——Replica Set,官方解释为“下一代的Replication Controller”。它与Replication Controller当前存在的唯一区别是:Replica Set支持基于集合的Label selector(Set-based selector),而Replication Controller只支持基于等式的Label selector(equality-based selector),所以Replica Set的功能更强大。下面是Replica Set的定义例子(省去了Pod模板部分的内容):
apiVeReplica Setion: extensions/v1beta1 kind: ReplicaSet metadata: name: frontend spec: selector: matchLabels: tier: frontend matchExpressions: - {key: tier, operator: In, values: [frontend]} template:
Replica Set很少单独使用,它主要被Deployment这个更高层的资源对象所使用,从而形成一整套Pod创建、删除、更新的编排机制。
Replication Controller和Replica Set的特性与作用如下:
- 在大多情况下,我们通过定义一个Replication Controller实现Pod的创建过程及副本数量的自动控制。
- Replication Controller里包括完整的Pod定义模板。
- Replication Controller通过Label Selector机制实现对Pod副本的自动控制。
- 通过改变Replication Controller里的Pod副本数量,可以实现Pod的扩容或缩容功能。
- 通过改变Replication Controller里Pod模板中的镜像版本,可以实现Pod的滚动升级功能。