我想了解Kubernetes(1.2)中Replication Controller 和 Deployment的区别。阅读了入门文档(http://kubernetes.io/docs/hellonode/)后,我创建了一个Deployment,但它在Web UI上没有显示。
当我从Web UI创建应用程序时,它们被创建为复制控制器。然而它们在功能上似乎非常相似(它们都管理pod和service)。
那么,这两者有什么区别,我该在什么情况下使用它们呢?
我想了解Kubernetes(1.2)中Replication Controller 和 Deployment的区别。阅读了入门文档(http://kubernetes.io/docs/hellonode/)后,我创建了一个Deployment,但它在Web UI上没有显示。
当我从Web UI创建应用程序时,它们被创建为复制控制器。然而它们在功能上似乎非常相似(它们都管理pod和service)。
那么,这两者有什么区别,我该在什么情况下使用它们呢?
部署是比复制控制器更高级的概念。它们负责管理副本集的部署(也是一个新概念,但与复制控制器几乎相同),并允许轻松更新副本集以及回滚到先前的部署。
以前,需要使用 kubectl rolling-update
进行操作,但这种方法不太规范,并且没有提供回滚功能。
Kubernetes Dashboard尚未更新支持部署,目前仅支持复制控制器(请参见Deployments not visible in Kubernetes Dashboard)。
编辑:现在面板已支持部署。
这里是关于在4年前开始提出的问题的最新答案——2020年答案
2017年有一个很好的回答,您可以查看以下链接:https://www.mirantis.com/blog/kubernetes-replication-controller-replica-set-and-deployments-understanding-replication-options/
现在我们使用的是Kubernetes 1.17版本,它包括3种类型:
Deployment(推荐)
Deployment是一种更高级别的API对象,类似于kubectl rolling-update方式更新其底层的Replica Sets和Pods。如果需要滚动更新功能,则建议使用Deployments,因为与kubectl rolling-update不同,它们是声明式、服务器端的,并且具有其他功能。
ReplicaSet
ReplicaSet是下一代ReplicationController,支持新的基于集合的标签选择器。它主要由Deployment用作协调Pod创建、删除和更新的机制。请注意,除非需要自定义更新协调或根本不需要更新,否则我们建议使用Deployments而不是直接使用Replica Sets。
ReplicationController(不推荐使用)
ReplicationController(复制控制器)是 Kubernetes 中一种用来确保在任何时候指定数量的 Pod 副本都在运行的机制。换句话说,它可以确保一个 Pod 或者一组同质的 Pods 始终处于可用状态。
部署仍处于beta版(其API位于extensions/v1beta1
下),这可能是为什么它们不在UI中显示的原因。它们在保持Pod存活的基础上自动化状态转换。来自链接页面:
部署提供Pod和Replica Set(下一代复制控制器)的声明性更新。您只需要在部署对象中描述所需状态,部署控制器将以受控速率将实际状态更改为所需状态。您可以定义部署以创建新资源或通过新资源替换现有资源。
它们还提供了回滚历史记录和其他有用功能。
$ 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.
根据我的经验,部署并不能提供我所需的全部功能。或者说,也许是我使用它们的方式不正确。
当需要重新启动节点服务器时 - 所有由部署启动的 pod 都会失败。我找不到避免这种情况的方法。
但是,
我认为解决方案是复制控制器。至少在描述中写明了它处理这种情况。
我认为主要的部署优势在于你需要不断更改应用程序版本时。
因此,两种方式都是好的,但出于不同的原因。
仪表盘(Web UI)已经进行了大规模的重新设计,以支持管理更多资源(例如Deployments
和DaemonSets
等),当前的仪表盘在Deployments
方面的支持非常有限。
在Kubernetes 1.3中,将很快支持在仪表板中管理部署(请参见问题功能请求:处理部署)。
kubectl get deployments
、kubectl describe deployments
和kubectl get pods -l <在部署 pod spec 中放置的标签,例如 foo=bar>
获取部署的统计信息。 - janetkuokubectl top
命令来支持此功能。请随时在相关问题中发表评论。 - janetkuo