[쿠버네티스 워크로드] 레이블과 셀렉터 소개

IMKUNYOUNG·2023년 7월 31일
0

쿠버네티스

목록 보기
24/64

레이블이란?

  • 모든 리소스를 구성하는 매우 간단하면서도 강력한 쿠버네티스 기능
  • 리소스에 첨부하는 임의의 키/값 쌍 (예 app:test)
  • 레이블 셀렉터를 사용하면 각종 리소스를 필터링하여 선택할 수 있음
  • 리소스는 한 개 이상의 레이블을 가질 수 있음
  • 리소스를 만드는 시점에 레이블을 첨부
  • 기존 리소스에도 레이블의 값을 수정 및 추가 가능
  • 모든 사람이 쉽게 이해할 수 있는 체계적인 시스템을 구축 가능
  • app: 애플리케이션 구성요소, 마이크로서비스 유형 지정
  • rel: 애플리케이션의 버전 지정



레이블을 이용한 파드 구성

canary는 임시버전




파드 생성 시 레이블 지정하는 방법

apiVersion: v1
kind: Pod
metadata:
  name: label-demo
  labels:
    environment: production
    app: nginx
spec:
  containers:
  - name: nginx
    image: nginx:1.14.2
    ports:
    - containerPort: 80

environment: production
app: nginx




레이블을 추가 및 수정하는 방법

  • 새로운 레이블을 추가할 때는 label 명령어 사용
$ kubectl label pod http-go-v2 test=foo
pod/http-go-v2 labeled

  • 기존의 레이블을 수정할 때는 --overwrite 옵션을 주어서 실행
$ kubectl label pod http-go-v2 rel=beta
error: 'rel' already has a value (canary), and --overwrite is false

$ kubectl label pod http-go-v2 rel=beta --overwrite
pod/http-go-v2 labeled

  • 레이블 삭제
$ kubectl label pod http-go-v2 rel-



레이블 확인하기

  • 레이블 보여주기
kubectl get pod --show-labels
$ kubectl get pod --show-labels
NAME READY STATUS RESTARTS AGE LABELS
http-go 1/1 Running 0 53m <none>
http-go-v2 1/1 Running 0 2m5s app=http-go,foo=bar,rel=beta,test=foo

  • 특정 레이블 컬럼으로 확인
kubectl get pod -L app,rel
$ kubectl get pod -L app,rel
NAME READY STATUS RESTARTS AGE APP REL
http-go 1/1 Running 0 62m
http-go-v2 1/1 Running 0 11m http-go beta



레이블로 필터링하여 검색

env 있는 것만

kubectl get pod --show-labels -l 'env'
$ kubectl get pod --show-labels -l 'env'
NAME READY STATUS RESTARTS AGE LABELS
http-go-v2 1/1 Running 0 3m10s creation_method=manual,env=prod,rel=beta,test=foo

env 없는 것만

kubectl get pod --show-labels -l '!env'
$ kubectl get pod --show-labels -l '!env'
NAME READY STATUS RESTARTS AGE LABELS
http-go 1/1 Running 0 2m <none>

env가 test 아닌 것

kubectl get pod --show-labels -l 'env!=test'
$ kubectl get pod --show-labels -l 'env!=test'
NAME READY STATUS RESTARTS AGE LABELS
http-go 1/1 Running 0 4m <none>
http-go-v2 1/1 Running 0 5m14s creation_method=manual,env=prod,rel=beta,test=foo

env가 test 아니면서 rel은 beta인거

kubectl get pod --show-labels -l 'env!=test,rel=beta'
$ kubectl get pod --show-labels -l 'env!=test,rel=beta'
NAME READY STATUS RESTARTS AGE LABELS
http-go-v2 1/1 Running 0 5m58s creation_method=manual,env=prod,rel=beta,test=foo



레이블 배치 전략

0개의 댓글