【问题标题】: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,并在规范部分定义您的应用程序。

【问题讨论】:

  • 感谢您提供相关问题。这真的很有帮助。该问题侧重于用法差异,除此之外,我还想知道一些事情。它假设Deployment 概念的发明早于ReplicaSet 概念。我不确定这个假设。
  • 这篇文章解释了更多细节。 magalix.com/blog/kubernetes-deployments-101
  • 副本集负责确保 pod 可用。部署负责通过控制一个或多个副本集来管理应用程序的不同版本。

标签: kubernetes


【解决方案1】:

部署是一种更高的抽象,它管理一个或多个副本集以提供新版本的受控推出。

只要您没有正在进行的部署,部署就会产生一个副本集,其中复制因子由部署管理。

【讨论】:

    【解决方案2】:

    部署资源可让您更轻松地将 pod 更新到新版本。

    假设您使用 ReplicaSet-A 来控制您的 pod,那么您希望将您的 pod 更新到较新的版本,现在您应该创建 Replicaset-B,进行扩展向下 ReplicaSet-A 并重复放大 ReplicaSet-B 一步(此过程称为 滚动更新)。虽然这样做可以,但这不是一个好的做法,最好让 K8S 来完成。

    部署资源会自动执行此操作,无需任何人工干预,并将抽象程度提高了一级。

    注意:Deployment 不直接与 pod 交互,它只是使用 ReplicaSet 进行滚动更新。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-05
      • 2016-08-08
      • 2013-04-19
      • 1970-01-01
      • 1970-01-01
      • 2023-04-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多