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와 결합하여 자동화된 배포와 업데이트를 제공
반응형