Kubernetes는 기본적으로 Pod, Service, Deployment, StatefulSet 등 다양한 Resource를 제공합니다.
하지만 실제 운영 환경에서는 기본 Kubernetes Resource만으로 모든 요구사항을 해결하기 어려운 경우가 있습니다.
예를 들어 Database Operator, Monitoring System, Backup Automation, Cloud Resource 관리처럼 Kubernetes 내부에서 새로운 형태의 Resource가 필요할 수 있습니다.
Kubernetes에서는 이러한 요구사항을 해결하기 위해 Custom Resource Definition(CRD)을 제공합니다.
CRD는 Kubernetes API를 확장하여 사용자가 직접 새로운 Resource Type을 정의하고 Kubernetes 방식으로 관리할 수 있도록 하는 기능입니다.
| 구성 요소 | 역할 |
|---|---|
| CRD | 새로운 Resource Type 정의 |
| Custom Resource | 실제 생성된 객체 |
| Controller | 상태 관리 및 자동화 |
| API Server | Resource 관리 |
CRD 구조를 이해하면 Kubernetes가 단순한 Container 관리 플랫폼을 넘어 확장 가능한 운영 플랫폼으로 발전하는 이유를 이해할 수 있습니다.
Kubernetes CRD란 무엇인가?
CRD(Custom Resource Definition)는 Kubernetes API에 새로운 Resource Type을 추가하는 기능입니다.
기본 Kubernetes Resource 외에 사용자가 원하는 형태의 Resource를 직접 만들 수 있습니다.
기본 Resource:
Pod
Service
Deployment
확장 Resource:
Database
BackupSchedule
ApplicationConfig
예:
기존 Kubernetes:
kubectl get pods
CRD 추가 후:
kubectl get databases
이처럼 Kubernetes API를 확장하여 새로운 관리 대상을 만들 수 있습니다.
Kubernetes CRD가 필요한 이유
Kubernetes는 다양한 환경에서 사용되며 Application 운영 방식도 매우 다양합니다.
기본 Resource만으로는 복잡한 운영 작업을 자동화하기 어렵습니다.
문제:
| 상황 | 문제 |
|---|---|
| Database 관리 | 수동 설정 필요 |
| Backup 운영 | 자동화 어려움 |
| Cloud Resource 관리 | 별도 도구 필요 |
| Application Lifecycle 관리 | 복잡성 증가 |
CRD를 사용하면 Kubernetes 내부 방식으로 이러한 작업을 관리할 수 있습니다.
Kubernetes CRD 동작 구조
CRD는 Kubernetes API Server에 새로운 API Resource를 추가합니다.
구조:
| 구성 요소 | 역할 |
|---|---|
| CRD | Resource 정의 |
| Custom Resource | 실제 객체 생성 |
| Controller | 상태 조정 |
| API Server | 요청 처리 |
동작 과정:
| 단계 | 내용 |
|---|---|
| 1단계 | CRD 생성 |
| 2단계 | API Server 확장 |
| 3단계 | Custom Resource 생성 |
| 4단계 | Controller 감지 |
| 5단계 | 원하는 상태 유지 |
Controller가 실제 자동화 작업을 수행합니다.
Kubernetes Custom Resource란?
Custom Resource(CR)는 CRD를 기반으로 실제 생성되는 객체입니다.
CRD가 설계도라면 Custom Resource는 실제 생성된 Resource입니다.
예:
CRD:
Database라는 Resource 생성
Custom Resource:
my-database
결과:
kubectl get database
명령으로 확인할 수 있습니다.
Kubernetes CRD와 Controller 관계
CRD만 생성하면 새로운 Resource를 만들 수 있지만 자동 동작은 하지 않습니다.
실제 관리 기능은 Controller가 담당합니다.
구조:
Custom Resource 생성
↓
Controller 감지
↓
상태 확인
↓
필요한 작업 수행
↓
Desired State 유지
이 구조가 Kubernetes Operator 패턴의 기본 원리입니다.
Kubernetes Operator란 무엇인가?
Operator는 CRD와 Controller를 결합하여 Application 운영을 자동화하는 패턴입니다.
사람이 직접 수행하던 운영 작업을 Kubernetes Controller가 대신 수행하도록 만드는 방식입니다.
예:
Database Operator:
Database 생성 요청
↓
Operator 확인
↓
Pod 생성
↓
Storage 연결
↓
Backup 설정
↓
상태 관리
복잡한 Application 운영을 자동화할 수 있습니다.
Kubernetes CRD와 Operator 차이
CRD와 Operator는 비슷하게 사용되지만 역할이 다릅니다.
| 구분 | CRD | Operator |
|---|---|---|
| 역할 | Resource 정의 | 자동 운영 |
| 구성 | API 확장 | CRD + Controller |
| 자동화 | 없음 | 가능 |
| 예시 | Database Resource 정의 | Database 설치 및 관리 |
CRD는 기능 확장이고 Operator는 운영 자동화입니다.
Kubernetes CRD 구조
CRD는 YAML 형식으로 정의됩니다.
주요 구성:
| 항목 | 설명 |
|---|---|
| Group | API 그룹 이름 |
| Version | API 버전 |
| Kind | Resource 이름 |
| Schema | 데이터 구조 정의 |
| Scope | Namespace 범위 |
이 정보를 기반으로 Kubernetes API가 새로운 Resource를 제공합니다.
Kubernetes CRD Schema 관리
CRD는 OpenAPI Schema를 사용하여 데이터 구조를 정의합니다.
이를 통해 잘못된 설정값을 방지할 수 있습니다.
관리 가능:
| 항목 | 설명 |
|---|---|
| Type | 데이터 타입 |
| Required | 필수 값 |
| Validation | 값 검증 |
| Default | 기본 값 설정 |
Production 환경에서는 정확한 Schema 설계가 중요합니다.
Kubernetes CRD 활용 사례
CRD는 다양한 Cloud Native 환경에서 활용됩니다.
| 활용 사례 | 설명 |
|---|---|
| Database Operator | Database 자동 관리 |
| Prometheus Operator | Monitoring 관리 |
| Certificate Manager | SSL 인증서 관리 |
| Backup Operator | 백업 자동화 |
| Cloud Controller | Cloud Resource 관리 |
많은 Kubernetes 생태계 도구가 CRD 기반으로 동작합니다.
Kubernetes CRD와 kubectl 사용
CRD가 등록되면 기존 Kubernetes 명령어를 그대로 사용할 수 있습니다.
예:
Resource 조회:
kubectl get custom-resource
생성:
kubectl apply -f resource.yaml
삭제:
kubectl delete custom-resource
Kubernetes API와 동일한 방식으로 관리됩니다.
Kubernetes CRD Version 관리
CRD는 Version 관리가 가능합니다.
예:
v1alpha1
↓
v1beta1
↓
v1
Version 변경을 통해 새로운 기능 추가와 안정화를 진행합니다.
운영 환경에서는 API 호환성을 고려해야 합니다.
Kubernetes CRD 운영 시 고려사항
CRD는 Kubernetes 기능을 확장하지만 관리 복잡성도 증가합니다.
| 항목 | 설명 |
|---|---|
| Version 관리 | 호환성 유지 |
| Schema 관리 | 데이터 검증 |
| Backup | Custom Resource 보호 |
| Controller 운영 | 장애 대응 |
잘 설계된 CRD는 Kubernetes 운영 자동화 수준을 높여줍니다.
Kubernetes CRD 장점
| 장점 | 설명 |
|---|---|
| 확장성 | 새로운 Resource 추가 |
| 자동화 | Operator 기반 운영 |
| 통합 관리 | kubectl 사용 가능 |
| Cloud Native | Kubernetes 방식 유지 |
CRD는 Kubernetes를 단순 Container 관리 도구에서 확장 가능한 플랫폼으로 만들어주는 핵심 기능입니다.
자주 묻는 질문
CRD와 Custom Resource 차이는 무엇인가요?
CRD는 새로운 Resource 종류를 정의하는 기능이고 Custom Resource는 CRD를 통해 실제 생성된 객체입니다.
CRD만 만들면 Application이 자동 관리되나요?
아닙니다.
자동 관리 기능은 Controller 또는 Operator가 추가로 필요합니다.
Operator는 왜 필요한가요?
Database 같은 복잡한 Application의 설치, 설정, 백업, 복구 과정을 자동화하기 위해 사용합니다.
마무리
Kubernetes CRD(Custom Resource Definition)는 Kubernetes API를 확장하여 새로운 Resource를 만들 수 있게 해주는 핵심 기능입니다.
| 구성 요소 | 역할 |
|---|---|
| CRD | 새로운 Resource 정의 |
| Custom Resource | 실제 객체 |
| Controller | 상태 관리 |
| Operator | 운영 자동화 |
CRD와 Operator 구조를 이해하면 Kubernetes가 다양한 Application을 자동으로 관리하는 Cloud Native 플랫폼으로 확장되는 원리를 이해할 수 있습니다.
다음 글에서는 Kubernetes 저장소 관리 구조를 위한 Kubernetes Persistent Volume(PV) 완벽 가이드! Storage와 데이터 관리 구조 이해하기를 알아보겠습니다.