
| 개념 | 설명 |
|---|---|
| Resource | Kubernetes가 관리하는 객체(Pod, Deployment 등) |
| Controller | Resource의 상태를 감시하고, 실제 클러스터 상태를 정의된 스펙대로 유지 |
| Custom Resource (CR) | 사용자가 직접 정의하는 새로운 리소스 타입 |
| Custom Resource Definition (CRD) | Kubernetes에 새로운 리소스를 인식시키는 API 확장 정의 |
| Custom Controller | Custom Resource를 감지하고 원하는 작업을 수행하는 코드(주로 Go로 작성) |
apiVersion: flights.com/v1
kind: FlightTicket
metadata:
name: my-flight-ticket
spec:
from: "Mumbai"
to: "London"
number: 2
⚠️ 아직 이 상태에선 Kubernetes는
FlightTicket이라는 리소스가 무엇인지 모름.
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
name: flighttickets.flights.com
spec:
group: flights.com
names:
kind: FlightTicket
plural: flighttickets
singular: flightticket
shortNames:
- ft
scope: Namespaced
versions:
- name: v1
served: true
storage: true
schema:
openAPIV3Schema:
type: object
properties:
spec:
type: object
properties:
from:
type: string
to:
type: string
number:
type: integer
minimum: 1
maximum: 5
이제 kubectl get flighttickets 같은 명령으로 리소스를 다룰 수 있음.
| 리소스 변경 | 컨트롤러 동작 |
|---|---|
FlightTicket 생성 | book-flight.com/api에 API 호출 |
FlightTicket 삭제 | API로 예약 취소 요청 |
컨트롤러는 Go 언어로 client-go, controller-runtime 같은 SDK를 통해 작성 가능.
| 사용 예 | 설명 |
|---|---|
| Cert Manager | CRD를 통해 Certificate 리소스를 정의하고, 생성 시 Let's Encrypt 등으로 인증서 발급 |
| Prometheus Operator | ServiceMonitor, PrometheusRule 같은 CR 생성 → 자동 모니터링 설정 |
| ArgoCD | Application CR 생성 → GitOps 방식으로 앱 자동 배포 |
[User] → kubectl apply -f flightticket.yaml
↓
[API Server] → 저장 → [ETCD]
↓
[FlightTicket Controller]
└─> 감지 후 외부 API 호출