[Kubernetes] Labels and Selector


서론

Kubernetes 입장에서는 파드, 서비스, ReplicaSet, Deployment들이 모두가 서로 다른 오브젝트들이다.

시간이 지남에 따라 클러스터 안에 수백 개, 수천 개의 오브젝트가 쌓일 수 있는데 그때는 서로 다른 기준에 따라 오브젝트를 필터링하고 조회할 수 있는 방법이 필요하다.

예를들어 오브젝트를 유형별로, 애플리케이션별로, 기능별로 구분해서 볼 수 있어야 한다.

어떤 기준이든, 라벨과 셀렉터를 사용하면 오브젝트를 그룹화하고 선택할 수 있다.

Labels와 Selectors

  • 쿠버네티스 객체(Pod, Replicaset, Servive 등)를 분류하고 선택하기 위해 사용된다.
  • metadata 항목 아래에 labels 섹션을 통해 라벨을 설정할 수 있다.
  • Labels: 객체에 부착되는 key=value 형태의 속성 (예: app=web, tier=frontend)
  • Selectors: 특정 라벨 조건에 맞는 객체들을 선택하기 위해 사용
  • 파드에 여러 라벨이 설정되어있고 Selector에서는 한개의 라벨만을 필터한다고 하더라도 라벨의 key, value가 일치하면 해당 파드를 관리한다.
    # Replicaset Selector
    selector:
      matchLabels:
        app: nginx
    
    # Pod labels
    labels:
      app: nginx
      env: production
      team: frontend

쿠버네티스는 라벨과 셀렉터를 활용해 객체 간 관계를 연결한다.

  • 라벨과 셀렉터의 한 가지 사용 사례: ReplicaSet → Pod 연결 시
    • Pod에 라벨을 설정하고, ReplicaSet의 selector가 그 라벨을 참조함
    apiVersion: apps/v1
    kind: ReplicaSet
    metadata:
      name: my-replicaset
      labels:
        purpose: demo        # ← ReplicaSet 라벨
    spec:
      replicas: 3
      selector:
        matchLabels:
          app: nginx         # ← 이 라벨이 붙은 Pod만 관리 대상
      template:
        metadata:
          labels:
            app: nginx       # ← Pod에 붙는 라벨 (Selector와 반드시 일치!)
        spec:
          containers:
          - name: nginx
            image: nginx:1.21
            ports:
            - containerPort: 80

Annotation은 선택/분류 목적이 아닌 부가 정보를 기록하기 위한 필드이다.

  • 사용 예시: 도구 이름, 버전, 빌드 정보, 연락처 등 필요한 정보를 기록하는 데 쓰인다.
  • 단순 조회용 정보이며 셀렉터로 선택하거나 필터링하는 데 사용되지 않는다.