【问题标题】:Two Kubernetes Deployments with exactly the same pod labels具有完全相同 pod 标签的两个 Kubernetes 部署
【发布时间】:2021-10-28 13:29:56
【问题描述】:

假设我有两个部署,除了部署名称之外完全相同:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-d
spec:
  replicas: 3
  selector:
    matchLabels:
      app: mynginx
  template:
    metadata:
      labels:
        app: mynginx
    spec:
      containers:
      - name: nginx
        image: nginx
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-d2
spec:
  replicas: 3
  selector:
    matchLabels:
      app: mynginx
  template:
    metadata:
      labels:
        app: mynginx
    spec:
      containers:
      - name: nginx
        image: nginx

由于这两个部署具有相同的选择器和相同的 pod 模板,我希望看到三个 pod。但是,创建了六个 pod:

# kubectl get pods --show-labels
NAME                        READY   STATUS    RESTARTS   AGE     LABELS
nginx-d-5b686ccd46-dkpk7    1/1     Running   0          4m16s   app=mynginx,pod-template-hash=5b686ccd46
nginx-d-5b686ccd46-nz7wf    1/1     Running   0          4m16s   app=mynginx,pod-template-hash=5b686ccd46
nginx-d-5b686ccd46-vdtfr    1/1     Running   0          4m16s   app=mynginx,pod-template-hash=5b686ccd46
nginx-d2-5b686ccd46-nqmq7   1/1     Running   0          4m16s   app=mynginx,pod-template-hash=5b686ccd46
nginx-d2-5b686ccd46-nzrlc   1/1     Running   0          4m16s   app=mynginx,pod-template-hash=5b686ccd46
nginx-d2-5b686ccd46-qgjkn   1/1     Running   0          4m16s   app=mynginx,pod-template-hash=5b686ccd46

这是为什么呢?

【问题讨论】:

    标签: kubernetes deployment label


    【解决方案1】:

    考虑一下:Pod 不直接由部署管理,但部署管理 ReplicaSet。

    这可以使用验证

    kubectl get rs
    NAME                  DESIRED   CURRENT   READY   AGE
    nginx-d-5b686ccd46    3         3         3       74s
    nginx-d2-7c76fbbbcb   3         3         0       74s
    

    您可以通过指定选择器来选择要为副本集或部署考虑哪些 pod。除此之外,每个部署都添加了自己的标签,以便能够区分哪些 pod 由其自己的副本集管理,哪些由其他副本集管理。

    你也可以检查一下:

    kubectl get pods --show-labels  
    NAME                        READY   STATUS    RESTARTS   AGE   LABELS
    nginx-d-5b686ccd46-7j4md    1/1     Running   0          4m    app=mynginx,pod-template-hash=5b686ccd46
    nginx-d-5b686ccd46-9j7tx    1/1     Running   0          4m    app=mynginx,pod-template-hash=5b686ccd46
    nginx-d-5b686ccd46-zt4ls    1/1     Running   0          4m    app=mynginx,pod-template-hash=5b686ccd46
    nginx-d2-5b686ccd46-ddcr2   1/1     Running   0          75s   app=mynginx,pod-template-hash=5b686ccd46
    nginx-d2-5b686ccd46-fhvm7   1/1     Running   0          79s   app=mynginx,pod-template-hash=5b686ccd46
    nginx-d2-5b686ccd46-q99ww   1/1     Running   0          83s   app=mynginx,pod-template-hash=5b686ccd46
    

    这些作为匹配标签添加到副本集中:

    spec:
      replicas: 3
      selector:
        matchLabels:
          app: mynginx
          pod-template-hash: 5b686ccd46
    

    由于即使它们是相同的,您也可以检查 pod 并查看是否还有所有者引用:

    kubectl get pod nginx-d-5b686ccd46-7j4md -o yaml
    apiVersion: v1
    kind: Pod
    metadata:
      creationTimestamp: "2021-10-28T14:53:17Z"
      generateName: nginx-d-5b686ccd46-
      labels:
        app: mynginx
        pod-template-hash: 5b686ccd46
      name: nginx-d-5b686ccd46-7j4md
      namespace: default
      ownerReferences:
      - apiVersion: apps/v1
        blockOwnerDeletion: true
        controller: true
        kind: ReplicaSet
        name: nginx-d-5b686ccd46
        uid: 7eb8fdaf-bfe7-4647-9180-43148a036184
      resourceVersion: "556"
    

    更多信息可以在这里找到:https://kubernetes.io/docs/concepts/overview/working-with-objects/owners-dependents/

    因此,部署(和副本集)可以区分哪些 pod 由哪个管理,每个 pod 都可以确保所需的副本数量。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-20
    • 2019-03-08
    • 1970-01-01
    • 2020-06-02
    • 1970-01-01
    • 2020-07-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多