Cloud Engineering/Kubernetes ⚙️

[Kubernetes] Label 생성과 Label 검색하기 (Selector)

minjiwoo 2023. 2. 9. 15:08
728x90

Label이란 

  • 레이블은 부가적인 정보를 컨테이너에 붙이는 것이며, 레이블을 통해서 오브젝트를 검색/식별할 수 있다. 레이블을 추가한다고 해서 쿠버네티스 클러스터에 직접적으로 영향을 주는 것은 아니지만, 사용자가 쉽게 식별할 수 있다. 
  • 컨테이너의 역할에 대해 설명을 레이블로 저장해 놓을 수 있다.
  • 레이블key: value 쌍으로 되어 있다.
  • 레이블 형태는 접두어/이름 형식으로 사용가능하다. 단, kubernetes.io/ 와 k8s.io 접두어는 쿠버네티스 환경에서 이미 예약되었으므로 사용할 수 없다. 

Label은 manifest file 작성시에 metadata 하위에 작성할 수 있다.

 

pod들의 Label을 확인하는 명령어 

$ kubectl get pods --show-labels

[예시] 

vagrant@kube-control1:~/work/20230209$ kubectl get pods --show-labels
NAME              READY   STATUS    RESTARTS   AGE    LABELS
myapp-pod         1/1     Running   0          174m   <none>
myapp-pod-label   1/1     Running   0          38s    env=dev,tier=frontend

 

label key를 지정할 경우 해당하는 label key를 별도의 field로 볼 수 있다.

$ kubectl get pods -L LABEL_KEY

 

새로운 label을 pod에 추가하는 방법

$ kubectl label pod POD LABEL_KEY=VALUE

[예시]

vagrant@kube-control1:~/work/20230209$ kubectl label pod myapp-pod env=dev
pod/myapp-pod labeled

 

이미 있는 label의 value를 변경하는 방법 

$kubectl label pods POD_NAME LABEL_KEY=LABEL_VALUE --overwrite

[예시]

vagrant@kube-control1:~/work/20230209$ kubectl label pods myapp-pod-label env=debug 
error: 'env' already has a value (dev), and --overwrite is false
vagrant@kube-control1:~/work/20230209$ kubectl label pods myapp-pod-label env=debug --overwrite
pod/myapp-pod-label labeled

 

Label Selector 

Label을 통한 검색 방법은 두가지가 있다. 

1. Label의 key, value를 이용하여 일치성을 기준으로 검색 

조건은 다음의 기호를 사용하여 건다 : =, ==, !=

[예시] 

label중에 tier가 없는 pod 검색하기 

$ kubectl get pods --show-labels -l '!tier’

env라는 key를 가지지만 value가 dev가 아닌 pod 검색하기 

$ kubectl get pods --show-labels -l 'env!=dev’

 

2. Label의 key, valuie를 이용하여 집합성을 기준으로 검색 

env 라는 label의 key 값이 (debug,dev) 집합에 속하는 pod 검색 

$ kubectl get pods --show-labels -l 'env in (debug,dev)’
728x90