쿠버네티스
[쿠버네티스] 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 : 새 파드를 생성할 때 사용할 파드의 설정 템플릿입니다.
동작
- 실행중인 pod 목록을 지속적으로 monitoring
- selector에서 지정한 app의 pod 실제 수가 rplicas에서 선언한 숫자와 일치하는지 확인
- Pod가 부족하면 새 복제본을 작성
- 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 연산자
- In : key와 values를 지정하여 key, value가 일치하는 pod만 연결
- NotIn: key는 일치하고 value는 일치하지 않는 pod에 연결
- Exists: key에 맞는 label의 pod를 연결
- DoesNotExist: key와 다른 label의 pod를 연결
- matchExpressions 연산자
- --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을 관리하는 방식을 사용하는 것이 최신 표준입니다.