🏷 Kubernetes Deployment에서 Label로 엮이는 구조 이해하기
2026. 2. 21. 19:42ㆍk8s
다음 Deployment 예제를 보자.
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: nginx
name: nginx
namespace: test
spec:
replicas: 2
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- image: nginx:1.18.0
name: nginx
ports:
- containerPort: 80
이 YAML에는 label이 3군데 등장한다.
이 3개의 역할은 모두 다르다.
📌 1️⃣ metadata.labels (Deployment 자체의 라벨)
metadata:
labels:
app: nginx
이 라벨은:
Deployment 리소스 자체에 붙는 라벨이다.
이 라벨은 주로:
- Deployment 조회 필터링
- 관리 도구에서 그룹핑
용도로 사용된다.
예:
kubectl get deploy -l app=nginx
📌 2️⃣ spec.selector.matchLabels (가장 중요한 부분)
selector:
matchLabels:
app: nginx
이건 핵심이다.
이 의미는:
"app=nginx 라벨을 가진 Pod를 내가 관리하겠다"
즉, Deployment가 관리할 대상 Pod를 지정하는 조건이다.
⚠ 매우 중요:
- 이 값은 생성 후 변경 불가 (immutable)
- Pod template의 label과 반드시 일치해야 한다
📌 3️⃣ spec.template.metadata.labels (Pod에 붙는 라벨)
template:
metadata:
labels:
app: nginx
이 부분은:
실제 생성될 Pod에 붙는 라벨이다.
즉:
1️⃣ Deployment 생성
2️⃣ ReplicaSet 생성
3️⃣ Pod 생성
4️⃣ Pod에 app=nginx 라벨 부착
🔎 전체 연결 구조 그림으로 이해하기
Deployment
│
│ selector: app=nginx
▼
ReplicaSet
│
│ manages Pods with label app=nginx
▼
Pod (label: app=nginx)즉,
selector와 template.labels가 연결고리다.
📌 왜 selector와 template.labels가 같아야 할까?
만약 이렇게 하면?
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: web
👉 Deployment가 생성되지 않거나
👉 Pod를 관리하지 못한다.
왜냐하면:
selector는 nginx를 찾는데
생성된 Pod는 web이기 때문
📌 Service와도 연결된다
만약 Service가 이렇게 있다면:
selector:
app: nginx
이 Service는:
app=nginx 라벨을 가진 Pod로 트래픽을 보낸다.
즉, label은 단순 태그가 아니라
리소스를 연결하는 핵심 기준이다.
📊 역할 정리 표
| 위치 | 역할 |
|---|---|
| metadata.labels | Deployment 자체 식별 |
| spec.selector | 어떤 Pod를 관리할지 정의 |
| template.metadata.labels | 생성될 Pod의 실제 라벨 |
🎯 한 줄 정리
Deployment에서 label은:
- 리소스 식별용
- 관리 대상 선택용
- Pod 연결용
이 세 가지 역할을 한다.
selector와 template.labels가 정확히 일치해야
Deployment가 정상 동작한다.
'k8s' 카테고리의 다른 글
| 🔁 Kubernetes Deployment Rollout 완전 정리 (0) | 2026.02.21 |
|---|---|
| 🔁 Kubernetes Deployment에서 ReplicaSet이 여러 개 보이는 이유 (0) | 2026.02.21 |
| 🚫 Kubernetes Taint & Toleration 완전 정리 (0) | 2026.02.21 |
| 📝 Kubernetes Annotation 완전 정리 (0) | 2026.02.21 |
| 🏷 Kubernetes 라벨(Label)로 조회하고 일괄 수정하기 (0) | 2026.02.21 |