Google compute engine Kubernetes中的复制控制器与部署
我想知道复制控制器和Kubernetes(1.2)中的部署之间的区别。在浏览getting started文档()时,我创建了一个部署,但它没有显示在web UI上 当我从web UI创建应用程序时,它们被创建为复制控制器。不过,从功能上看,它们似乎非常相似(它们都管理豆荚并提供服务) 那么-有什么区别?我应该在什么时候使用它们?仍处于测试阶段(它们的API在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和副
扩展/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。如果节点意外失败,如何处理它?我是说,如果我没有机会抽干它?