Google compute engine Kubernetes中的复制控制器与部署

Google compute engine Kubernetes中的复制控制器与部署,google-compute-engine,kubernetes,google-kubernetes-engine,Google Compute Engine,Kubernetes,Google Kubernetes Engine,我想知道复制控制器和Kubernetes(1.2)中的部署之间的区别。在浏览getting started文档()时,我创建了一个部署,但它没有显示在web UI上 当我从web UI创建应用程序时,它们被创建为复制控制器。不过,从功能上看,它们似乎非常相似(它们都管理豆荚并提供服务) 那么-有什么区别?我应该在什么时候使用它们?仍处于测试阶段(它们的API在扩展/v1beta1下),这可能就是它们没有显示在UI中的原因。它们在保持吊舱存活的基础上自动进行状态转换。从链接页面: 部署为POD和副

我想知道复制控制器和Kubernetes(1.2)中的部署之间的区别。在浏览getting started文档()时,我创建了一个部署,但它没有显示在web UI上

当我从web UI创建应用程序时,它们被创建为复制控制器。不过,从功能上看,它们似乎非常相似(它们都管理豆荚并提供服务)

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

仍处于测试阶段(它们的API在
扩展/v1beta1
下),这可能就是它们没有显示在UI中的原因。它们在保持吊舱存活的基础上自动进行状态转换。从链接页面:

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

它们还提供卷展历史记录和其他有用的功能

$ 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.

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

以前,这必须通过
kubectl滚动更新
完成,该更新不是声明性的,并且不提供回滚功能

$ 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
Kubernetes仪表板尚未更新以支持部署,目前仅支持复制控制器(请参阅)

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

仪表板(web UI)经过了大量重新设计,以支持管理更多资源(如
部署
守护程序
,等等),而当前仪表板不允许太多关于
部署的内容

kubernetes 1.3将很快支持在仪表板中管理部署(请参阅问题)

现在,仪表板支持部署。您可以部署或更新仪表板,而无需等待k8s的1.3版本。例如,您可以使用,我们今天刚刚将其更改为使用部署


一般来说,我建议(Google和Kubernetes贡献者也建议)使用RCs上的部署,因为它们是一种功能更强大的原语(包括滚动更新、版本控制/审核、canaray/green-blue部署、回滚等)。

根据我的经验,部署并没有提供我需要的所有功能。或者,也许,我用错了它们

当需要重新启动节点服务器时(该服务器上运行的所有POD都是由部署启动的),请不要失败。我找不到办法来避免这种情况

但是,

我们认为解决方案是一个复制控制器。至少在描述中,它是用来处理这种情况的

在我看来,主要的部署优势是当您需要不断更改应用程序的版本时

因此,这两种方法都是好的,但原因不同。

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

2017年给出了一个很好的答案

现在我们使用的是Kubernetes版本-1.17,我们有3种类型

部署(推荐)

部署是一个更高级别的API对象,它以与kubectl滚动更新类似的方式更新其底层副本集及其POD。如果需要此滚动更新功能,建议进行部署,因为与kubectl滚动更新不同,它们是声明性的服务器端部署,并具有其他功能

$ 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
复制集

ReplicaSet是支持新的基于集合的标签选择器的下一代ReplicationController。它主要被部署用作协调pod创建、删除和更新的机制。请注意,我们建议使用部署而不是直接使用副本集,除非您需要自定义更新业务流程或根本不需要更新

复制控制器(不推荐)


确保在任何时间运行指定数量的pod副本。换句话说,ReplicationController确保一个pod或一组同类的pod始终处于可用状态。

那么,是否应该将部署用于较新的应用程序?另外-是否有任何方法可以使用kubectl cli获取部署/其POD(CPU、mem使用)的统计信息?就我个人而言,由于缺少仪表板支持,我一直推迟使用部署。我不知道有任何这样的命令存在-我想你必须以某种方式直接查询。你可以使用
kubectl get deployments
kubectl description deployments
,和
kubectl get pods-l
@janetkuo AFAIK获得部署的统计数据。这些命令中没有一个会实际显示CPU或内存使用情况,但是如果我遗漏了什么,请告诉我。@PixelElephant我遗漏了您正在查找CPU/内存使用率的事实。我们现在没有这种命令,但是我们计划添加
kubectl-top
命令来支持这一点。请随意评论。顺便说一句,我最近写了一篇关于部署以及为什么使用它们的博文:在这种情况下,Replication Controller和部署之间没有区别(毕竟部署只是副本集的包装)。您要做的是在重新启动节点之前关闭它。一旦它恢复运行,您可以让它重新开始接受POD。如果节点意外失败,如何处理它?我是说,如果我没有机会抽干它?