k8sのlabelsが色々ある件

https://kubernetes.io/docs/concepts/workloads/controllers/deployment/

例えば ↑ のドキュメントから拝借した Deployment に、metadata.labels, spec.selector.matchLables,spec.template.metadata.labelsの 3 つがある。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
        - name: nginx
          image: nginx:1.14.2
          ports:
            - containerPort: 80

それぞれ、以下のような役割になっているようだ。

  • metadata.labels
    • Deployment 自体に付与される label
  • spec.selector.matchLabel
    • Deployment に所属させる対象の Pod の label
  • spec.template.metadata.labels
    • Pod に付与される label

特にmatchLabeltemplate.metadata.labelから拝借してくれないのか、という疑問はある。

が、Deployment 自体が ReplicaSet、ひいては Pod のラッパー?みたいなものだと考えると、まあそんなもんかとも思う。

#参考