Kubernetes中的复制控制器VS部署

时间:2016-05-24 20:20:14

标签: google-compute-engine kubernetes google-kubernetes-engine

我想知道复制控制器和Kubernetes(1.2)中的部署有什么区别。浏览入门文档(http://kubernetes.io/docs/hellonode/)我创建了一个部署 - 但它没有显示在Web UI上。

当我从Web UI创建应用程序时 - 它们被创建为复制控制器。从功能上看,它们看起来非常相似(它们都管理pod并提供服务)。

那么 - 有什么区别我应该在何时使用它们?

6 个答案:

答案 0 :(得分:43)

部署是一种比复制控制器更新,更高级别的概念。它们管理副本集的部署(也是一个较新的概念,但几乎与复制控制器等效),并允许轻松更新副本集以及回滚到先前部署的能力。

以前必须使用kubectl rolling-update来完成,这不是声明性的,也没有提供回滚功能。

Kubernetes Dashboard尚未更新以支持部署,目前仅支持复制控制器(请参阅Deployments not visible in Kubernetes Dashboard)。

编辑:仪表板现在支持部署。

答案 1 :(得分:8)

Deployments仍然处于测试阶段(他们的API位于extensions/v1beta1下),这可能是他们未在UI中显示的原因。它们在保持pod活着的基础上自动化状态转换。从链接页面:

  

部署为Pod和副本集提供声明性更新   (下一代复制控制器)。你只需要   描述部署对象和部署中的所需状态   控制器将实际状态改变为a所需的状态   控制率你。您可以定义“部署”以创建新部署   资源,或用新资源替换现有资源。

它们还提供了推出历史记录和其他有用的功能。

$ kubectl rollout history deployment/nginx-deployment
deployments "nginx-deployment":
REVISION    CHANGE-CAUSE
1           kubectl create -f docs/user-guide/nginx-deployment.yaml --record
2           kubectl apply -f docs/user-guide/new-nginx-deployment.yaml
3           kubectl apply -f docs/user-guide/bad-nginx-deployment.yaml

它也会跟踪变化。

$ kubectl rollout history deployment/nginx-deployment --revision=2
deployments "nginx-deployment" revision 2
Labels:     app=nginx,pod-template-hash=1564180365
Annotations:    kubernetes.io/change-cause=kubectl apply -f docs/user-guide/new-nginx-deployment.yaml
Image(s):   nginx:1.9.1
No volumes.

答案 2 :(得分:7)

现在使用release 1.1仪表板确实支持部署。您可以部署或更新仪表板,而无需等待k8的1.3版本。例如,您可以使用我们刚刚更改的official YAML来使用今天的部署。

一般情况下,我建议(以及Google和Kubernetes贡献者也这样做)使用部署而不是使用部署,因为它们是一个更强大的原语(包括滚动更新,版本控制/审计,canaray /绿蓝部署,回滚等。)。

答案 3 :(得分:2)

仪表板(网页用户界面)经过重新设计,以支持管理更多资源(例如DeploymentsDaemonSets等),而且当前的信息中心对{{1 }}

kubernetes 1.3将很快支持在仪表板中管理部署(请参阅问题Feature request: handle Deployments)。

答案 4 :(得分:2)

根据我的经验,部署不提供我需要的所有功能。或者,也许,我正以错误的方式使用它们。

当需要重新启动节点服务器时 - 通过部署启动在该服务器上运行的所有pod - 都会失败。我无法找到避免这种情况的方法。

但是,

Think解决方案是一个复制控制器。至少在描述中写道它处理这种情况。

我认为,主要的部署优势是您需要不断更改应用版本。

所以两种方式都很好,但出于不同的原因。

答案 5 :(得分:0)

这是4年前于2016年开始提出的问题的最新 2020年答案

2017年给出了很好的答案 https://www.mirantis.com/blog/kubernetes-replication-controller-replica-set-and-deployments-understanding-replication-options/

现在我们处于 Kubernetes版本-1.17 ,我们提供了3种类型

部署(推荐)

Deployment是一个更高级别的API对象,它以类似于kubectlrolling-update的方式更新其基础副本集及其Pod。如果您需要这种滚动更新功能,则建议部署,因为与kubectl滚动更新不同,它们是声明性的,服务器端的,并且具有其他功能。

ReplicaSet

ReplicaSet是下一代ReplicationController,它支持新的基于集合的标签选择器。部署主要将其用作协调Pod创建,删除和更新的机制。请注意,除非您需要自定义更新编排或完全不需要更新,否则我们建议使用部署而不是直接使用副本集。

ReplicationController(不推荐)

确保任何时候都在运行指定数量的Pod副本。换句话说,ReplicationController确保一个容器或一组相同的容器始终处于可用状态。