Label이란?
- Node를 포함하여 pod, deployment 등 모든 리소스에 할당
- 리소스의 특성을 분류하고, Selector를 이용해서 선택
- Key-value 한 쌍으로 적용
- worker node의 특성을 label로 설정하여 node를 선택해서 pod를 배치할 수 있음
<이미지 출처 : [따배쿠] 9-1. kubernetes label 쿠버네티스 레이블 >
<이미지 출처 : [따배쿠] 9-2. kubernetes node label >
- Label definition
metadata:
labels:
rel: stable
name: mainui
- Selector definition
selector:
matchLabels:
key: value
matchExpressions:
- {key: name, operator: In, values: [mainui]}
- {key: rel, operator: NotIn, values: ["beta","canary"]}
[ Hands - on ]
1. Pod에 label 지정
- label을 지정한 pod 생성
vi pod.yaml
apiVersion: v1
kind: Pod
metadata:
name: label-demo
labels:
environment: production
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80
kubectl create -f pod.yaml
- pod 및 지정된 label 확인
kubectl get pods --show-labels
NAME READY STATUS RESTARTS AGE LABELS
label-demo 1/1 Running 0 28s app=nginx,environment=production
kubectl get pods --selector app=nginx
NAME READY STATUS RESTARTS AGE
label-demo 1/1 Running 0 3m9s
- pod에 label 추가 지정 및 확인
kubectl label pod label-demo name=demo
kubectl get pods --show-labels
NAME READY STATUS RESTARTS AGE LABELS
label-demo 1/1 Running 0 7m50s app=nginx,environment=production,name=hello
- pod에 지정된 label 덮어쓰기 및 확인
kubectl label pod label-demo name=hello --overwrite
kubectl get pods --show-labels
NAME READY STATUS RESTARTS AGE LABELS
label-demo 1/1 Running 0 7m50s app=nginx,environment=production,name=hello
- 지정된 label 삭제 및 확인
kubectl label pod label-demo name-
kubectl get pods --show-labels
NAME READY STATUS RESTARTS AGE LABELS
label-demo 1/1 Running 0 10m app=nginx,environment=production
2. Node label
- 각각의 worker node에 label 지정 및 확인
kubectl label nodes node1.example.com gpu=true disk=ssd
kubectl label nodes node2.example.com gpu=true
kubectl get nodes -L disk,gpu
NAME STATUS ROLES AGE VERSION DISK GPU
master.example.com Ready control-plane 2d1h v1.24.1
node1.example.com Ready <none> 2d1h v1.24.1 ssd true
node2.example.com Ready <none> 2d1h v1.24.1 ssd
- nodeselector를 설정한 yaml 파일 생성 및 실행
vi nodeselector.yaml
apiVersion: v1
kind: Pod
metadata:
name: pod-selector
spec:
nodeSelector:
gpu: "true"
disk: ssd
containers:
- name: nginx
image: nginx:1.14
ports:
- containerPort: 80
kubectl create -f nodeselector.yaml
kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
pod-selector 1/1 Running 0 54s 192.168.11.81 node1.example.com <none> <none>
❗ nodeSelector의 값을 만족하는 label이 지정된 worker node가 없다면 pod는 pending 상태로 대기
참고 :
'INFRA > DevOps' 카테고리의 다른 글
[k8s] Canary Deployment (0) | 2023.01.09 |
---|---|
[K8s] Annotation (0) | 2023.01.03 |
[K8S 1.24 버전 업그레이드] dockershim vs containerd (0) | 2022.12.21 |
Terraform 실습하기 - 2 (0) | 2022.12.19 |
Terraform 실습하기 -1 (0) | 2022.12.19 |
댓글