DevOps/Kubernetes
쿠버네티스 - Controller(Replication Controller, ReplicaSet)
재성스
2024. 10. 29. 15:15
반응형
Replication Controller와 ReplicaSet은 클러스터 내 특정 수의 파드를 유지하는 데 사용되는 Controller다. 쉽게 말해, Pod를 관리하는 관리자 역할을 하며, 설정된 수의 Pod가 항상 실행되도록 감시하고 관리한다.
Replication Controller : (초기) 기본 파드 관리자
ReplicationController는 쿠버네티스 초기 버전에서 도입된 파드 관리자이며, 설정된 수(replicas)의 파드가 항상 실행되도록 보장한다.
동작 원리
- replicas 필드를 통해 원하는 파드 수를 설정한다.
- Replication Controller는 설정된 수의 파드가 실제 클러스터에서 실행되고 있는지 주기적으로 확인한다.
- 파드가 삭제되거나 문제가 생긴 경우, 즉시 새 파드를 생성하여 원하는 파드 수를 유지한다.
예
apiVersion: v1
kind: ReplicationController
metadata:
name: replication1
spec:
replicas: 2
selector:
cascade: "false"
template:
metadata:
labels:
cascade: "false"
spec:
containers:
- name: container
image: kubetm/app:v1
- 위 yaml은 replication1 이라는 이름의 ReplicationController를 생성하고, 2개의 파드가 항상 유지되도록 관리하도록 설정함.
ReplicaSet : (최신) 똑똑해진 파드 관리자
- ReplicatSet은 Replication Controller를 개선한 것으로, 쿠버네티스에서 더 유연한 파드 Selector 기능을 추가하여 발전된 Controller이다.
- ReplicaSet은 Replication Controller와 거의 비슷한 역할을 하지만, 주로 Match Expressions를 통해 다양한 조건으로 파드를 선택할 수 있어 더 세밀한 제어가 가능하다.
동작 원리
- replicas 필드와 selector 옵션을 활용해 지정된 수의 파드가 특정 조건에 맞는지 확인하고 유지한다.
- Match Labels나 Match Expressions 조건을 통해 특정 레이블이 있는 파드만 관리하도록 설정할 수 있다.
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: replica1
spec:
replicas: 1
selector:
matchLabels:
type: web
ver: v1
matchExpressions:
- {key: type, operator: In, values: [web]}
- {key: ver, operator: Exists}
template:
metadata:
labels:
type: web
ver: v1
location: dev
spec:
containers:
- name: container
image: kubetm/app:v1
- 위 예시는 replica1이라는 이름의 ReplicaSet을 생성하고, type=web, ver=v1 등의 조건에 맞는 파드를 관리하도록 설정했다.
Template과 Selector: 컨트롤러가 파드를 선택하는 방법
- Template은 컨트롤러가 생성할 파드의 구성을 정의하는 역할을 한다.
- Selector는 특정 레이블에 맞는 파드를 선택하는 조건으로 , Match Labels와 Match Expressions를 사용하여 더 세부적으로 파드를 관리할 수 있다.
- 예를 들어, 아래 Selector 조건을 통해 type=web과 ver=v1이라는 레이블을 가진 파드만 선택하도록 설정한다. Matcg Expressions는 In, Exists 등 다양한 조건을 지원하여 여러 특성을 가진 파드중에서도 세밀하게 필터링할 수 있다.
selector:
matchLabels:
type: web
ver: v1
matchExpressions:
- {key: type, operator: In, values: [web]}
- {key: ver, operator: Exists}
Match Expressions 옵션
옵션 | 설명 | 사용 예시 | 조건 만족 예시 |
In | 특정 키가 지정된 값 중 하나라도 포함될 때 조건을 만족 | key: environment operator: In values: ["dev", "prod"] |
environment: "dev" 또는 environment: "prod" |
NotIn | 특정 키가 지정된 값을 포함하지 않을 때 조건 만족 | key: environment operator: NotIn values: ["test", "staging"] |
environment: "prod" 또는 environment: "dev" |
Exists | 특정 키가 존재하기만 하면 조건 만족 | key: app operator: Exists |
app: "any_value" |
DoesNotExist | 특정 키가 존재하지 않을 때 조건 만족 | key: app operator: DoesNotExist |
app 레이블이 없음 |
Gt (Greater) | 특정 키의 값이 지정한 숫자보다 클 때 조건 만족 (숫자형 값 사용) | key: version operator: Gt values: ["2"] |
version: 3, version: 4 |
Lt (Lesser) | 특정 키의 값이 지정한 숫자보다 작을 때 조건 만족(숫자형 값 사) | key: version operator: Lt values: ["2"] |
version: 1, version: 0 |
특징 요약 및 비교
특징 | Replication Controller | ReplicaSet |
도입 시기 | 초기 쿠버네티스 버전 | ReplicationController의 개선판 |
파드 관리 방식 | 고정된 레이블로 파드 관리 | 더 유여한 Selector 조건으로 파드 관리 |
사용 빈도 | 사용이 줄어들고, 주로 ReplicaSet 사용 | 대부분 ReplicaSet 사용 |
업데이트 관리 | 수동 업데이트 필요 | Deployment를 통해 자동화된 업데이트 지원 |
핵심
- ReplicationController는 고정된 파드 수를 유지하며, 단순한 파드 관리가 필요할 때 유용
- ReplicaSet은 파드 관리 조건을 세밀하게 설정할 수 있으며, 보통 Deployment와 결합하여 자동화된 배포와 업데이트를 제공
반응형