Kubernetes:Deployment 和 Replica set 有啥区别?
Posted
技术标签:
【中文标题】Kubernetes:Deployment 和 Replica set 有啥区别?【英文标题】:Kubernetes: what's the difference between Deployment and Replica set?Kubernetes:Deployment 和 Replica set 有什么区别? 【发布时间】:2021-11-25 14:17:56 【问题描述】:副本集和部署都有replica: 3
属性,部署和副本集有什么区别?部署是否通过底层的副本集进行?
部署配置
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-deployment
labels:
my-label: my-value
spec:
replicas: 3
selector:
matchLabels:
my-label: my-value
template:
metadata:
labels:
my-label: my-value
spec:
containers:
- name: app-container
image: my-image:latest
副本集的配置
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: my-replicaset
labels:
my-label: my-value
spec:
replicas: 3
selector:
matchLabels:
my-label: my-value
template:
metadata:
labels:
my-label: my-value
spec:
containers:
- name: app-container
image: my-image:latest
Kubernetes Documentation
何时使用 ReplicaSet
ReplicaSet 确保指定数量的 pod 副本在任何给定时间运行。然而,Deployment 是一个更高级别的概念,它管理 ReplicaSet 并为 Pod 提供声明式更新以及许多其他有用的功能。因此,我们建议使用 Deployment 而不是直接使用 ReplicaSet,除非您需要自定义更新编排或根本不需要更新。
这实际上意味着您可能永远不需要操作 ReplicaSet 对象:改为使用 Deployment,并在规范部分定义您的应用程序。
【问题讨论】:
这能回答你的问题吗? k8s - Why we need ReplicaSet when we have Deployments 感谢您提供相关问题。这真的很有帮助。该问题侧重于用法差异,除此之外,我还想知道一些事情。它假设Deployment
概念的发明早于ReplicaSet
概念。我不确定这个假设。
这篇文章解释了更多细节。 magalix.com/blog/kubernetes-deployments-101
副本集负责确保 pod 可用。部署负责通过控制一个或多个副本集来管理应用程序的不同版本。
【参考方案1】:
部署是一种更高的抽象,它管理一个或多个副本集以提供新版本的受控推出。
只要您没有正在进行的部署,部署就会产生一个副本集,其中复制因子由部署管理。
【讨论】:
【参考方案2】:部署资源可让您更轻松地将 pod 更新到新版本。
假设您使用 ReplicaSet-A 来控制您的 pod,那么您希望将您的 pod 更新到较新的版本,现在您应该创建 Replicaset-B,进行扩展向下 ReplicaSet-A 并重复放大 ReplicaSet-B 一步(此过程称为 滚动更新)。虽然这样做可以,但这不是一个好的做法,最好让 K8S 来完成。
部署资源会自动执行此操作,无需任何人工干预,并将抽象程度提高了一级。
注意:Deployment 不直接与 pod 交互,它只是使用 ReplicaSet 进行滚动更新。
【讨论】:
以上是关于Kubernetes:Deployment 和 Replica set 有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章
云原生 | kubernetes 资源对象 - 控制器模型之Deployment