ReplicaSet和ReplicationController有什么区别?

时间:2016-03-25 12:56:37

标签: deployment kubernetes replicaset

从文档中我可以看出,运行ReplicaSet时会创建Deployment。它似乎支持ReplicationController的一些相同功能 - 向上/向下扩展和自动重启,但目前尚不清楚它是否支持滚动升级或自动缩放。

v1.1.8用户指南显示了如何在Deploying Applications中创建部署(自动创建ReplicaSet),但在{1.2}之前kubectl get replicasets命令不可用。我在文档中找不到有关ReplicaSet的任何其他信息。

ReplicaSet最终会取代ReplicationController吗?为什么我要使用DeploymentReplicaSet代替ReplicationController

3 个答案:

答案 0 :(得分:23)

Replica Set是下一代Replication Controller。复制控制器是必不可少的,但副本集尽量尽可能地声明。

1.现在副本集和复制控制器之间的主要区别在于选择器支持。

+--------------------------------------------------+-----------------------------------------------------+
|                   Replica Set                    |               Replication Controller                |
+--------------------------------------------------+-----------------------------------------------------+
| Replica Set supports the new set-based selector. | Replication Controller only supports equality-based |
| This gives more flexibility. for eg:             | selector. for eg:                                   |
|          environment in (production, qa)         |             environment = production                |
|  This selects all resources with key equal to    | This selects all resources with key equal to        |
|  environment and value equal to production or qa | environment and value equal to production           |
+--------------------------------------------------+-----------------------------------------------------+

2.第二件事是更新豆荚。

+-------------------------------------------------------+-----------------------------------------------+
|                      Replica Set                      |            Replication Controller             |
+-------------------------------------------------------+-----------------------------------------------+
| rollout command is used for updating the replica set. | rolling-update command is used for updating   |
| Even though replica set can be used independently,    | the replication controller. This replaces the |
| it is best used along with deployments which          | specified replication controller with a new   |
| makes them declarative.                               | replication controller by updating one pod    |
|                                                       | at a time to use the new PodTemplate.         |
+-------------------------------------------------------+-----------------------------------------------+

这是区分RS和RC的两件事。使用RS的部署被广泛使用,因为它更具说明性。

答案 1 :(得分:11)

目前,在大多数情况下,差异应该是微不足道的。 ReplicaSet有一个通用标签选择器:https://github.com/kubernetes/kubernetes/issues/341#issuecomment-140809259。它应该支持复制控制器支持的所有功能。

  

ReplicaSet最终会取代ReplicationController吗?为什么我要使用Deployment和ReplicaSet而不是ReplicationController?

这归结为滚动更新与部署。请阅读有关部署的文档以了解其中的差异:http://kubernetes.io/docs/user-guide/deployments/。简而言之,如果您开始滚动更新并关闭笔记本电脑,则您的副本会混合使用中间图像版本。如果您创建部署并关闭笔记本电脑,则部署会成功发送到apiserver,在这种情况下它可以在服务器端工作,或者它没有,在这种情况下,所有副本仍然在旧版本上。

  

糟糕的是,几乎所有当前的文档都是关于ReplicationControllers的。

同意,大多数文档正在更新。不幸的是,互联网上的文档比github上的文档更难更新。

答案 2 :(得分:0)

副本控制器和副本集的功能完全相同-它们负责确保将 X 个具有等于标签选择器标签的容器数量调度到不同的节点在群集上。
(其中 X 是在副本控制器/副本集yaml的spec.replicas字段中指定的值。)

ReplicaSet替代了副本控制器,并支持标签选择器的更丰富的表达式。 您可以在运算符In, NotIn, Exists, DoesNotExist的4个值之间进行选择-参见Set-based requirement

经验法则::当文档或其他教程中提到副本控制器时,将其称为ReplicaSet并考虑使用Deployment。


副本控制器之间的语法也有微小差异:

apiVersion: v1
kind: ReplicationController
metadata:
  name: nginx
spec:
  replicas: 3
  selector:
    app: nginx

以及在matchLabels下包含selector字段的ReplicaSet:

apiVersion: apps/v1
kind: ReplicaSet
metadata:
  name: nginx
spec:
  replicas: 3
  selector:
    matchLabels: #<-- This was added
      tier: nginx