【问题标题】:Does ReplicaSets replace Pods?ReplicaSets 会取代 Pods 吗?
【发布时间】:2019-07-20 14:04:44
【问题描述】:

我有一个概念性问题,ReplicaSet 是否使用 Pod 设置? 在我应用我的 ReplicaSets 之前,我删除了我的 Pod,所以没有关于我的旧 Pod 的信息? 如果我现在应用 Replicaset 是否引用 Pod 设置,那么所有设置都像 readinessProbe/livenessProbe ... ? 我的问题出现了,因为在我的 replicaset.yml 中是一个容器部分,我在其中指定了我的 docker 映像,但是为什么它需要该信息,这不是冗余信息吗,因为该信息在我的 pods.yml 中?

apiVersion: extensions/v1beta1
kind: ReplicaSet
metadata:
  name: test1
spec:
  replicas: 2
  template:
    metadata:
      labels:
        app: web
    spec:
      containers:
      - name: test1
        image: test/test

【问题讨论】:

    标签: kubernetes


    【解决方案1】:

    Pod 是最小的可部署计算单元 在 Kubernetes 中创建和管理。

    豆荚(如鲸鱼荚或豌豆荚)是由一个或多个 具有共享存储/网络的容器(例如 Docker 容器), 以及如何运行容器的规范。

    见,https://kubernetes.io/docs/concepts/workloads/pods/pod/

    因此,您可以指定 Pod 的调度方式(一个或多个容器、端口、探测器、卷等)。 但是如果出现节点故障或任何可能损害 Pod 的不良情况,则不会重新调度该 Pod(您必须手动重新调度)。因此,在这种情况下,您需要一个控制器。 Kubernetes 提供了一些控制器(每个控制器用于不同的目的)。他们是——

    1. ReplicaSet
    2. ReplicationController
    3. Deployment
    4. StatefulSet
    5. DaemonSet
    6. Job
    7. CronJob

    以上所有的控制器和 Pod 一起被称为 Workload。因为他们都有一个podTemplate 部分。它们都创建了一些由spec.replicas 字段指定的相同 Pod 组合(如果该字段存在于相应的工作负载清单中)。它们都是比 Pod 更上层的概念。

    虽然DeploymentReplicaSet 更合适,但此答案侧重于ReplicaSet 而不是Pod,因为问题在PodReplicaSet 之间。

    此外,上述每个控制器都有自己的用途。就像 ReplicaSet 的目的是维护在任何给定时间运行的一组稳定的副本 Pod。因此,它通常用于保证指定数量的相同 Pod 的可用性。

    ReplicaSet 包含一个 podTemplate 字段,其中包括用于识别和获取 Pod 的选择器。一个 Pod 模板,指定它应该创建的新 Pod 的配置以满足副本数量标准。它会根据需要创建和删除 Pod,以达到所需的数量。当 ReplicaSet 需要创建新的 Pod 时,它会使用其 Pod 模板。

    由 ReplicaSet 维护的 Pod 有 metadata.ownerReferences 字段,用于告诉哪个资源拥有当前 Pod。

    ReplicaSet 使用其选择器标识要获取的新 Pod。如果有一个 Pod 没有 OwnerReference 或者 OwnerReference 不是一个控制器,并且它匹配到一个 ReplicaSet 的选择器,它会立即被该 ReplicaSet 获取。

    参考:https://kubernetes.io/docs/concepts/workloads/controllers/replicaset/

    **

    现在,是时候回答你的问题了

    由于 ReplicaSet 是 Pod 控制器之一(如上所列),显然,它需要一个 podTemplate(使用此模板,您的 Pod 将被调度)。 ReplicaSet 创建的所有 Pod 都将具有相同的 Pod 配置(相同的容器、相同的端口、相同的 readiness/livelinessProbe、卷等)。拥有这个podTemplate 并不是多余的信息,它是必需的。所以,如果你有一个像 ReplicaSet 或其他(根据你的需要)的 Pod 控制器,你就不再需要 Pod 本身了。因为 ReplicaSet(或其他控制器)将创建 Pod。

    **

    猜猜,你得到了答案。

    【讨论】:

    • 并在帖子中添加注释,告诉DeploymentReplicaSet 更合适。
    • 我相信在 OP 的问题的背景下,它是“多余的”,因为 OP 的期望结果不是拥有多个不同的 pod。一旦他配置了包含 Pod 规范的 ReplicaSet 类型,他就不需要 Pod 类型并替换它。
    【解决方案2】:

    ReplicaSet 会取代 Pod 吗?

    是的,如果您有 replicaset.yml,则不需要 pods.yml

    我有一个概念性问题,ReplicaSet 是否使用 Pod 设置? 在我应用我的 ReplicaSets 之前,我删除了我的 Pod,所以没有 关于我的旧 Pod 的信息?如果我现在申请 Replicaset 这个对 Pod 设置的引用,所以所有设置都像 readinessProbe/livenessProbe ... ?

    不,ReplicaSet 清单必须包含 Pod 规范,以确定应部署的 pod 的配置。

    使用标签,您可以将 ReplicaSet 链接到正在运行的 Pod。 您不会将 ReplicaSet.yml 清单链接到 Pods.yml 清单。

    如果可以避免,请不要使用裸 Pod(即未绑定到 ReplicaSet 或 Deployment 的 Pod)。如果节点发生故障,裸 Pod 将不会被重新调度。

    在 99% 的情况下,没有单独的 pods.yml 清单。 pod + ReplicaSet 定义在单个清单中,因此在 replicaset.yml 中的 containers 部分。

    【讨论】:

    • 好的,如果所有内容都在单个清单中定义,我可以在副本清单中定义一个 livenessProbe、readinessProbe 或端口吗?
    • 是的,你可以。副本集包含 podtemplate 部分,其中也有这些。
    • 这真的会让你大吃一惊……deployment 取代了replicaSet
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-08-21
    • 2015-09-24
    • 1970-01-01
    • 2011-10-18
    • 1970-01-01
    • 1970-01-01
    • 2014-02-19
    相关资源
    最近更新 更多