My __ 노트

[ Kubernetes ] 레이블(labels) 생성 / 수정 / 조회 / 삭제 본문

Kubernetes

[ Kubernetes ] 레이블(labels) 생성 / 수정 / 조회 / 삭제

블루빔 2023. 11. 28. 11:00

개념 : 레이블은 pod와 같은 오브젝트에 첨부된 Key와 Value 쌍의 메타정보입니다. 레이블을 이용하여 오브젝트 하위 집합을 선택하고 구성하는 데 사용되며 실제 코어 시스템에 직접적인 영향이 없습니다. 
>>✨ Selector 는 이런 레이블을 이용하여 쿠버네티스 리소스를 필터링하고 원하는 리소스 집합을 구하기 위한 label query를 말합니다. 

※ Use case ※ 
레이블을 이용한 pod 삭제 작업

# key1 레이블을 가진 pod 모두 종료 
kubectl delete pod -l key1=value 
----------------------------------------
$ kubectl delete pod -l group=test

목차
▶ 레이블 생성 
▶ 레이블 조회
▶ 레이블 수정
▶ 레이블 삭제

레이블 생성 

Yaml 파일 형식으로 생성 
(예시)

apiVersion: v1
kind: Pod
metadata:
  name: test-app
  labels:
    group: test
spec:
  containers:
    - name: test-app-cn
      image: nginx:1.14.2
      ports:
        - containerPort: 8080
      env:
        - name: POD_IP
          valueFrom:
            fieldRef:
              fieldPath: status.podIP
        - name: NODE_IP
          valueFrom:
            fieldRef:
              fieldPath: status.hostIP
      resources:
        limits:
          cpu: "100m"
          memory: "120Mi"

 

command로 생성 
(예시) pod의 레이블 생성 

kubectl label pod <pod네임> key1=value key2=value
--------------------------------------------
$ kubectl label pod test-app group=test

 

레이블 조회 

전체 레이블 조회 

$ kubectl get pods --show-labels
----------------------------------------------------------
NAME       READY   STATUS    RESTARTS   AGE   LABELS
test-app   1/1     Running   0          32m   group=test

 

특정 레이블만 조회 

🔍 대문자  -L 옵션  또는  --label-columns=[] 
      레이블들 key 명을 알고 있으면 지정한 key 명 기준으로 조회 가능

kubectl get pod -L key1,key2,key3..

$ kubectl get pod -L group,concept,element,position,version
---------------------------------------------------------------------------------------------
NAME      READY   STATUS    RESTARTS   AGE   GROUP   CONCEPT    ELEMENT   POSITION   VERSION
prod-01   1/1     Running   0          25m   prod    new                  first      v1
prod-02   1/1     Running   0          24m   prod    new-func             second     v2
test-01   1/1     Running   0          24m   test    new                  first      v1
test-02   1/1     Running   0          24m   test    new-func             second

 

🔍  소문자  -l 옵션  또는  --selector='' 
       레이블 key1=value에 해당하는 리소스만 조회 가능 

(예시)Pod 조회

특정 Key/Value값을 가지고 있는 pod 조회 
kubectl get pods -l key1=value1-1,key1=value1-2,key2=value2-1

$ kubectl get pods -l group=test
----------------------------------------------------
NAME     READY   STATUS    RESTARTS    AGE   
test-01   1/1     Running   0          32m  
test-02   1/1     Running   0          24m

또는

kubectl get pods -l 'key1 in (value1-1, value1-2)'
kubectl get pods -l 'key1 in (value1-1), key2 in (value2-1)'

$ kubectl get pods -l 'group in (test)'
----------------------------------------------------
NAME     READY   STATUS    RESTARTS    AGE   
test-01   1/1     Running   0          32m  
test-02   1/1     Running   0          24m

 

특정 Key/Value값을 가지고 있지 않은 pod 조회 
kubectl get pods -l key1!=value1-1,key1!=value1-2,key2!=value2-1

$ kubectl get pods -l group!=test
-----------------------------------------------
NAME       READY   STATUS    RESTARTS   AGE
etc-app    1/1     Running   0          41m
prod-app   1/1     Running   0          41m
----------------------------------------------------

또는

kubectl get pods -l 'key1 notin (value1-1, value1-2)'
kubectl get pods -l 'key1 notin (value1-1), key2 notin (value2-1)'

$kubectl get pods -l 'group notin (test)'
-----------------------------------------------
NAME       READY   STATUS    RESTARTS   AGE
etc-app    1/1     Running   0          42m
prod-app   1/1     Running   0          42m

 

특정 Key값을 가지고 있지 않은 pod 조회 
kubectl get pods -l '!key1, !key2'

$ kubectl get pods -l '!group'
--------------------------------------------
NAME      READY   STATUS    RESTARTS   AGE
etc-app   1/1     Running   0          45m

 

 

 

레이블 수정

레이블 생성 command에서  --overwrite 옵션을 추가하면 됨 
(예시) pod의 레이블 수정 

kubectl label pod <pod네임> key1=value --overwrite

--------------------------------------------------------
$ kubectl label pod test-app group=prod --overwrite

>> 특정pod에 동일한 key 값, 다른 value 값을 넣으면 아래와 같은 error 문구가 출력 됩니다. " 더보기 " ⬇️

더보기
$ kubectl label pod test-app group=prod
--------------------------------------------------------------------
error: 'group' already has a value (test), and --overwrite is false​

group이라는 key 값에 이미 test라는 value가 있으므로 수정 에러가 발생했고 --overwrite 가 잘못되었다고 출력됩니다. 

 

레이블 삭제

(예시) pod의 레이블 삭제

kubectl label pod <pod네임> key1- key2-

$ kubectl label pod test-app group-
-----------------------------------
pod/test-app unlabeled