从文档中我可以看出,运行ReplicaSet
时会创建Deployment
。它似乎支持ReplicationController
的一些相同功能 - 向上/向下扩展和自动重启,但目前尚不清楚它是否支持滚动升级或自动缩放。
v1.1.8用户指南显示了如何在Deploying Applications中创建部署(自动创建ReplicaSet
),但在{1.2}之前kubectl get replicasets
命令不可用。我在文档中找不到有关ReplicaSet
的任何其他信息。
ReplicaSet
最终会取代ReplicationController
吗?为什么我要使用Deployment
和ReplicaSet
代替ReplicationController
?
答案 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