1. 쿠버네티스에서 라벨이란?
라벨은 쿠버네티스 오브젝트에 첨부할 수 있는 키-값 쌍의 메타데이터입니다. 이를 통해 사용자는 리소스를 식별하고, 그룹화하며, 선택적인 작업을 수행할 수 있습니다.
- Key-Value 로 구성된다.
- 레이블은 사용자가 클러스터내에 객체를 만들때 메타데이터로 붙일 수 있다. 생성된 이후 언제든 수정이 가능하며 코어 시스템에 직접적인 의미는 없습다.
- 오브젝트마다 Key-Value로 Label을 정의할 수 있으며 Key는 고유한 값이어야 합니다.
- Label 키가 해당 리소스 내에서 고유하다면 하나 이상 원하는 만큼 Label을 가질 수 있습다.
2. 라벨을 쓰는 이유?
라벨은 리소스를 분류하고, 복잡한 시스템 내에서 특정 오브젝트를 쉽게 찾거나 관리할 수 있게 해줍니다. 예를 들어, 특정 환경(개발, 스테이징, 프로덕션)의 파드를 분리하거나, 특정 버전의 애플리케이션을 관리하는데 사용됩니다.
3. 라벨의 특성과 쓰는 방법
- 쿠버네티스 오브젝트 정의 파일에 metadata.labels 섹션을 추가하여 라벨을 지정합니다.
- 오브젝트에 여러 개의 라벨을 지정할 수 있습니다.
4. 라벨의 사용 사례
4 -1) 애플리케이션의 여러 구성 요소 관리
같은 애플리케이션의 프론트엔드, 백엔드, 데이터베이스 등 다양한 구성 요소를 식별하기 위해 라벨을 사용합니다.
예시:
- 프론트엔드 파드에 app: myapp, tier: frontend 라벨을 붙입니다.
- 백엔드 파드에 app: myapp, tier: backend 라벨을 붙입니다.
4 -2) 환경별 배포 관리
개발, 스테이징, 프로덕션 등 각각의 환경을 식별하고 관리합니다.
예시:
- 개발 환경 파드에 env: development 라벨을 붙입니다.
- 스테이징 환경 파드에 env: staging 라벨을 붙입니다.
- 프로덕션 환경 파드에 env: production 라벨을 붙입니다.
4 -3) 블루/그린 배포
새로운 버전을 배포할 때 오래된 버전과 새로운 버전의 파드를 동시에 실행하여, 무중단 배포를 할 수 있습니다.
예시:
- 버전 1 파드에 app: myapp, version: v1 라벨을 붙입니다.
- 버전 2 파드에 app: myapp, version: v2 라벨을 붙입니다.
5. 쿠버네티스에서 셀렉터란?
셀렉터는 라벨을 이용하여 쿠버네티스 오브젝트를 선택하는 방법입니다. 셀렉터는 kubectl 명령어나 오브젝트의 spec.selector 필드에 지정할 수 있습니다.
6. 셀렉터를 쓰는 이유
셀렉터를 사용하면 특정 라벨을 가진 오브젝트 집합을 대상으로 작업을 수행할 수 있습니다. 예를 들어, 서비스는 셀렉터를 사용하여 트래픽을 전달할 파드 집합을 결정합니다.
7. 셀렉터의 쓰는 방법과 특징
셀렉터에는 equals, not equals, in, not in, exists 등의 연산자를 사용할 수 있으며, 하나 이상의 조건을 조합하여 사용할 수 있습니다.
8. 셀렉터를 이용한 오브젝트 선택
라벨 셀렉터를 이용하여 특정 라벨을 가진 오브젝트 집합을 선택합니다.
kubectl get pods --selector="env=development"
- 명령어를 사용하여 개발 환경의 모든 파드를 선택합니다.
kubectl get pods --selector="app=myapp,version=v2"
- 명령어를 사용하여 애플리케이션 myapp의 버전 v2 파드만 선택합니다.
9. 라벨 셀렉터를 사용한 리소스 제한
# 파일: dev-quota.yaml
apiVersion: v1
kind: ResourceQuota
metadata:
name: dev-quota
namespace: dev
spec:
hard:
pods: "10"
requests.cpu: "4"
requests.memory: 8Gi
scopeSelector:
matchExpressions:
- operator : In
scopeName: 'Pod'
values: ["env=development"]
리소스 쿼타를 설정할 때 셀렉터를 사용하여 특정 라벨을 가진 오브젝트 집합에만 적용할 수 있습니다.
dev 네임스페이스 내에서 env=development 라벨이 있는 파드에만 지정된 리소스 쿼타가 적용됩니다.
10. 실습 코드 예시: 라벨 셀렉터를 사용한 파드 선택
라벨을 추가하고 셀렉터를 이용하여 파드를 선택하는 간단한 예시입니다.
# dev-pod.yaml 파일 내용
apiVersion: v1
kind: Pod
metadata:
name: dev-pod
labels:
env: development
spec:
containers:
- name: nginx-container
image: nginx
이 파드를 생성한 후, 아래의 명령어로 env=development 라벨이 붙은 파드를 선택할 수 있습니다.
kubectl apply -f dev-pod.yaml
kubectl get pods --selector="env=development"
'Kubernetes' 카테고리의 다른 글
[Kubernetes] Service 개념 및 종류 (1) | 2023.12.17 |
---|---|
[Kubernetes - 파드 실습] 셀렉터, 레이블 활용, 레플리케이션 컨트롤러 & 스케줄링 테스트 (0) | 2023.12.12 |
[Kubernetes] 쿠버네티스 구성 & Pod 과정 (0) | 2023.12.07 |
[Kubernetes] 쿠버네티스 클러스터 생성 (0) | 2023.11.26 |
[Docker]비디오 스트리밍 마이크로서비스 (2) | 2023.06.06 |
댓글