
Kubernetes에서 리소스를 효율적으로 관리하기 위해 레이블(Label)과 어노테이션(Annotation)을 활용할 수 있다. 이번 글에서는 레이블과 어노테이션의 개념, 차이점, 그리고 실제 활용 사례에 대해 정리해보겠다.
레이블은 Kubernetes 리소스를 식별하고 그룹화하는 키-값 쌍으로, 클러스터 내부에서 특정 오브젝트를 빠르게 찾고 필터링하는 기능을 제공한다.
apiVersion: v1
kind: Pod
metadata:
name: my-app
labels:
env: production
version: v1
spec:
containers:
- name: my-container
image: nginx
위 예제에서 env: production과 version: v1은 레이블이며, 이를 통해 특정 Pod을 쉽게 검색하고 관리할 수 있다.
레이블 셀렉터를 사용하면 특정 레이블을 가진 리소스를 필터링할 수 있다.
selector:
matchLabels:
env: production
selector:
matchExpressions:
- key: version
operator: In
values: ["v1", "v2"]
- key: env
operator: NotIn
values: ["staging"]
위 예제에서는 version이 v1 또는 v2인 경우를 선택하며, env가 staging인 경우는 제외한다.
어노테이션은 Kubernetes 리소스에 대한 추가적인 메타데이터를 저장하는 역할을 한다. 레이블과 달리 필터링이나 검색에는 사용되지 않으며, 오직 정보 저장 용도로만 활용된다.
apiVersion: v1
kind: Pod
metadata:
name: my-app
annotations:
kubernetes.io/description: "이 Pod는 프로덕션 환경에서 사용됩니다."
monitoring: "enabled"
spec:
containers:
- name: my-container
image: nginx
위 예제에서 kubernetes.io/description과 monitoring 어노테이션은 Pod에 대한 추가적인 설명과 모니터링 설정 정보를 담고 있다.
| 레이블(Label) | 어노테이션(Annotation) | |
|---|---|---|
| 주요 목적 | 리소스를 필터링 및 선택하는 기준 제공 | 부가적인 정보를 제공하는 메타데이터 |
| 형식 | 키-값(Key-Value) 쌍 | 키-값(Key-Value) 쌍 |
| 검색 가능 여부 | kubectl get ... --selector로 검색 가능 | 검색 및 필터링 불가능 |
| 사용 예시 | 특정 환경(env=prod), 특정 버전(version=v1)을 가진 리소스를 찾을 때 사용 | 업데이트 이력, 로그 기록, 디버깅 정보 저장 |