Rook Custom Resource 이해
1️⃣2️⃣ 고급 운영: Rook Custom Resource 이해
Rook-Ceph는 Kubernetes 네이티브 방식으로 Ceph 스토리지를 관리하기 위해 다양한 **Custom Resource Definition(CRD)**를 제공합니다.
이 CRD를 잘 활용하면 풀 관리, 파일시스템 구성, 오브젝트 스토어 생성 및 사용자 관리까지 모두 YAML로 선언적 운영이 가능합니다.
1. CephCluster, CephBlockPool, CephFilesystem, CephObjectStore CRD
📦 1.1 CephCluster
: Ceph 전체 클러스터 정의
apiVersion: ceph.rook.io/v1
kind: CephCluster
metadata:
name: rook-ceph
spec:
cephVersion:
image: quay.io/ceph/ceph:v17.2.6
dataDirHostPath: /var/lib/rook
mon:
count: 3
storage:
useAllNodes: true
useAllDevices: true
- Ceph MON, MGR, OSD 등 모든 구성 요소 포함
- 운영의 시작점
🧱 1.2 CephBlockPool
: RBD 이미지가 저장될 Pool 정의
apiVersion: ceph.rook.io/v1
kind: CephBlockPool
metadata:
name: replica3-pool
spec:
failureDomain: host
replicated:
size: 3
- RBD 기반 PVC에 실제로 사용될 저장소 풀
StorageClass
와 연동 가능
📁 1.3 CephFilesystem
: CephFS 생성용 리소스
apiVersion: ceph.rook.io/v1
kind: CephFilesystem
metadata:
name: myfs
spec:
metadataPool:
replicated:
size: 3
dataPools:
- replicated:
size: 3
metadataServer:
activeCount: 1
- POSIX 파일시스템 제공
- CephFS는 MDS(Metadata Server)를 포함
🌐 1.4 CephObjectStore
: S3 호환 오브젝트 스토어 생성
apiVersion: ceph.rook.io/v1
kind: CephObjectStore
metadata:
name: my-store
spec:
gateway:
type: s3
port: 80
securePort: 443
instances: 1
- S3 호환 API 제공 (
RGW
) CephObjectStoreUser
와 함께 사용
2. CephObjectStoreUser, CephFilesystemSubVolumeGroup 등 활용
👤 2.1 CephObjectStoreUser
: RGW 사용자 정의
apiVersion: ceph.rook.io/v1
kind: CephObjectStoreUser
metadata:
name: s3-user
spec:
store: my-store
displayName: "Developer"
# Access Key 확인
kubectl get cephobjectstoreuser s3-user -n rook-ceph -o yaml
- 자동으로 Access Key / Secret 생성
- S3 미니오/Harbor 연동 시 사용
🧩 2.2 CephFilesystemSubVolumeGroup
: CephFS 내 하위 볼륨 그룹
apiVersion: ceph.rook.io/v1
kind: CephFilesystemSubVolumeGroup
metadata:
name: dev-team
spec:
filesystemName: myfs
- CephFS의 Namespace 분리 전략에 사용
- 여러 팀 간 디렉토리/권한 분리 가능
3. Rook-Ceph의 CRD 활용 자동화 전략
🧰 GitOps 전략 + CRD 조합
Git에 Ceph CRD를 선언해두고 ArgoCD 또는 Flux를 통해 배포/복원 자동화
# argo-cd-app.yaml
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: rook-ceph-cluster
spec:
source:
repoURL: https://git.company.com/storage/rook-ceph-gitops
path: clusters/prod
destination:
namespace: rook-ceph
server: https://kubernetes.default.svc
syncPolicy:
automated: {}
- 클러스터 재생성 시 CephCluster ~ StorageClass까지 한번에 복구 가능
📌 실무 예시 아키텍처
graph LR A[CephCluster] B[CephBlockPool] --> C[StorageClass] --> D[PVC] E[CephFilesystem] --> F[CephFilesystemSubVolumeGroup] --> G[CephFS Mount] H[CephObjectStore] --> I[CephObjectStoreUser] --> J[S3 Client] A --> B A --> E A --> H
- 모든 구성은 선언형 YAML로 재현 가능
- 운영 자동화와 백업/복구에 강력한 힘 발휘
🔎 실전 운영 팁
CRD | 역할 | 실전 팁 |
---|---|---|
CephCluster |
전체 클러스터 제어 | OSD 수명주기 자동 반영 |
CephBlockPool |
RBD용 Pool 정의 | 풀별 Replica 설정 필수 |
CephFilesystem |
CephFS 생성 | 여러 팀에 SubVolumeGroup으로 분리 |
CephObjectStore |
S3 API 제공 | MinIO, Harbor, Velero 등과 연동 |
CephObjectStoreUser |
사용자 계정 관리 | YAML로 키 생성 및 ACL 통합 관리 |
CephFilesystemSubVolumeGroup |
CephFS 서브 디렉토리 그룹 | POSIX 권한 및 할당량 설정 가능 |
CRD를 모두 GitOps 구조로 관리하면, Rook-Ceph 클러스터 운영은 인프라 as Code의 완성 단계로 진입합니다.
마지막 수정일자