[Kubernetes] 레플리카셋(Replica Set): 일정 개수의 포드를 유지하는 컨트롤러

연수·2021년 11월 1일
1

kubernetes

목록 보기
6/15

❓레플리카셋을 사용하는 이유

마이크로서비스에서는 여러 개의 동일한 컨테이너를 생성한 뒤 외부 요청이 각 컨테이너에 적절해 분배될 수 있어야 한다.

쿠버네티스에서는 동일한 여러 개의 포드를 생성해 외부 요청을 각 포드에 분배하는 방식을 사용해야 한다.

그러나 여러 개의 포드를 직접 생성하는 방법은 매우 비효율적이며, 관리가 어렵다.

이러한 한계점을 해결해주기 위해 사용하는 것이 바로 레플리카셋이다.

레플리카셋의 역할

  • 정해진 수의 동일한 포드가 항상 실행되도록 관리
  • 노드 장애 등의 이유로 포드를 사용할 수 없다면 다른 노드에서 포드를 다시 생성

🦕 레플리카셋 사용하기

  • replicaset-nginx.yaml
    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
  • spec.replicas: 동일한 포드를 몇 개 유지시킬 것인지 설정
  • spec.template 아래의 내용들: 포드를 생성할 때 사용할 템플릿을 정의. 포드 스펙 또는 포드 템플릿이라고 말함.

🏋️‍♂️ 레플리카셋 동작 원리

레플리카세슨 포드와 연결되어 있지 않다.

레플리카셋은 포드와 느슨한 연결(loosely coupled)을 유지하고 있으며, 이 연결은 라벨 셀렉터(Label Selector)를 통해 이루어진다.

포드를 생성할 때, 부가적인 정보 중 하나로 라벨을 설정할 수 있다.

라벨은 서로 다른 오브젝트가 서로를 찾아야 할 때 사용되기도 한다.

레플리카셋은 spec.selector.matchLabel에 정의된 라벨을 통해 생성해야 하는 포드를 찾는다.

레플라카셋의 목적은 '일정한 개수의 포드를 유지하는 것'이다.

따라서 현재 포드의 개수가 replicas에 설정된 값보다 적으면 레플리카셋은 포드를 더 생성하고, 포드가 너무 많으면 반대로 포드를 삭제해 설정된 포드 개수에 맞추려고 한다.

[출처] 시작하세요! 도커/쿠버네티스 (용찬호 지음)

profile
DCDI

0개의 댓글