본문 바로가기
Web/Infra

[Kubernetes] Replica Set, 파드의 개수을 항상 유지

by EricJeong 2020. 10. 4.

Replica Set의 개념

쿠버네티스에서의 가장 작은 단위인 Pod는, 장애가 발생하거나 삭제되었을 때 자동으로 복구되지 않습니다. 즉, 관리자가 직접 파드가 죽은 것을 확인하고, 파드를 재생성하여 교체하여 주어야 정상적인 서비스를 받을 수 있습니다.

이렇게 관리자가 계속해서 파드를 재생성하는 것은 효율적이지 못합니다.

 

쿠버네티스는 이를 해결하기 위해 중간에서 파드의 개수를 실시간으로 확인하며 죽은 파드가 생긴다면 교체해주고, 재생성하여 언제나 지속적인 서비스를 제공할 수 있도록 만들어주는 파드의 관리자 성격인 레플리카셋(Replica Set)을 제공합니다.

 

레플리카셋은 복수의 파드를 생성하여 관리할 때 유효합니다. 자기 자신이 가지고 있는 파드의 템플릿을 사용하여 항상 일정 개수의 파드를 유지합니다. 즉, 레플리카셋은 항상 파드를 생성하기만 하지는 않습니다. 정해진 수를 초과하는 파드가 생성된다면 이를 제거하여 파드의 개수를 일정하게 유지합니다. 이러한 역할을 정리해 보면 다음과 같습니다.

 

  • 정해진 수의 파드가 항상 안정적으로 실행되도록 관리합니다
  • 파드에 장애가 발생하거나, 사용할 수 없게 되는경우 파드를 재생성 합니다
  • 파드가 정해진 개수보다 많아질 경우 종료합니다

Replica Set의 동작 원리

레플리카셋이 파드를 생성하기는 하지만, 파드와 레플리카셋은 별도로 동작합니다. 즉, 레플리카셋은 직접적으로 파드와 연결되어있지 않습니다. 대신 레플리카셋은 관리할 파드를 찾기 위해 라벨 셀렉터(Label Selector)를 사용합니다.

 

apiVersion: apps/v1
kind: ReplicaSet
metadata:
  name: replicaset-nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: my-nginx-pods-label
  template:
    metadata:
      name: my-nginx-pod
      labels:
        app: my-nginx-pods-label
    spec:
      containers:
      - name: nginx
        image: nginx:latest
        ports:
        - containerPort: 80

 

파드가 metadata로 가지고 있는 라벨을 레플리카셋의 selector에 정의된 matchLabels를 사용하여 일치하는 라벨을 가진 파드를 자기 자신이 관리할 파드로 선정합니다. 만약 선정된 파드의 개수가 spec에 선언된 replicas보다 적다면, 가지고 있는 pod template을 통해 파드를 그 개수만큼 생성하게 됩니다.

 

레플리카셋을 선언하였지만 이미 파드의 개수가 3개라면 레플리카셋은 더이상 파드를 생성하지 않습니다. 레플리카셋은 파드를 생성하기 위한 목적이 아닌, 파드의 개수를 일정하게 유지하는 것이 목적이기 때문입니다. 위 내용을 my-re.yaml 파일로 생성한 후, kubectl apply -f my-rs.yaml 명령어를 실행한 결과는 아래와 같습니다.

 

 

시간이 지남에 따라 파드의 개수가 늘어나고, 레플리카셋에 선언한 개수대로 파드를 생성하여 관리하는 모습을 볼 수 있습니다.

 

References

kubernetes.io/ko/docs/concepts/workloads/controllers/replicaset/

 

레플리카셋

레플리카셋의 목적은 레플리카 파드 집합의 실행을 항상 안정적으로 유지하는 것이다. 이처럼 레플리카셋은 보통 명시된 동일 파드 개수에 대한 가용성을 보증하는데 사용한다. 레플리카셋의 �

kubernetes.io

http://www.yes24.com/Product/Goods/84927385

 

시작하세요! 도커/쿠버네티스

본서는 도커를 처음 접하는 개발자를 위한 도커 컨테이너와 이미지의 기본적인 개념을 먼저 설명한 뒤, 도커 컴포즈와 스웜 모드를 통해 컨테이너 애플리케이션을 YAML 파일로 작성하고 클러스��

www.yes24.com

 

댓글