规格相同的两个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
相关产品推荐
相关产品推荐

