728x90
레이블을 이용한 포드 구성
레이블이란?
- 모든 리소스를 구성하는 매우 간단하면서도 강력한 쿠버네티스 기능
- 리소스에 첨부하는 임의의 키/값 쌍(예 app: test)
- 레이블 셀렉터를 사용하면 각종 리소스를 필터링하여 선택할 수 있음
- 리소스는 한 개 이상의 레이블을 가질 수 있음
- 리소스를 만드는 시점에 레이블을 첨부
- 기존 리소스에도 레이블의 값을 수정 및 추가 가능
- 모든 사람이 쉽게 이해할 수 있는 체계적인 시스템을 구축 가능
- app: 애플리케이션 구성요소, 마이크로서비스 유형 지정
- rel: 애플리케이션의 버전 지정
포드 생성 시 레이블을 지정하는 방법
$ kubectl create -f http-go-pod-v2.yaml
pod/http-go-v2 created http-go-pod-v2.yaml
apiVersion: v1
kind: Pod
metadata:
name: http-go-v2
labels:
creation_method: manual
env: prod
spec:
containers:
- image: gasbugs/http-go
name: http-go
ports:
- containerPort: 8080
protocol: TCP
레이블을 추가 및 수정하는 방법
- 새로운 레이블을 추가할 때는 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
NAME READY STATUS RESTARTS AGE LABELS
http-go-v2 1/1 Running 0 16s creation_method=manual,env=prod
- 특정 레이블 컬럼으로 확인
$ kubectl get pod -L app,rel
NAME READY STATUS RESTARTS AGE APP REL
http-go 1/1 Running 0 8m26s
http-go-v3 1/1 Running 0 12m http-go beta
$ kubectl get pod -L env
NAME READY STATUS RESTARTS AGE ENV
http-go 1/1 Running 0 63s prod
http-go-v3 1/1 Running 0 5m26s
$ kubectl get pod -L creation_method
NAME READY STATUS RESTARTS AGE CREATION_METHOD
http-go-v2 1/1 Running 0 3m59s manual
http-go-v3 1/1 Running 0 2m33s manual-v3
레이블로 필터링하여 검색
$ 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
$ kubectl get pod --show-labels -l '!env'
NAME READY STATUS RESTARTS AGE LABELS http-go 1/1 Running 0 2m <none>
$ kubectl get pod --show-labels -l 'env!=test'
NAME READY STATUS RESTARTS AGE LABELS
http-go 1/1 Running 0 9m10s creation_method=manual,env=prod
http-go-v3 1/1 Running 0 13m app=http-go,creation_method=manual-v3,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
레이블 배치 전략
- https://www.replex.io/blog/9-best-practices-and-examples-for-working-with-kubernetes-labels?fbclid=IwAR0S2tT3iw8FIkVYWwyjL8OW6IWi_gXfk0fDkAk57o6re1rRnoSRRzFVXiM
- 확장 가능한 쿠버네티스 레이블 예제
레이블 키 | 설명 | 레이블 값 |
---|---|---|
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 |
연습문제
- YAML 파일을 사용하여 app=nginx 레이블을 가진 포드를 생성하라
nginx-pod.yaml
apiVersion: v1 kind: Pod metadata: name: nginx labels: app: nginx spec: containers: - image: nginx name: nginx ports: - containerPort: 80 protocol: TCP
kubectl create -f nginx-pod.yaml
- app=nginx를 가진 포드를 get하라
kubectl get pod -l app=nginx
- get된 포드의 레이블의 app을 확인하라
kubectl get pod -L app
- app=nginx 레이블을 가진 포드에 team=dev1 레이블을 추가하라
kubectl label pod nginx team=dev1
$ kubectl get pod --show-labels
NAME READY STATUS RESTARTS AGE LABELS
nginx 1/1 Running 0 3m4s app=nginx,team=dev1
728x90
'개발강의정리 > DevOps' 카테고리의 다른 글
[데브옵스를 위한 쿠버네티스 마스터] 쿠버네티스 핵심 개념-디플로이먼트 (0) | 2020.12.01 |
---|---|
[데브옵스를 위한 쿠버네티스 마스터] 쿠버네티스 핵심 개념-레플리케이션 컨트롤러와 레플리카셋 (0) | 2020.12.01 |
[데브옵스를 위한 쿠버네티스 마스터] 쿠버네티스 핵심 개념-라이브니스, 레디네스, 스타트업 프로브 구성 (0) | 2020.11.27 |
[데브옵스를 위한 쿠버네티스 마스터] 쿠버네티스 핵심 개념-pod (0) | 2020.11.27 |
[데브옵스를 위한 쿠버네티스 마스터] 쿠버네티스 핵심 개념-etcd 데이터베이스 살펴보기 (0) | 2020.09.20 |
댓글