개요

쿠버네티스에서 컨트롤러는 제어 루프를 통해 원하는 상태와 현재 상태를 맞추는 두뇌 역할 수행 사용자가 선언한 스펙을 지속 관찰하고 차이를 줄이기 위해 리소스를 생성·수정·삭제하는 자동화 구성 요소 이 문서는 주요 컨트롤러를 실무 맥락과 비유를 곁들여 정리하며, 디버깅 관점에서의 관계와 주의점을 함께 정리

워크로드 컨트롤러

Deployment

  • 역할: 상태 비저장 앱의 표준 배포 단위, 버전 관리와 롤링 업데이트 담당
  • 특기: 롤링 업데이트로 무중단에 가까운 배포, 이슈 시 손쉬운 롤백
  • 관계: 파드 직접 관리 대신 ReplicaSet을 통해 간접 관리

ReplicaSet

  • 역할: 지정된 파드 수를 유지하는 계수 담당
  • 특기: 파드가 부족하면 빠르게 신규 생성, 과하면 정리
  • 관계: 일반적으로 사용자가 직접 생성하지 않음, Deployment가 생성한 하위 리소스인 경우가 표준

DaemonSet

  • 역할: 모든 노드마다 파드 1개씩 보장
  • 용도: 로그 수집기, 모니터링 에이전트, CNI 등 노드 단위로 필요한 에이전트 배치
  • 특기: 노드 증감에 따라 자동으로 파드 배치와 정리 수행

StatefulSet

  • 역할: 아이덴티티와 순서가 중요한 워크로드 관리
  • 용도: DB, Redis, Kafka 등 스토리지 연결과 고정 네이밍이 필요한 경우
  • 특기: 파드 이름 고정, 재시작 시 기존 PVC와 재결합

Job

  • 역할: 단발성 작업을 보장하고 성공 시 종료
  • 용도: 데이터 마이그레이션, 일회성 배치, 학습 파이프라인의 단건 태스크
  • 특기: 성공 시 Completed 상태로 종료되어 자원 반환

시간과 네트워크 컨트롤러

CronJob

  • 역할: 스케줄에 따라 Job을 생성하는 상위 컨트롤러
  • 용도: 정기 백업, 리포트 생성, 주기적 데이터 집계
  • 특징: 리눅스 crontab 표현식 기반 스케줄링

Ingress Controller

  • 역할: 외부 트래픽을 L7 기준으로 라우팅하여 내부 서비스로 전달
  • 용도: nginx-ingress, aws-load-balancer-controller 등 환경에 맞는 컨트롤러 사용
  • 특징: 호스트와 경로 기반 라우팅 구성, 클라우드 환경에서는 매칭되는 L7 로드밸런서와 연동되는 경우가 일반적

스케일링 컨트롤러

HPA (Horizontal Pod Autoscaler)

  • 역할: 파드 개수 수평 확장과 축소 자동화
  • 방식: CPU 사용률, 사용자 정의 메트릭 등을 감시하여 Deployment의 replicas 조정
  • 특징: 가장 널리 쓰이는 오토스케일링 방식

VPA (Vertical Pod Autoscaler)

  • 역할: 파드 리소스 요청과 제한을 상향 또는 하향 조정하는 수직 확장
  • 방식: 관측된 사용량 기반 권고 또는 업데이트를 통해 더 큰 사양으로 재시작
  • 주의: 파드 재시작이 수반될 수 있어 서비스 영향 가능, HPA와 병행 시 정책 충돌 주의

Cluster Autoscaler / Karpenter

  • 역할: 스케줄 불가 파드가 대기 중일 때 노드 규모 자동 조정
  • 방식: Pending 파드 수요를 기반으로 노드 추가, 유휴 리소스가 충분하면 축소
  • 참고: Karpenter는 신속한 프로비저닝과 비용 최적화에 초점, 기존 Cluster Autoscaler 대비 다양한 프로비저닝 전략 제공

커스텀 컨트롤러와 오퍼레이터

Operators

  • 역할: 복잡한 애플리케이션의 운영 지식을 코드화한 커스텀 컨트롤러
  • 예시: Prometheus Operator, Elasticsearch Operator 등
  • 특징: CRD 기반으로 백업, 업그레이드, 샤딩 등 도메인 특화 작업을 자동화

한눈에 보는 요약표

종류컨트롤러 이름핵심 역할비유
작업반장Deployment웹 및 API 배포와 버전 관리프로젝트 팀장
ReplicaSet파드 개수 유지, Deployment 하위 리소스인원 점검 반장
DaemonSet모든 노드에 1개씩 에이전트 배치층별 경비원
StatefulSet순서와 정체성이 중요한 상태 저장 워크로드지정석 전문가
Job1회성 작업 완료 후 종료일용직 알바
시간/네트워크CronJob스케줄 기반 Job 생성정기 청소
Ingress Controller외부 트래픽 L7 라우팅안내 데스크
스케일링HPA파드 수 자동 조절인사팀 채용
VPA파드 사양 자동 조절헬스 트레이너
Karpenter노드 자동 증설 및 축소건물 증축 담당

계층 구조

관계 파악은 원인 분석과 디버깅 시간을 줄이는 지름길 사용자 정의 리소스가 어떤 컨트롤러를 통해 어느 하위 리소스로 이어지는지 확인할 것

graph TD
  User[사용자/개발자] -->|YAML 정의| Deployment
  User -->|YAML 정의| HPA
  User -->|YAML 정의| Service

  HPA[HPA] -->|replicas 조정| Deployment[Deployment]
  Deployment -->|관리| ReplicaSet[ReplicaSet]
  ReplicaSet -->|생성/삭제| Pod[Pod]

  Service[Service] -->|라벨 셀렉터| Pod

  Ingress[Ingress Controller] -->|외부 라우팅| Service

  Karpenter[Karpenter/CA] -->|노드 증설| Node[Node]
  Node -->|스케줄링 대상| Pod

핵심 포인트

  • 파드가 생성되지 않으면 Deployment와 ReplicaSet 이벤트부터 확인
  • 파드 개수 변동이 의도와 다르면 HPA 정책과 메트릭 확인
  • 스케줄 불가가 지속되면 Karpenter 또는 Cluster Autoscaler 상태와 제약 조건 점검
  • 외부 접속 이슈는 Ingress Controller와 Service, 엔드포인트 셋의 연계를 순서대로 확인

마무리

컨트롤러는 선언적 상태를 실현하는 자동화 엔진 디버깅은 관계 그래프를 따라 상위에서 하위로 내려가며 이벤트와 조건을 확인하는 절차로 단순화 가능 운영 환경에서는 스케일링 정책 충돌과 스토리지 바인딩, 네트워크 라우팅 규칙의 일관성에 특히 유의할 것

참고자료