https://kubernetes.io/ko/docs/concepts/overview/working-with-objects/labels/
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
반응형
'DevOps > Docker, K8s' 카테고리의 다른 글
[k8s] Pod 라이브네스(Liveness), 레디네스(Readiness), 스타트업(Startup) 프로브 구성 방법 (0) | 2024.11.28 |
---|---|
[k8s] 포트(POD) 개념 및 디스크립터 yaml 생성 방법 (0) | 2024.11.26 |
[k8s] 미니큐브(MiniKube)로 쿠버네티스 설치 방법 (0) | 2024.11.18 |
[k8s] 쿠버네티스의 파드(Pod) 조회(상세조회) (0) | 2024.10.23 |
[k8s] 쿠버네티스에 컨테이너 배포 방법 (0) | 2024.10.22 |