Skip to main content

Operator Pattern & CRD

운영자의 지식을 코드로 — K8s API를 확장하여 복잡한 앱을 자동 관리


1. CRD (Custom Resource Definition)

1.1 K8s API 확장

K8s의 기본 리소스(Pod, Service)만으로 부족할 때, 나만의 리소스를 정의할 수 있음.

# CRD 정의 — "PostgresCluster"라는 새로운 리소스 타입
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
name: postgresclusters.db.example.com
spec:
group: db.example.com
names:
kind: PostgresCluster
plural: postgresclusters
shortNames: ["pgc"]
scope: Namespaced
versions:
- name: v1
served: true
storage: true
schema:
openAPIV3Schema:
type: object
properties:
spec:
type: object
properties:
replicas:
type: integer
version:
type: string
# Custom Resource 생성 — kubectl로 관리 가능
apiVersion: db.example.com/v1
kind: PostgresCluster
metadata:
name: my-db
spec:
replicas: 3
version: "16"
kubectl get postgresclusters    # 또는 kubectl get pgc
kubectl describe pgc my-db

2. Operator 패턴

2.1 CRD + Custom Controller = Operator

flowchart LR
CR["Custom Resource<br/>(원하는 상태)"]
Controller["Custom Controller<br/>(Reconciliation Loop)"]
K8sAPI["K8s API<br/>(Pod, Service, PVC)"]

CR -->|"Watch"| Controller
Controller -->|"생성/수정/삭제"| K8sAPI
K8sAPI -->|"현재 상태"| Controller

Reconciliation Loop:

  1. Custom Resource 변경 감지
  2. 현재 상태와 원하는 상태 비교
  3. 차이가 있으면 K8s 리소스를 조정 (Pod 추가, Service 업데이트 등)
  4. 반복

2.2 왜 Operator인가

DB 클러스터를 K8s에서 운영한다면:

  • 초기 배포: Primary + Replica 구성
  • 장애 복구: Primary 다운 → Replica 승격 → 새 Replica 추가
  • 백업: 주기적 백업 실행
  • 업그레이드: 롤링 업그레이드 (순서 중요)

운영 지식을 코드로 만든 것이 Operator.


3. 대표 Operator

Operator관리 대상역할
Prometheus OperatorPrometheus, Alertmanager모니터링 스택 자동 설정
Cert-ManagerTLS 인증서Let's Encrypt 인증서 자동 발급/갱신
PostgreSQL Operator (Zalando/Crunchy)PostgreSQL클러스터 배포, 복제, 백업, 페일오버
Rook-CephCeph 스토리지Ceph를 K8s 네이티브로 관리
StrimziApache KafkaKafka 클러스터 관리
MySQL Operator (Oracle)MySQLInnoDB Cluster 관리
# Operator Hub에서 검색
# https://operatorhub.io/

4. Operator 개발

도구방식언어
Operator SDKGo, Ansible, Helm 기반Go (권장), Ansible, Helm
KubebuilderGo 기반 프레임워크Go
KOPFPython Kubernetes Operator FrameworkPython
Metacontroller선언적 컨트롤러Webhook (언어 무관)

Operator 성숙도 모델

Level이름능력
1Basic InstallHelm/Kustomize로 배포
2Seamless Upgrades롤링 업그레이드 자동화
3Full Lifecycle백업/복원, 장애 복구 자동화
4Deep Insights메트릭, 알림, 분석
5Auto Pilot자동 스케일링, 자동 튜닝, 이상 탐지

다음 글

→ #15 보안 심화 — OPA, Falco, Supply Chain