updated_at: 2025-07-02 01:30

metadata.labels vs. spec.selector.matchLabels vs. containers.name

쿠버네티스를 쓰다 보면 matchLabels와 metadata.labels가 자주 등장하는데, 혼동되기 쉽습니다. 이 둘은 용도와 위치가 다릅니다.

matchLabels와 metadata.labels

항목 metadata.labels spec.selector.matchLabels
역할 오브젝트에 레이블을 부여 오브젝트를 선택(Selector) 하기 위한 조건
주 사용 위치 모든 오브젝트의 metadata.labels (ex. Pod, Service, Deployment 등) Deployment, Service, ReplicaSet의 selector 안
의미 이 리소스는 어떤 "속성"을 갖는다 이 리소스를 어떤 기준으로 "선택"할지 정의
예시 labels: app: myapp → "이것은 myapp이다" matchLabels: app: myapp → "app이 myapp인 pod만 선택"

예제

아래는 3개의 myapp 이라는 것이 나온다.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-deployment
  labels:
    app: myapp         # 이 deployment 자체의 label
spec:
  selector:
    matchLabels:
      app: myapp       # 어떤 Pod를 관리할지 고르는 기준 (Selector)
  template:
    metadata:
      labels:
        app: myapp     # 생성되는 Pod에 이 label이 부여됨
    spec:
      containers:
        - name: nginx
          image: nginx

metadata.name vs metadata.labels

항목 metadata.name metadata.labels
역할 오브젝트의 고유한 이름(식별자) 오브젝트에 붙이는 분류 태그
유일성 클러스터 내에서 고유해야 함 여러 리소스가 같은 label 공유 가능
목적 해당 오브젝트를 명시적으로 지칭하기 위해 리소스를 선택하거나 그룹짓기 위해 사용
예시 명령 kubectl get deployment my-deploy kubectl get pods -l app=myapp
평점을 남겨주세요
평점 : 2.5
총 투표수 : 1

질문 및 답글