K8s 레이블 셀렉터

1 개요[ | ]

k8s Label Selector
K8s 레이블 셀렉터
  • 쿠버네티스에서 오브젝트 집합을 식별하기 위한 핵심 그룹화 수단
  • 레이블은 이름(name)이나 UID처럼 유일성을 보장하지 않으며, 일반적으로 여러 오브젝트가 동일한 레이블을 가질 수 있다.
  • 셀렉터를 사용하면 사용자가 원하는 레이블 패턴을 만족하는 오브젝트 집합을 조회·선택할 수 있다.

  • 하나의 셀렉터는 여러 조건(requirement)으로 구성될 수 있으며, 조건들은 쉼표(,)로 구분된다.
  • 여러 조건이 주어졌을 경우 **모두 만족해야 하므로** 쉼표는 논리 AND (&&) 연산자로 동작한다.
  • OR (||) 연산자는 지원되지 않으므로, 조건을 작성할 때 주의가 필요하다.
  • 셀렉터가 비어 있거나 명시되지 않은 경우의 의미는 API 리소스별로 다르며, 각 API 리소스 문서에서 정의된다.
  • 일부 리소스(예: ReplicaSet)에서는 두 인스턴스의 레이블 셀렉터가 네임스페이스 내에서 겹치면 충돌이 발생할 수 있다.

2 유형[ | ]

현재 Kubernetes API는 두 가지 유형의 셀렉터를 지원한다.

2.1 Equality-based 셀렉터[ | ]

  • 특정 키의 값이 일치(=, ==)하거나 불일치(!=)하는 오브젝트를 선택한다.
  • 해당 조건을 만족하는 리소스는 선택되지만, 그 외 다른 레이블이 추가로 있어도 무방하다.

예시:

environment = production
tier != frontend
  • environment=productionenvironment 키의 값이 production인 모든 리소스 선택
  • tier!=frontendtier 값이 frontend가 아니거나 tier 키가 아예 없는 리소스 선택
  • 두 조건을 함께 쓰면: environment=production,tier!=frontend → production 환경이면서 frontend가 아닌 리소스 선택

Pod의 nodeSelector 예시:

apiVersion: v1
kind: Pod
metadata:
  name: cuda-test
spec:
  containers:
    - name: cuda-test
      image: "registry.k8s.io/cuda-vector-add:v0.1"
      resources:
        limits:
          nvidia.com/gpu: 1
  nodeSelector:
    accelerator: nvidia-tesla-p100

2.2 Set-based 셀렉터[ | ]

  • 키의 값이 특정 집합에 포함되거나 포함되지 않는지, 혹은 키 자체의 존재 여부만 확인한다.
  • 지원 연산자: in, notin, exists(key만 지정), !(존재하지 않음)

예시:

environment in (production, qa)
tier notin (frontend, backend)
partition
!partition
  • environment in (production, qa) → environment가 production 또는 qa인 리소스 선택
  • tier notin (frontend, backend) → tier 값이 frontend/backend가 아니거나 tier 키가 없는 리소스 선택
  • partition → partition 키가 존재하는 모든 리소스 선택 (값은 무관)
  • !partition → partition 키가 존재하지 않는 리소스 선택

여러 조건을 함께 쓰면 AND로 동작한다: partition,environment notin (qa) → partition 키가 존재하고 environment ≠ qa인 리소스 선택

3 혼합 사용[ | ]

  • Equality-based와 Set-based 조건은 혼합해서 사용할 수 있다.

예시: partition in (customerA, customerB),environment!=qa → partition이 customerA 또는 customerB이고, environment가 qa가 아닌 리소스 선택

4 같이 보기[ | ]

문서 댓글 ({{ doc_comments.length }})
{{ comment.name }} {{ comment.created | snstime }}