쿠버네티스

[쿠버네티스] ReplicationController, ReplicaSet 이란? + 차이점

woo0doo 2025. 3. 9. 18:45

ReplicationController와 ReplicaSet에 대해 설명하기 전에 쿠버네티스의 컨트롤러의 기능과 종류는 다음과 같습니다.


쿠버네티스의 컨트롤러의 기능

  • - Pod의 개수를 보장

 

쿠버네티스 컨트롤러 종류

이번 글에서는 이중에서 Replication Controller와 Replicaset에 대해 다루어보려고 합니다.

 

 

Replication Controller 이란?

  • 요구하는 Pod의 개수를 보장하며 파드 집합의 실행을 항상 안정적으로 유지하는 것을 목표
    • 요구하는 Pod의 개수가 부족하면 template를 이용해 Pod를 추가
    • 요구하는 Pod 수 보다 많으면 최근에 생성된 Pod를 삭제
  • 기본 구성
    • selector : 어떤 파드가 관리 대상인지를 결정합니다.
    • replicas : 클러스터 내에 유지하고자 하는 파드의 원하는 개수를 지정합니다.
    • template : 새 파드를 생성할 때 사용할 파드의 설정 템플릿입니다.

동작

  1. 실행중인 pod 목록을 지속적으로 monitoring
  2. selector에서 지정한 app의 pod 실제 수가 rplicas에서 선언한 숫자와 일치하는지 확인
  3. Pod가 부족하면 새 복제본을 작성
  4. Pod가 많으면 초과 복제본을 제거 (많은 경우 - 누군가 수동으로 pod 만드는 경우 등..)

 

예시

apiVersion: v1
kind: ReplicationController
metadata:
  name: my-rc
spec:
  replicas: 3
  selector:
    app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      containers:
      - name: my-container
        image: nginx:latest

 

설명:

  • selector 필드는 단순히 app: my-app이라는 key-value 쌍을 사용하여 파드를 선택합니다.
  • Replication Controller는 위와 같이 단순한 동등 비교 방식만 사용합니다.

 

 

Replicaset 이란?

  • Replication controller와 성격은 동일하게 pod의 개수 보장
  • Replication controler보다 풍부한 selector
    • matchExpressions 연산자
      1. In : key와 values를 지정하여 key, value가 일치하는 pod만 연결
      2. NotIn: key는 일치하고 value는 일치하지 않는 pod에 연결
      3. Exists: key에 맞는 label의 pod를 연결
      4. DoesNotExist: key와 다른 label의 pod를 연결
  • --cascade=orphan 옵션을 통해서 연쇄 삭제 기능 비활성화 (default = true)
    • Replication controller도 해당되는 기능
    • 연쇄 삭제 기능 비활성화를 하지 않는다면 Replication controller나 Replicaset을 삭제할 경우, 해당 Controller에서 관리하는 모든 파드들이 삭제된다.

 

예시

apiVersion: apps/v1
kind: ReplicaSet
metadata:
  name: my-rs
spec:
  replicas: 3
  selector:
    matchExpressions:
      - key: app
        operator: In
        values:
          - my-app ## 컨트롤러가 관리하는 값
  template:
    metadata:
      labels:
        app: my-app ## 새로 만드는 파드에 붙이는 라벨 값
    spec:
      containers:
      - name: my-container
        image: nginx:latest

 

설명:

 

  • operator: In – 지정된 값 중 하나와 일치하는 레이블을 가진 파드를 선택합니다.
  • values: ["my-app"] – app 레이블의 값이 "my-app"인 파드들을 대상으로 합니다.
  • selector 안에 matchLabels를 사용하여 파드를 선택합니다.
  • 이 구조를 통해 나중에 matchExpressions를 추가하는 등, 더욱 복잡한 조건을 설정할 수 있습니다.

 

 


결론

  • 기능적 유연성: ReplicaSet은 set-based 레이블 선택 방식을 지원하여 더 다양한 조건의 파드 선택이 가능하므로, 복잡한 애플리케이션 환경에서 유리합니다.
  • 현재 권장 사항: 새로운 애플리케이션 배포에서는 직접 Replication Controller를 사용하기보다는, Deployment를 통해 ReplicaSet을 관리하는 방식을 사용하는 것이 최신 표준입니다.