본문 바로가기
Containers/Kubernetes

3.2. Label 및 Selector

by shinebee* 2020. 7. 23.

1. Label이란?

  • kubernetes cluster의 모든 object(파드 포함)에 키/값 쌍으로 리소스를 식별하고 속성을 지정하는 데 사용
  • 카테고리라고 생각해라
  • 오브젝트에 적절한 레이블을 부여하여 성격을 정의하고 검색을 용이하게 할 수 있다.

 

  • label의 예:
    • release : stable / canary / A / B
    • environment : dev / qa / production
    • tier : frontend / backend / cache / database
    • partition : customerA / customerB
    • track : daily / weekly
    • app : webapp / middleware

 

  • label 구문
    • 키는 "접두사(옵션)/이름" 형식
    • 영문자, 숫자, 대시(-), 언더스코어(_), 점(.)이 올 수 있다.
    • 최대 63자

 

  • replicationcontroller(rc)  ->  복제본의 수를 지정해야한다. (2~3)
  • 같은 label이 있는 pod를 찾아서 연결
  • 기능을 구분하지 않는다.
  • label을 구분한다.

 

 

2. label을 사용한 pod 정의

# mynapp-pod-label.yml
apiVersion: v1
kind: Pod
metadata:
  name: mynapp-pod-label
  labels:
    env: dev
    tier: frontend 
spec:
  containers:
  - image: httpd
    name: mynapp
    ports:
    - containerPort: 80
      protocol: TCP

 

 

3. pod 생성

kubectl create -f mynapp-pod-label.yml

 

 

4. pod label 확인

kubectl get pods --show-labels
kubectl get pods -L env,tier  // -L 옵션을 사용하여 특정 레이블을 지정하여 필드로 표시할 수 있다.
kubectl get pods mynapp-pod-label -o yaml  // -o yaml 옵션에서도 레이블이 있다면 확인 가능.
kubectl describe pods mynapp-pod-label

 

 

5. pod label 수정

  • 전에 생성한  label이 없는 mynapp-pod 파드에 env 레이블을 추가해보자
kubectl label pods mynapp-pod env=dev

 

  • mynapp-pod-label 파드에 env 레이블을 수정해보자
kubectl label pods mynapp-pod-label env=debug
  • error :  'env' already has a value (dev), and --overwrite is false
  • dev 값을 이미 가지고 있어 오류가 발생

 

  • 이미 레이블이 존재하는 경우 --overwrite 옵션 사용.
kubectl label pods mynapp-pod-label env=debug --overwrite

 

 

6. label selector

  • label selector는 object에 부여되어 있는 레이블을 식별하고 검색할 수 있다.
    • 특정 키가 있는/없는 레이블 포함
    • 특정 키와 값이 있는/없는 레이블 포함
  • 레이블 셀렉터를 이용해 검색하는 방법은 두 가지를 제공
    • 균등 기반 레이블
      • =
      • ==
      • !=
    • 집합성 기반 레이블
      • in
      • notin

 

 

7. 균등 기반 레이블 셀렉터

  • tier 키가 포함되어 있는 레이블
kubectl get pods --show-labels -l tier

 

  • tier 키를 제외한 레이블
kubectl get pods --show-labels -l '!tier'  // 특수문용(!)가 들어있어서 '' 사용

 

  • env 키에 debug 값이 포함되어 있는 레이블
kubectl get pods --show-labels -l env=debug

 

  • env 키를 가지지만 debug 값이 포함되지 않은 레이블
kubectl get pods --show-labels -l 'env!=debug'

 

 

8. 집합성 기반 레이블 셀렉터

  • dev 키에 debug 또는 dev 값이 포함되어 있는 레이블
kubectl get pods --show-labels -l 'env in (debug,dev)'

 

  • tier 키를 가지지만 frontend 값이 포함되어 있지 않은 레이블
kubectl get pods --show-labels -l 'tier notin (frontend)'

'Containers > Kubernetes' 카테고리의 다른 글

4.1. Liveness Probe  (0) 2020.07.24
3.4. namespace  (0) 2020.07.24
Pod  (0) 2020.07.23
명령형 명령어  (0) 2020.07.23
Object 관리  (0) 2020.07.22

댓글