You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

规格相同的两个Deployment,ReplicaSet如何识别自身所属Pod?

问题背景

以下是两个仅名称不同的Deployment配置:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: deployment-1
spec:
  replicas: 2
  selector:
    matchLabels:
      app: myapp
  template:
    metadata:
      labels:
        app: myapp
    spec:
      containers:
      - name: myapp
        image: nginx:1.11

---

apiVersion: apps/v1
kind: Deployment
metadata:
  name: deployment-2
spec:
  replicas: 2
  selector:
    matchLabels:
      app: myapp
  template:
    metadata:
      labels:
        app: myapp
    spec:
      containers:
      - name: myapp
        image: nginx:1.11

应用配置后,生成两个Deployment和对应的ReplicaSet:

kubectl get replicasets
NAME                      DESIRED   CURRENT   READY   AGE
deployment-1-8684779b48   2         2         2       34m
deployment-2-8684779b48   2         2         2       34m

两个ReplicaSet的描述信息如下:

ReplicaSet deployment-1-8684779b48

kubectl describe replicaset deployment-1
Name:           deployment-1-8684779b48
Namespace:      default
Selector:       app=myapp,pod-template-hash=8684779b48
Labels:         app=myapp
                pod-template-hash=8684779b48
Annotations:    deployment.kubernetes.io/desired-replicas: 2
                deployment.kubernetes.io/max-replicas: 3
                deployment.kubernetes.io/revision: 1
Controlled By:  Deployment/deployment-1
Replicas:       2 current / 2 desired
Pods Status:    2 Running / 0 Waiting / 0 Succeeded / 0 Failed
Pod Template:
  Labels:  app=myapp
           pod-template-hash=8684779b48
  Containers:
   myapp:
    Image:        nginx:1.11
    Port:         <none>
    Host Port:    <none>
    Environment:  <none>
    Mounts:       <none>
  Volumes:        <none>
Events:
  Type    Reason            Age   From                   Message
  ----    ------            ----  ----                   -------
  Normal  SuccessfulCreate  35m   replicaset-controller  Created pod: deployment-1-8684779b48-ngm5l
  Normal  SuccessfulCreate  35m   replicaset-controller  Created pod: deployment-1-8684779b48-5fz94
  Normal  SuccessfulCreate  34m   replicaset-controller  Created pod: deployment-1-8684779b48-svphx
  Normal  SuccessfulCreate  33m   replicaset-controller  Created pod: deployment-1-8684779b48-q7lh5

ReplicaSet deployment-2-8684779b48

kubectl describe replicaset deployment-2
Name:           deployment-2-8684779b48
Namespace:      default
Selector:       app=myapp,pod-template-hash=8684779b48
Labels:         app=myapp
                pod-template-hash=8684779b48
Annotations:    deployment.kubernetes.io/desired-replicas: 2
                deployment.kubernetes.io/max-replicas: 3
                deployment.kubernetes.io/revision: 1
Controlled By:  Deployment/deployment-2
Replicas:       2 current / 2 desired
Pods Status:    2 Running / 0 Waiting / 0 Succeeded / 0 Failed
Pod Template:
  Labels:  app=myapp
           pod-template-hash=8684779b48
  Containers:
   myapp:
    Image:        nginx:1.11
    Port:         <none>
    Host Port:    <none>
    Environment:  <none>
    Mounts:       <none>
  Volumes:        <none>
Events:
  Type    Reason            Age   From                   Message
  ----    ------            ----  ----                   -------
  Normal  SuccessfulCreate  36m   replicaset-controller  Created pod: deployment-2-8684779b48-w4zws
  Normal  SuccessfulCreate  36m   replicaset-controller  Created pod: deployment-2-8684779b48-nfzxb

查看匹配标签的Pod:

kubectl get pods -l app=myapp -l pod-template-hash=8684779b48
NAME                            READY   STATUS    RESTARTS   AGE
deployment-1-8684779b48-q7lh5   1/1     Running   0          38m
deployment-1-8684779b48-svphx   1/1     Running   0          39m
deployment-2-8684779b48-nfzxb   1/1     Running   0          40m
deployment-2-8684779b48-w4zws   1/1     Running   0          40m

问题

两个ReplicaSet的选择器完全相同,Pod标签也一致,它们是如何确定哪些Pod属于自己的?是否依赖ReplicaSet输出中的Events:信息?

解答

  • Pod归属判断依赖ownerReferences字段,而非Events或标签选择器
    每个由ReplicaSet创建的Pod,其metadata.ownerReferences字段会包含该ReplicaSet的唯一标识信息(如UID、名称、API版本等)。ReplicaSet控制器通过这个字段识别哪些Pod是自己创建并需要管理的——标签选择器只是用来筛选候选Pod,但最终只会处理属于自己的Pod。

  • Events仅为操作日志,不参与Pod归属判断
    ReplicaSet的Events只是记录控制器的操作历史(比如创建Pod的动作),仅用于排查问题,不会作为判断Pod归属的依据。即使Events被清空,ReplicaSet依然能通过ownerReferences准确识别自己的Pod。

举个例子,查看任意一个Pod的ownerReferences:

kubectl get pod deployment-1-8684779b48-q7lh5 -o jsonpath='{.metadata.ownerReferences}'

输出会明确指向对应的ReplicaSetdeployment-1-8684779b48,这就是两个ReplicaSet区分Pod的核心依据。


内容的提问来源于stack exchange,提问作者samshers

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 17:08:12