본문 바로가기

K8S

쿠버네티스(Kubernetes) 레플리카셋 (ReplicaSet)

728x90

■ 쿠버네티스(Kubernetes) 레플리카셋 (ReplicaSet) 개요

  • 레플리카 파드 집합의 실행을 항상 안정적으로 유지하는 것을 목적으로 한다. 즉, 정의된 수량 만큼의 파드를 유지하여 가용성을 모증하는데 사용 된다. 
  • 레플리카셋을 단독으로 사용하는 것은 권장하지 않으며, 선언적 업데이트를 수행하는 디플로이먼트라는 상위 개념이 존재 하기 떄문에 레플리카셋을 직접 사용하기 보다 디플로이먼트를 사용하는 것을 권장 한다.
  • 사용자는 레플리카셋 오브젝트를 직접 조작할 필요 없이 디플로이먼트를 사용하고 이를 통해서 레플리카셋을 제어하는 방식이 권장 된다. 
  • 디플로이먼트에 의해서 생성된 레플리카셋만 제어 가능하고, 사용자에 의해서 생성된 레플리카셋은 제어가 불가능 하다. 

 

 쿠버네티스(Kubernetes) 레플리카셋 (ReplicaSet) 사용 사례

  1. 단순 업무 수행
    • 애플리케이션 버전 관리 및 업데이트가 필요하지 않고, 단순히 특정 수량의 파드 유지만 필요한 경우 
    • 단순한 백그라운드 작업을 수행하는 워커 파드가 항상 일정 수 유지 되어야 하는 경우
    • 새로운 애플리케이션 버전 테스트와 같이 간단한 테스트 및 디버킹 작업을 수행 할 때 
  2. 레거시 시스템과 통합
    • 기존 시스템이 레플리카셋과 더 적합한 경우
    • 점진적인 고도화 단계로써 디플로이먼트를 사용한 선언적 업데이트 사용보다 레플리카셋으로 초기 구성 이후 디플로이먼트로 고도화가 필요한 경우 

 

 쿠버네티스(Kubernetes) 레플리카셋 (ReplicaSet) 주의 사항

  • 레플리카셋에서 생성된 파드를 관리하는 방법은 레이블을 이용하여 관리한다. 레플리카셋의 셀렉터가 레이블을 사용하여 파드가 특정 레플리카셋에 의해 생성된 파드 임을 확인 한다.
  • 파드의 레이블이 레플리카셋에서 정의한 레이블과 일치하게 된다면 레플리카는 해당 파드를 인식하게 되고 해당 파드를 레플리카의 파드로 획득하게 된다. 결과적으로 의도하지 않은 동작이 발생하게 된다
# 레플리카셋 템플릿
apiVersion: apps/v1
kind: ReplicaSet
metadata:
  name: frontend
  labels:
    app: guestbook
    tier: frontend
spec:
  # 케이스에 따라 레플리카를 수정한다.
  replicas: 3
  selector:
    matchLabels:
      tier: frontend
  template:
    metadata:
      labels:
        tier: frontend
    spec:
      containers:
      - name: php-redis
        image: gcr.io/google_samples/gb-frontend:v3

---

# 파드 템플릿
apiVersion: v1
kind: Pod
metadata:
  name: pod1
  labels:
    tier: frontend
spec:
  containers:
  - name: hello1
    image: gcr.io/google-samples/hello-app:2.0
  • 예제 코드와 같이 레플리카셋의 `.spec.selector.matchLabels` 항목과 파드 템플릿의 `.metadata.labels` 항목이 동일할 경우 레플리카셋은 파드 템플릿으로 생성된 pod1을 획득하게 된다.
  • 결과적으로 레플리카셋으로 생성된 3개의 파드중 하나를 중지하고 pod1을 자신의 그룹에 넣게 된다. 이는 의도하지 않은 결과로써 혼란을 초래할 수 있다. 이러한 이슈는 디플로이먼트를 사용해도 동일하게 발생 할 수 있으니 셀렉터 및 레이블 관리에 더 신경써야 한다.
728x90