Home 쿠버네티스 - label, selector
Post
Cancel

쿠버네티스 - label, selector

Label과 Selector 개념

  • Label(레이블)

    • 쿠버네티스 오브젝트를 식별하기위한 key/value 쌍의 메타정보
  • Selector 개념

    • Label을 이용해 쿠버네티스리소스를 필터링하고 원하는 리소스 집합을 구하기 위한label query

언제 필요한가

클러스터에서 서로 다른 팀의 수백 개 Pod이 동시에 실행되고 있는 상황에서 주문 트래픽을 주문 Pod으로, 배달 트래픽을 배달 Pod으로 라우팅해야 할 때

꽃배달 기능 추가로 배달 트래픽이 증가되는 상황에서 클러스터에서 실행 중인 배달 관련 Pod들을 수평 확장해야 할 때

우리가 어떤 리소스를 선택해서 명령을 실행하고자 할 때 Label과 Selector를 이용한다

  • Label: 쿠버네티스 리소스를 논리적인 그룹으로 나누기 위해 붙이는 이름표
  • Selector: Label를 이용해 쿠버네티스 리소스를 선택하는 방법(label query)

표현과 사용

1
2
3
4
5
6
7
8
9
10
11
12
13
apiVersion: v1
kind: Pod
metadata:
  name: my-pod
  labels:
    # 3가지로 해당 Pod을 특정할 수 있다
    app: backend
    version: v1
    env: prod
spec:
  containers:
    - image: my-pod
      name: my-pod
  • 명령어
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# my-pod 리소스에 레이블 추가
kubectl label pod my-pod app=backend
# 레이블 확인
kubectl get pod my-pod --show-labels

# 레이블 추가
kubectl label pod my-pod version=v1
# version 값 수정하기
kubectl label pod my-pod version=v2 --overwrite

# 특정 레이블의 키값만 입력해서 보기
kubectl get pod/my-pod --label-columns app,env
kubectl get pod/my-pod -L app,env # 축약형

# 키값 뒤에 - 를 붙여 해당 키: 값 을 삭제
kubectl label pod/my-pod app-
# app 레이블만 삭제됨
kubectl get pod/my-pod --show-labels

Selector

1
2
3
4
5
6
7
8
kubectl get <오브젝트타입> --selector <label query 1,…, label query N>
# 축약
kubectl get <오브젝트타입> -l <label query 1,…, label query N>
# label query: key=value

# = 또는 != 연산자로 검색 가능
kubectl get pod --selector env=prod
kubectl get pod --selector app!=backend,env= prod

Set-Based Selector

  • 값이어떤집합에속해있다/속해있지않다(OR연산가능)
    • ‘key in (value1, value2, …)’: key의값이value1이거나value2일때
    • ‘key notin (value1, value2, …)’: key값이value1이아니거나value2가아닐때
  • 키가존재한다/존재하지않는다
    • ‘key’: label에key가있을때
    • ‘!key’: label에key가없을때
1
2
3
4
5
6
7
8
9
10
# env key 값이 dev,stage,prod 중 하나일 경우
kubectl get pod --selector ‘env in (dev,stage,prod)’
kubectl get pod --selector ‘env notin (dev,stage,prod)# env key 값이 있는 것
kubectl get pod --selector env
# env key 값이 없는 것
kubectl get pod --selector ‘!env’

kubectl get pod --selector ‘app=backend,env in (dev,stage)

정리

  • 쿠버네티스 오브젝트 metadata.labels 속성으로 리소스에 Label을 추가할 수 있다.
  • Label은 key/value 쌍으로 선언한다.
  • 쿠버네티스 오브젝트에 선언한 Label의key, value를기준으로 원하는 리소스를 필터링할 수 있다.
  • 필터링하기 위한 조건을 Selector로 정의한다. (label query)
  • 즉 Label과 Selector를 사용하면 특정 리소스들의 집합을 구할 수 있다.
  • kubectl get 명령어를 사용할 때 label query를 지정하기 위해 –selector 또는 ‒l 옵션을 사용한다.
This post is licensed under CC BY 4.0 by the author.