본문 바로가기

CKA

[k8s] Label

728x90

Label 이란?

쿠버네티스에서 Label은 리소스(Deployment/Pod/Service 등)에 붙이는 키-값(key=value) 태그다.

라벨 자체는 "동작"을 만들진 않지만, 쿠버네티스는 라벨을 이용해서 대상을 선택하고 그룹화 한다.

 

라벨이 중요한 이유는 대표적으로 아래 기능들이 라벨을 사용하기 때문:

  • Service selector: 어떤 Pod로 트래픽을 보낼지 선택
  • Deployment / ReplicaSet selector: 어떤 Pod를 관리할지 선택
  • (그 외) NetworkPolicy, affinity/anti-affinity, monitoring 필터링 등

Label 조회 기본 3종

1) 전체 라벨 같이 보기

kubectl get pods --show-labels

2) 특정 라벨을 컬럼으로 추가해서 보기(-L)

-L은 “표에 컬럼으로 보여주는 옵션”이다.

 kubectl get pods -L app -L tier

3) 특정 라벨만 필터링해서 보기(-l)

-l은 “라벨 셀렉터로 골라서 조회”한다.

kubectl get pods -l app=web

✅ 정리

  • -l(소문자 L) = 필터링(선택)
  • -L(대문자 L) = 표에 컬럼 표시

라벨 추가/수정/삭제 (자주 쓰는 커맨드)

Pod에 라벨 추가

kubectl label pod <POD_NAME> app=web

Deployment에 라벨 추가

kubectl label deploy <DEPLOY_NAME> app=web

이미 라벨이 있는데 바꾸기 (--overwrite)

kubectl label deploy <DEPLOY_NAME> app=api --overwrite

라벨 삭제 (키 뒤에 -)

kubectl label pod <POD_NAME> app-

"Deployment에 라벨 붙이면 Pod도 붙나?"

여기서 많이 헷갈린다.

  • kubectl label deploy web app=web
    → Deployment 리소스 자체의 metadata.labels에 라벨이 붙는다.

하지만 Service가 Pod를 붙일 때 보는 건 Deployment 라벨이 아니라 Pod 라벨이다.

Pod 라벨이 어디서 오냐?

Deployment는 내부에 spec.template.metadata.labels(Pod 템플릿 라벨)을 가지고 있고,

이 템플릿 라벨을 실제로 생성되는 Pod에 복사된다.

 

따라서 "Service selector를 맞추려면"결국 아래를 맞춰야 한다.

  • Service의 spec.selector
  • Pod의 metadata.labels (실제로는 Deployment 템플릿 라벨)

확인하는 방법

kubectl get deploy web -o yaml | grep -n "labels" -n
kubectl get pods -l app=web --show-labels

 

728x90