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

k8s 概念Kubernetes Deployment

云原生 | kubernetes 资源对象 - 控制器模型之Deployment

16.Kubernetes之Deployment

2021完整版:Kubernetes Deployment故障排除的可视化指南

基于生成环境tomcat的Kubernetes的deployment使用