label이란?
- 모든 리소스를 구성하는 매우 간단하면서도 강력한 쿠버네티스 기능
- 리소스에 첨부하는 임의의 키/값 쌍 (ex. app:test)
- 여러 객체에 태그를 붙여 구분할 수 있도록 함
- 레이블 셀렉터를 사용하면 각종 리소스를 필터링하여 선택할 수 있다.
- 리소스는 한 개 이상의 레이블을 가질 수 있음
- 리소스를 만드는 시점에 레이블을 첨부
- 기존 리소스에도 레이블의 값을 수정 및 추가 기능
- 모든 사람이 쉽게 이해할 수 있는 체계적인 시스템을 구축 가능
- app: 애플리케이션 구성요소, 마이크로서비스 유형 지정
- rel: 애플리케이션의 버전 지정
label을 이용한 POD 구성
- 쿠버네티스 인 액션에서 사용한 예제
- 가로축은 app을 key로 구성하여 microservice로 나누어준 POD
- 세로축은 rel을 key로 구성하여 환경을 나눠주고 있다.
- 참조: https://livebook.manning.com/book/kubernetes-in-action/chapter-3/141
POD 생성 시 레이블을 지정하는 방법
- go-test-v2.yaml 작성
- labels: creation_method / env 지정
``` server1@server1-VirtualBox:~/yaml$ vi go-test-v3.yaml apiVersion: v1 kind: Pod metadata: name: go-test-v2 labels: creation_method: manual env: prod spec: containers:- image: devtak/test:v1.0
name: go-test-v2
ports:
- containerPort: 8080 protocol: TCP ```
- image: devtak/test:v1.0
name: go-test-v2
ports:
- labels: creation_method / env 지정
- POD 생성
server1@server1-VirtualBox:~/yaml$ kubectl create -f go-test-v2.yaml
- 레이블을 추가 및 수정하는 방법
- 새로운 레이블을 추가할 때는 label 명령어를 사용
$ kubectl label pod go-test test=foo
- 기존에 있던 go-test POD에 test=foo label 추가
- 기존의 레이블을 수정할 때는 –overwrite 옵션을 주어서 실행
$ kubectl label pod go-test-v2 rel=beta error: 'rel' already has a value (canary), and --overwrite is false $ kubectl label pod go-test-v2 rel=beta --overwrite pod/go-test-v2 labeled
- 기존에 go-test-v2 POD에 있는 rel 키값에 value를 beta로 overwrite한다.
- 해당 key가 있는 경우 –overwrite 옵션을 주어야 한다.
- 레이블 삭제
$ kubectl label pod go-test-v2 rel-
- key값에 -(minus)를 표시하면 삭제 가능하다.
- 새로운 레이블을 추가할 때는 label 명령어를 사용
- 레이블 확인하기
- 레이블 보여주기
$ kubectl get pod --show-labels NAME READY STATUS RESTARTS AGE LABELS go-test 1/1 Running 0 53m <none> go-test-v2 1/1 Running 0 2m5s app=go-test,foo=bar,rel=beta,test=foo
- 특정 레이블 컬럼으로 확인
$ kubectl get pod -L app,rel NAME READY STATUS RESTARTS AGE APP REL go-test 1/1 Running 0 62m go-test-v2 1/1 Running 0 11m go-test beta
- 없어도 빈 값으로 보여진다.
- 레이블 보여주기
- 레이블로 필터링하여 검색
- -l 옵션을 확인해서 필터링 기능을 사용할 수 있다.
- env label을 갖는 POD 확인
$ kubectl get pod --show-labels -l 'env' NAME READY STATUS RESTARTS AGE LABELS go-test-v2 1/1 Running 0 3m10s creation_method=manual,env=prod,rel=beta,test=foo
- env label을 갖지 않는 POD 확인
$ kubectl get pod --show-labels -l '!env' NAME READY STATUS RESTARTS AGE LABELS go-test 1/1 Running 0 2m <none>
- env label이 test가 아닌 POD 확인
$ kubectl get pod --show-labels -l 'env!=test' NAME READY STATUS RESTARTS AGE LABELS go-test 1/1 Running 0 4m <none> go-test-v2 1/1 Running 0 5m14s creation_method=manual,env=prod,rel=beta,test=foo
- env label이 test가 아니고 rel label이 beta인 POD 확인
$ kubectl get pod --show-labels -l 'env!=test,rel=beta' NAME READY STATUS RESTARTS AGE LABELS go-test-v2 1/1 Running 0 5m58s creation_method=manual,env=prod,rel=beta,test=foo
- 레이블 배치 전략
-
확장 가능한 쿠버네티스 레이블 예제
label key description label value Application-ID/Application-name 응용 프로그램 이름 또는 ID my-awesome-app/app-nr-2345 Version-nr 버전 번호 ver-0.9 Owner 개체가 속한 팀 또는 개인 Team-kube/Josh Stage/Phase 개발 단계 또는 위치 Dev, staging, QA, Canary, Production Release-nr 릴리즈 번호 release-nr-2.0.1 Tier 앱이 속한 계층 front-end/back-end Customer-facing 고객에게 직접 서비스 하는 앱 여부 Yes/No App-role 앱의 역할 Cache/Web/Database/Auth Project-ID 연관된 프로젝트 ID my-project-276 Customer-ID 자원을 할당한 고객 ID customer-id-29
-
** 출처: 데브옵스를 위한 쿠버네티스 마스터
** 출처: 쿠버네티스 인 액션