Kubernetes

[Kubernetes] 쿠버네티스 라벨과 셀렉터

운덩하는 개발자 2023. 12. 12.
반응형

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"

 

반응형

댓글