https://kubernetes.io/ko/docs/concepts/overview/working-with-objects/labels/
Label
- Node를 포함하여 Pod, deployment 등 모든 리소스에 할당
- 리소스의 특성을 분류하고, Selector를 이용해서 선택
- 오브젝트에 첨부된 key-value 한 쌍으로 적용
- 오브젝트의 특성을 식별하는 데 사용
- 레이블로 오브젝트의 하위 집합을 선택하고, 구성하는데 사용
- 레이블은 오브젝트를 생성할 때에 붙이거나 생성 이후에 붙이거나 언제든지 수정이 가능
- 오브젝트의 키는 고유한 값이어야 한다
- 사용 예시
더보기
- "release" : "stable", "release" : "canary"
- "environment" : "dev", "environment" : "qa", "environment" : "production"
- "tier" : "frontend", "tier" : "backend", "tier" : "cache"
- "partition" : "customerA", "partition" : "customerB"
- "track" : "daily", "track" : "weekly"
metadata:
labels:
rel: stable
name: mainui
Selector
selector:
matchLabels:
key: value
matchExpressions:
- {key: name, operator: In, values: [mainui]}
- {key: rel, operator: NotIn, values: ["beta","canary"]}
# 실습
# run command로 파드 생성
root@master:~# kubectl run cmdpod --image=nginx:1.14 --port=80
pod/cmdpod created
# 레이블 없는 파드 생성
root@master:~# cat pod1.yaml
apiVersion: v1
kind: Pod
metadata:
name: pod-demo
spec:
containers:
- name: nginx
image: nginx:1.14
ports:
- containerPort: 80
# 레이블 있는 파드 생성
root@master:~# cat pod2.yaml
apiVersion: v1
kind: Pod
metadata:
name: label-pod-demo
labels:
name: mainui
rel: stable
spec:
containers:
- name: nginx
image: nginx:1.14
ports:
- containerPort: 80
root@master:~# kubectl create -f pod1.yaml -f pod2.yaml
pod/pod-demo created
pod/label-pod-demo created
root@master:~# kubectl get pods
NAME READY STATUS RESTARTS AGE
cmdpod 1/1 Running 0 4m47s
label-pod-demo 1/1 Running 0 43s
pod-demo 1/1 Running 0 43s
root@master:~# kubectl get pods --show-labels
NAME READY STATUS RESTARTS AGE LABELS
cmdpod 1/1 Running 0 5m22s run=cmdpod # 자동 할당
label-pod-demo 1/1 Running 0 78s name=mainui,rel=stable
pod-demo 1/1 Running 0 78s <none>
kubectl get pods -l name=[label명]
label명이 같은 pod 출력 (selector)
root@master:~# kubectl get pods -l name=mainui
NAME READY STATUS RESTARTS AGE
label-pod-demo 1/1 Running 0 2m16s
# 동일 결과 출력
root@master:~# kubectl get pods --selector name=mainui
NAME READY STATUS RESTARTS AGE
label-pod-demo 1/1 Running 0 3m50s
# 커멘드로 레이블 할당
root@master:~# kubectl label pod pod-demo name=test
pod/pod-demo labeled
root@master:~# kubectl get pods --show-labels
NAME READY STATUS RESTARTS AGE LABELS
cmdpod 1/1 Running 0 10m run=cmdpod
label-pod-demo 1/1 Running 0 6m24s name=mainui,rel=stable
pod-demo 1/1 Running 0 6m24s name=test
# 레이블 수정
root@master:~# kubectl label pod pod-demo name=login
error: 'name' already has a value (test), and --overwrite is false
# 이미 name label이 있어서 오류 발생
## --overwrite 속성
## 이미 존재하는 label 위에 덮어쓰기
root@master:~# kubectl label pod pod-demo name=login --overwrite
pod/pod-demo labeled
root@master:~# kubectl get pods --show-labels
NAME READY STATUS RESTARTS AGE LABELS
cmdpod 1/1 Running 0 12m run=cmdpod
label-pod-demo 1/1 Running 0 8m27s name=mainui,rel=stable
pod-demo 1/1 Running 0 8m27s name=login
# 복수 레이블 할당
root@master:~# kubectl label pod cmdpod name=order rel=beta
pod/cmdpod labeled
root@master:~# kubectl get pods --show-labels
NAME READY STATUS RESTARTS AGE LABELS
cmdpod 1/1 Running 0 13m name=order,rel=beta,run=cmdpod
label-pod-demo 1/1 Running 0 9m37s name=mainui,rel=stable
pod-demo 1/1 Running 0 9m37s name=login
# label 명 뒤에 -(대시문자)
# label 삭제
root@master:~# kubectl label pod cmdpod run-
pod/cmdpod unlabeled
root@master:~# kubectl get pods --show-labels
NAME READY STATUS RESTARTS AGE LABELS
cmdpod 1/1 Running 0 14m name=order,rel=beta
label-pod-demo 1/1 Running 0 10m name=mainui,rel=stable
pod-demo 1/1 Running 0 10m name=login
root@master:~# kubectl label pod pod-demo rel=stable
pod/pod-demo labeled
root@master:~# kubectl get pods --show-labels
NAME READY STATUS RESTARTS AGE LABELS
cmdpod 1/1 Running 0 15m name=order,rel=beta
label-pod-demo 1/1 Running 0 11m name=mainui,rel=stable
pod-demo 1/1 Running 0 11m name=login,rel=stable
root@master:~# kubectl get pods --selector rel=stable
NAME READY STATUS RESTARTS AGE
label-pod-demo 1/1 Running 0 12m
pod-demo 1/1 Running 0 12m
# 레이블 삭제
root@master:~# kubectl delete pods --selector rel=beta
pod "cmdpod" deleted
반응형
'Container > Kubernetes' 카테고리의 다른 글
[K8S] Annotation (0) | 2024.03.17 |
---|---|
[K8S] Node Label & Selector (0) | 2024.03.17 |
[K8S] Ingress Controller (0) | 2024.03.07 |
[K8S] Service (0) | 2024.03.05 |
[K8S] Cronjob Controller (0) | 2024.02.28 |