본문 바로가기
쿠버네티스

쿠버네티스(5) - 레이블과 셀렉터

by 왈레 2024. 7. 15.

레이블이란?

레이블이란 클러스터 내의 오브젝트(예: Pod, Node, Service 등)를 식별하고 그룹화하는 데 사용되는 key-value 쌍이다.

 

레이블은 오브젝트에 첨부되어 여러 목적을 위해 활용될 수 있다. 예를 들어, 레이블을 사용하여 특정 오브젝트를 선택하거나 필터링할 수 있으며, 오토스케일링, 롤링 업데이트, 서비스 디스커버리 등의 기능을 구현하는 데 유용하다.

 

  • Node를 포함하여 pod, deployment 등 모든 리소스에 할당가능
  • 리소스의 특성을 분류하고, Selector를 이용해서 선택할 수 있다.

 

 

yaml 예시

apiVersion: v1
kind: Pod
metadata:
  name: mypod
  labels:
    app: myapp
    environment: production
spec:
  containers:
  - name: mycontainer
    image: nginx
    
---

apiVersion: v1
kind: Service
metadata:
  name: myservice
spec:
  selector:
    app: myapp
  ports:
  - protocol: TCP
    port: 80
    targetPort: 9376

 

Command 명령어

# label 정보도 같이 출력
$ kubectl get pods --show-labels

# label 명이 같은 pod를 출력
$ kubectl get pods -l name=<label명>

# 위의 -l 옵션과 동일
$ kubectl get pods --selector name=<>

# yaml로 label을 추가하는 것이 아닌 command로 추가하는 방법
$ kubectl label pod <pod명> name=test1
 
# 이미 존재하는 label 위에 덮어쓰는 옵션 --overwrite
$ kubectl label pod <pod명> name=test2 --overwrite

# 레이블 삭제
$ kubectl label pod <pod명> <label명>- # name- 이런식으로 레이블명뒤에 대시(-)를 넣어주면 됨

 

셀렉터란?

쿠버네티스에서 셀렉터는 특정 레이블을 가진 오브젝트를 선택하고 필터링하는 데 사용된다.

 

셀렉터의 종류

쿠버네티스 셀렉터는 크게 두 가지 유형으로 나눌 수 있다.

  • 레이블 셀렉터 (Label Selector)
  • 필드 셀렉터 (Field Selector)

 

레이블 셀렉터

레이블 셀렉터는 레이블 키와 값을 기반으로 오브젝트를 선택합니다. 레이블 셀렉터는 다시 두 가지 방식으로 구분된다.

  • 동등 셀렉터 (Equality-based Selector): 레이블의 키-값 쌍이 정확히 일치하는 오브젝트를 선택합니다.
  • 집합 셀렉터 (Set-based Selector): 레이블의 키가 특정 값 집합에 포함되거나 포함되지 않는 오브젝트를 선택합니다.

 

동등 셀렉터는 단순히 key=value 형식으로 특정 레이블을 가진 오브젝트를 선택한다.

selector:
  matchLabels:
    app: nginx
    environment: production
    
# app=nginx와 environment=production 레이블을 가진 오브젝트를 선택한다.

집합 셀렉터는 ‘In’, ‘NotIn’, ‘Exists’, ‘DoesNotExist’ 연산자를 사용하여 레이블의 값을 조건으로 필터링한다.

selector:
  matchExpressions:
    - key: app
      operator: In
      values:
        - frontend
        - backend
        
    - key: tier
      operator: NotIn
      values:
        - cache
        
    - key: release
      operator: Exists
      
# 1. app 레이블의 값이 frontend 또는 backend인 오브젝트
# 2. tier 레이블의 값이 cache가 아닌 오브젝트
# 3. release 레이블이 존재하는 오브젝트

 

 

필드 셀렉터는 리소스의 필드를 기반으로 오브젝트를 선택한다.

주로 오브젝트의 상태나 메타데이터 필드를 기준으로 필터링하고, 주로 kubectl 명령어와 함께 사용되어 특정 조건을 만족하는 리소스를 조회할 때 유용하다.

# status.phase 필드가 Running인 Pod만 조회
kubectl get pods --field-selector=status.phase=Running

'쿠버네티스' 카테고리의 다른 글

쿠버네티스(4) - 인그레스  (1) 2024.07.15
쿠버네티스(3) - 서비스  (0) 2024.07.08
쿠버네티스(2) - 컨트롤러  (0) 2024.07.08
쿠버네티스(1) - 파드  (1) 2024.07.05

댓글