Custom Controller

Yu Sang Min·2025년 6월 21일

CKA

목록 보기
64/110
post-thumbnail

🛠️ Custom Controller 개발 개요


📌 1. 왜 Custom Controller가 필요한가?

  • CRD를 만들면 kubectl get, kubectl create 등으로 Custom Resource 객체는 다룰 수 있음
  • 하지만 이 객체를 실제 동작으로 연결하려면 로직이 필요함
  • 이 동작(예: 외부 API 호출, 리소스 생성 등)을 담당하는 것이 Custom Controller

🧠 2. Controller의 작동 방식

구성 요소설명
Looping Process지속적으로 Kubernetes API 서버의 변경사항을 감시
Event 감지리소스 생성/수정/삭제 이벤트를 수신
동작 실행비즈니스 로직 실행 (API 호출, 상태 변경 등)

FlightTicket 생성 시 → controller가 API 호출로 항공권 예약 진행


🧪 3. 컨트롤러 개발 프로세스

✅ 단계별 요약

단계설명
1. Go 설치공식 사이트 또는 패키지 매니저로 설치
2. 샘플 Repo 클론https://github.com/kubernetes/sample-controller
3. 코드 수정controller.go에 비즈니스 로직 삽입 (예: API 호출 코드)
4. 빌드go build로 바이너리 생성
5. 실행./controller --kubeconfig=config.yaml
6. 배포Docker 이미지로 패키징 → Deployment로 클러스터 내에서 실행

📦 예시 디렉터리 구조 (sample-controller)

sample-controller/
├── cmd/
│   └── main.go
├── controller.go     ← 여기에 비즈니스 로직 추가
├── client/           ← CRD 관련 코드
├── pkg/
└── build/            ← Dockerfile

⚙️ 4. 실전 환경 배포 전략

  • 로컬 개발 → controller.go 실행

  • 실제 운영 시에는:

    • 컨트롤러를 Docker로 패키징
    • Kubernetes에 Deployment 리소스로 실행
    • ServiceAccount, RBAC 설정 필요
docker build -t my-flight-controller:latest .
kubectl create deployment flight-controller --image=my-flight-controller:latest

💡 참고: Python으로도 가능한가?

  • technically yes, 하지만 성능, 큐/캐시 관리, 리소스 감시가 번거로움
  • Go는 client-go, controller-runtime, kubebuilder 등 강력한 지원이 있음
  • Operator SDK도 Go 기반

🔚 결론

  • CRD는 schema 정의와 저장까지, 실제 동작은 Controller에서 수행
  • Kubernetes 확장 구조의 핵심 패턴:
    🔁 Custom Resource + Controller → Operator

🔁 Operator

✅ "Custom Controller"는 결국 "Operator"의 핵심 구성 요소 중 하나야.

자동화된 운영 도구인 Operator


📘 추가 링크

Operator 는 CRD, 컨트롤러, 고급 API 커스텀 설계가 하나로 통합되는 구조

profile
React, Node.js, AWS, Git, Github, Github Action, Docker, K8S

0개의 댓글