본문 바로가기
INFRA/DevOps

[k8s] Label

by BTC_비웃는사나이 2022. 12. 29.

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 상태로 대기

 

 

 

참고 :

[따배쿠] 9-1. kubernetes label 쿠버네티스 레이블

[따배쿠] 9-2. kubernetes node label

'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

댓글