Kubernetes

Operator의 spec과 status 필드 역할

DevOps Engineer 2025. 3. 26. 20:40
728x90

 

spec은 사용자가 의도한 목표 상태이고, status는 현재 실제 시스템의 상태입니다.
Operator는 이 둘을 비교해 Reconciliation을 수행하고, 이를 통해 시스템이 항상 원하는 상태를 유지하도록 합니다.

 

정리: spec과 status의 용도

필드 용도 작성 주체
spec 사용자가 원하는 목표 상태 (Desired State)를 정의 사용자 / Controller 외부 입력
status 실제 시스템의 현재 상태 (Observed State)를 반영 Operator / Controller (자동 갱신)

자세한 설명

spec – "사용자가 원하는 상태"

  • 사용자가 어떻게 동작하길 원하는지를 정의합니다.
  • 예를 들어, 파드 개수, 이미지 버전, 리소스 제한, 설정 값 등이 여기에 들어갑니다.
  • Controller는 이 spec을 기준으로 동작을 설계합니다.

예시

apiVersion: apps/v1
kind: Deployment
spec:
  replicas: 3
  template:
    spec:
      containers:
        - name: my-app
          image: my-app:v1

→ 사용자는 "3개의 파드를 실행해줘" 라고 요청하고 있는 것.

 

 

status – "지금 시스템이 어떤 상태인지"

  • Operator 또는 Controller가 실제 시스템을 관찰하고 이를 기록합니다.
  • 현재 몇 개의 파드가 실행 중인지, 에러가 있는지, 어떤 조건을 만족했는지 등
  • 외부 시스템/사용자가 리소스의 진행 상황을 확인할 수 있도록 도와줍니다.

예시

status:
  replicas: 3
  readyReplicas: 2
  conditions:
    - type: Available
      status: "False"
      reason: "MinimumReplicasUnavailable"

→ 지금은 2개만 준비됐고, 아직 목표인 3개에 못 미친다는 것을 보여줌.

Operator에서의 역할 분담

  • spec을 보고 → Controller가 시스템에 리소스를 조정하고
  • status를 갱신 → 현재 상황을 사용자/다른 시스템에 보여줌

즉, spec은 명령, status는 보고!

 

 

728x90