[CKAD] Kubernetes controller

HongSeokChoi·2025년 8월 27일

ckad

목록 보기
6/14

컨트롤러(Controller)란?

  • 쿠버네티스의 두뇌 역할.
  • 클러스터 상태를 모니터링하고 원하는 상태(Desired State)를 유지하도록 자동 조치한다.
  • 예: Pod이 죽거나 부족하면 자동으로 새 Pod을 생성해 애플리케이션이 항상 실행되도록 보장한다.

ReplicationController (RC) vs ReplicaSet (RS)

구분ReplicationController (RC)ReplicaSet (RS)
상태구식(Deprecated), 유지 보수 X최신 권장 리소스
API 버전apiVersion: v1apiVersion: apps/v1
목적지정된 수의 Pod 유지, 자동 복구동일 (Pod 복제본 관리 및 자동 복구)
Selector선택기(selector) 선택 사항 (생략 가능)Selector 필수 (matchLabels 등으로 Pod 매칭)
라벨 관리단순 라벨 매칭고급 라벨 매칭 지원 (matchLabels, matchExpressions)
실무 사용거의 사용 안 함Deployment, StatefulSet의 기반으로 적극 사용
주요 활용학습용, 과거 문서현대 쿠버네티스 환경에서 표준

ReplicationController (RC)

역할

  • Pod 복제본을 여러 개 유지해 고가용성(HA) 제공
  • 단일 Pod이라도 RC가 있으면 죽었을 때 자동으로 새 Pod 생성
  • 여러 Pod을 생성해 부하 분산 가능
  • 한계: 구식 리소스 → ReplicaSet으로 대체됨

구성 예시 (rc-definition.yml)

apiVersion: v1
kind: ReplicationController
metadata:
  name: myapp-rc
  labels:
    app: myapp
    type: front-end
spec:
  replicas: 3   # 유지할 Pod 개수 지정
  template:     # Pod 템플릿
    metadata:
      name: myapp-pod
      labels:
        app: myapp
        type: front-end
    spec:
      containers:
      - name: nginx-container
        image: nginx

주요 명령어

kubectl create -f rc-definition.yml        # RC 생성
kubectl get replicationcontroller          # RC 상태 확인
kubectl get pods                           # RC가 관리하는 Pod 목록 확인

ReplicaSet (RS)

역할

  • RC와 거의 동일 (Pod 복제 관리, 자동 복구, 스케일링)
  • 차이점 → Selector(선택기)가 반드시 필요
    • 특정 라벨과 매칭되는 Pod을 관리
    • 기존 Pod도 라벨이 맞으면 관리 대상으로 포함

구성 예시 (replicaset-definition.yml)

apiVersion: apps/v1
kind: ReplicaSet
metadata:
  name: myapp-replicaset
  labels:
    app: myapp
    type: front-end
spec:
  replicas: 3
  selector:
    matchLabels:
      type: front-end
  template:       # Pod 템플릿
    metadata:
      name: myapp-pod
      labels:
        app: myapp
        type: front-end
    spec:
      containers:
      - name: nginx-container
        image: nginx

주요 명령어

kubectl create -f replicaset-definition.yml     # ReplicaSet 생성
kubectl get replicaset                          # RS 상태 확인
kubectl get pods                                # RS가 관리하는 Pod 확인
kubectl replace -f replicaset-definition.yml    # 정의 파일 수정 후 적용
kubectl delete replicaset <이름>                # RS 및 관련 Pod 삭제

Label & Selector

구분Label (라벨)Selector (셀렉터)
정의리소스에 붙이는 key:value 태그특정 라벨 조건에 맞는 리소스 선택 필터
형태app: myapp, tier: frontendmatchLabels: app=myapp
역할리소스 분류, 그룹화, 식별라벨 기준으로 Pod/리소스 선택
사용 위치Pod, Service, ReplicaSet, Deployment 등ReplicaSet, Deployment, Service 등
예시Pod → labels: app=myappRS → selector: matchLabels: app=myapp
비유"이 Pod은 app=myapp이야" (태그 붙이기)"app=myapp인 Pod만 관리할게" (필터링)

ReplicaSet 스케일링

방법 1: 정의 파일 수정

# replicas: 3 → 6 으로 수정 후 적용
kubectl replace -f replicaset-definition.yml

방법 2: 명령어 사용

kubectl scale --replicas=6 -f replicaset-definition.yml
# 또는
kubectl scale --replicas=6 replicaset myapp-replicaset

주의: 이 경우 YAML 파일 안의 replicas 값은 업데이트되지 않음.

고급

  • 자동 스케일링 → HPA(Horizontal Pod Autoscaler) 활용

요약

  • RC: 과거 리소스, 이제는 거의 사용하지 않음
  • RS: RC의 발전형, Deployment 및 StatefulSet의 기반
  • 라벨과 셀렉터를 활용해 Pod을 그룹화하고 선택적으로 관리
  • 현대 환경에서는 ReplicaSet보다 Deployment를 주로 사용 (자동 업데이트 및 롤백 지원)
profile
Network/Cloud

0개의 댓글