DevOps/Docker, K8s

[k8s] 쿠버네티스 레이블(Label) 설정 및 셀렉터(Selector) 방법

cob 2024. 12. 2. 22:27

https://kubernetes.io/ko/docs/concepts/overview/working-with-objects/labels/

 

레이블과 셀렉터

레이블 은 파드와 같은 오브젝트에 첨부된 키와 값의 쌍이다. 레이블은 오브젝트의 특성을 식별하는 데 사용되어 사용자에게 중요하지만, 코어 시스템에 직접적인 의미는 없다. 레이블로 오브

kubernetes.io

 

 

1. 레이블(Label)

모든 리소스를 구성하는 강력한 쿠버네티스의 기능이다. 레이블이란 서비스에 붙어놓은 바코드라고 생각하면 된다.(일종의 검색 기능)

 

1-1) 특징

  • 키/값 쌍
  • 레이블 셀렉터를 사용하면 각종 리소스를 필터링하여 선택할 수 있음
  • 리소스는 한개 이상의 레이블을 가질 수 있다.
  • 리소스를 만드는 시점에 레이블을 첨부할 수 있고, 수정 및 추가도 가능 하지만, 안정적인 실행을 위해 미리 첨부하는 게 좋다
  • 모든 사람들이 쉽게 이해할 수 있는 체계적인 시스템 구축 가능

 

1-2) Pod 생서 시 레이블(Label) 지정 방법

apiVersion: v1
kind: Pod
metadata:
  labels:
    create_method: manual
    env: prod
  name: nodejs-manual-v2
spec:
  containers:
  - name: nodejs
    image: gasbugs/nodejs
    ports:
    - containerPort: 8080
      protocal: TCP

 

 

1-3) 기존 Pod에 레이블(Label) 추가

# 기존 Pod에 추가
kubectl label pod http-go-v2 test=foo

# 기존 Pod의 레이블 수정
kubectl label pod http-go-v2 rel=beta --overwrite

# 기존 Pod 레이블 삭제 (레이블 이름 뒤에 '-' 입력)
kubectl label pod http-go-v2 rel-

 

 

1-4) 레이블(Label) 조회

# 전체 Pod label 조회
kubectl get pod --show-labels

# 특정 label 컬럼으로 조회
# kubectl get pod -L {조회할 key 값}
kubectl get pod -L app,rel



### 레이블 필터링 검색 ###
# app이 있는 Pod 검색
kubectl get pod --show-labels -l 'app'

# app이 없는 Pod 검색
kubectl get pod --show-labels -l '!app'

# app이 test가 아닌 Pod 검색
kubectl get pod --show-labels -l 'app!=test'

# app이 test값이 아니고, rel 값이 beta인 Pod 검색
kubectl get pod --show-labels -l 'app!=test, rel=beta'
  • 레이블을 필터링할 때 리눅스 쉘에서는 !, =와 같은 특수문자가 쉘 자체에서 해석될 수 있기 때문에, 이를 올바르게 전달하려면 따옴표로 묶어줘야 한다.

 

 

2. 레이블링 전략

2-1) 계층적(Hierarchical) 레이블링

리소스를 계층 구조로 분류하여 관리하는 방법
env=production (환경)
team=frontend (팀)
app=webserver (애플리케이션)

 

  • 리소스를 환경별, 팀별로 쉽게 그룹화 및 필터링 가능
  • 여러 사용자 및 팀 간 협업에 적합

 

2-2) 역할 기반(Role-Based) 레이블링

리소스의 역할에 따라 레이블을 지정
tier=backend (애플리케이션 계층)
tier=frontend
role=database

 

  • 애플리케이션 아키텍처에 따라 리소스를 정리
  • 특정 역할에 맞는 파드나 노드만 선택적 관리 가능

 

2-3) 배포 및 릴리즈 관리 레이블링

릴리즈 버전이나 배포 상태를 레이블로 관리
release=v1.0.0
deployment=blue (블루-그린 배포)
deployment=green

 

  • 버전별 리소스 필터링
  • Canary 또는 Blue-Green 배포 전략에 사용 가능

 

2-4) 운영 환경(Environment) 레이블링

운영 환경을 나타내는 레이블로 리소스를 분리

 

 

env=development
env=staging
env=production

 

 

  • 환경별 리소스를 격리하여 사고 위험 최소화
  • 테스트 및 프로덕션 환경 간 구분 명확

 

 

 

2-5) 소유권 및 책임 추적(Ownership) 레이블링

리소스의 소유자나 관리자를 나타내는 레이블
owner=team-a
owner=devops
contact=dev-team@example.com

 

  • 리소스 문제 발생 시 책임 부서 명확화
  • 관리 및 모니터링 용이

 

2-6) 애플리케이션 수명 주기 관리 레이블링

애플리케이션 상태를 나타내는 레이블을 사용
stage=alpha
stage=beta
stage=stable

 

  • 테스트 및 프로덕션 상태 구분
  • 개발 주기 관리에 유용

 

 

2-7) 레이블 배치 전략 결합

이러한 전략은 쿠버네티스의 기본적인 레이블링 규칙을 따르며, 상황에 맞게 조합하여 사용하면 리소스 관리와 스케줄링 효율성을 극대화할 수 있다.
labels:
  app: webserver
  env: production
  tier: frontend
  release: v1.0.0
  owner: team-a

 

 

 

 

반응형