본문 바로가기
Kubernetes/Ceph

Ceph

by lumination 2026. 6. 15.

Ceph란?

SAN(Block:RDB) + NAS(File:CephFS) + Object Storage(S3:RGW)를 하나의 클러스터에서 제공하는 것이 Ceph의 핵심 가치

RGW = RADOS Gateway

- RADOS를 이해하면 Ceph 구조가 한 번에 정리된다.

- RADOS = Reliable Autonomic Distributed Object Store

- 쉽게 말하면 핵심 저장 엔진

 

Ceph 아키텍쳐

Ceph 계층으로 표현

           RBD (/dev/rbd0)
                ↑
           CephFS (/data)
                ↑
          RGW (S3 API)
                ↑
---------------------------------
              RADOS
---------------------------------
                ↑
           OSD + CRUSH
                ↑
         HDD / SSD / NVMe

RBD, CephFS, RGW는 전부 RADOS 위에 만들어진 서비스다.

 

Ceph 내부의 진짜 저장 단위는 전부 Object다.

RBD, CephFS, RGW가 겉으로는 다르게 보이지만, 결국 OSD에 저장될 때는 모두 RADOS Object로 쪼개진다.

                사용자 관점
------------------------------------------------
RBD      = Block Device (/dev/rbd0)
CephFS   = File System (/data/a.txt)
RGW      = S3 Object (bucket/file.jpg)
                ↓ 변환
                Ceph 내부
------------------------------------------------
RADOS Object
RADOS Object
RADOS Object
...
                ↓
               OSD

Ceph 클러스터 구조도

            Ceph Cluster
      ┌───────────────────┐
      │      MON          │
      │      MGR          │
      │      OSD          │
      └───────────────────┘
          ↑      ↑      ↑
      RBD    CephFS    RGW
    (Block)  (File)  (Object)

      SAN      NAS      S3

 

스토리지 서비스

CephFS (파일 스토리지)

  • NFS 같은 공유 파일시스템
  • Pod A -> RWX -> CephFS 
    Pod B -> RWX  /
  • ex) Jenkins 공유 workspace, AI 모델 공유, 웹서버 정적 파일 공유, 여러 Pod가 같은 파일 접근

RBD (블록 RADOS Block Device)

  • Kubernetes PVC, VM 디스크
  • PVC -> RBD Image -> OS 입장에서는 디스크
  • ex) MySQL, PostgreSQL, ElasticSearch, VM Disk

RGW (오브젝트 RADOS Gateway)

  • S3 호환 Object Storage (로그, 백업, 이미지 등)
  • S3 API -> RGW -> Ceph Object
  • ex) 로그 저장, 백업, 이미지 저장, AI 데이터셋

NFS Gateway

  • Ceph 고유 스토리지는 아니고 CephFS -> NFS-Ganesha -> NFS Export 형태로 외부 서버에 NFS 제공 가능
  • 레거시 서버, Windows/Linux 파일 공유

iSCSI Gateway

  • Ceph RDB -> iSCSI Gateway -> 외부 서버
  • VMware나 물리 서버가 iSCSI LUN처럼 사용

쿠버네티스 기준

쿠버네티스 기준으로 많이 사용되는 형태는 아래와 같다.

형태 Ceph 기능 K8s AccessMode
Block RBD RWO
File CephFS RWX
Object RGW PVC 없음(S3 API)

 

 

RGW(RADOS Gateway) 로그 저장이 필요한 경우에는 애플리케이션 Pod에 Fluent Bit, Fluentd, Vector 등의 로그 수집기를 사이드카 또는 DaemonSet 형태로 구성하고, 애플리케이션이 생성한 로그 파일(또는 stdout 로그)을 수집하여 S3 API를 통해 RGW 버킷으로 전송하는 방식을 사용한다.

더보기

예를 들어 애플리케이션이 /var/log/app/app.log 에 로그를 남기고, Fluent Bit이 이를 수집해서 Ceph RGW(S3)로 업로드하는 구조다.

+------------------------+
| Application Container  |
|                        |
| /var/log/app/app.log   |
+-----------+------------+
            |
            | shared volume
            v
+------------------------+
| Fluent Bit Sidecar     |
| tail app.log           |
| buffer                 |
| S3 PutObject           |
+-----------+------------+
            |
            v
+------------------------+
| Ceph RGW (S3 API)      |
| s3://logs-bucket       |
+------------------------+

예시 1. Sidecar 방식

apiVersion: v1
kind: Pod
metadata:
  name: myapp
spec:
  volumes:
  - name: applogs
    emptyDir: {}

  containers:
  - name: app
    image: myapp:latest
    volumeMounts:
    - name: applogs
      mountPath: /var/log/app

  - name: fluent-bit
    image: fluent/fluent-bit:latest
    volumeMounts:
    - name: applogs
      mountPath: /var/log/app
 

앱은:

 
echo "user login" >> /var/log/app/app.log
 

Fluent Bit은:

 
[INPUT]
    Name tail
    Path /var/log/app/*.log

[OUTPUT]
    Name s3
    bucket logs-bucket
    region us-east-1
    endpoint http://rgw.ceph.local:80
    use_put_object On
 

결과:

s3://logs-bucket/
 ├── app-20260616-1000.log
 ├── app-20260616-1100.log
 └── app-20260616-1200.log

예시 2. DaemonSet 방식 (실무에서 더 흔함)

애플리케이션은 그냥 stdout으로 출력:

 
print("user login")
 

쿠버네티스는 이를 노드에 저장:

/var/log/pods/...
/var/log/containers/myapp-xxx.log
 

Fluent Bit DaemonSet이 모든 노드에서 수집:

Node1
 ├─ Pod A
 ├─ Pod B
 └─ Fluent Bit

Node2
 ├─ Pod C
 ├─ Pod D
 └─ Fluent Bit
 

Fluent Bit 설정:

 
[INPUT]
    Name tail
    Path /var/log/containers/*.log

[OUTPUT]
    Name s3
    bucket logs-bucket
    endpoint http://rgw.ceph.local
 

로그 흐름:

stdout
  ↓
/var/log/containers/*.log
  ↓
Fluent Bit DaemonSet
  ↓
Ceph RGW(S3)
  ↓
logs-bucket

그래서 Ceph 입장에서 보면

  • RBD → PVC 제공 (DB, VM 디스크)
  • CephFS → 공유 파일시스템 제공
  • RGW → S3 API 제공 (로그, 백업, 이미지, AI 데이터셋)

이고,

"애플리케이션 로그를 RGW에 저장한다"는 것은

Pod
 → Fluent Bit
 → S3 API
 → RGW
 → Ceph Object Storage
 

이지,

Pod
 → PVC
 → RGW
 

처럼 RGW를 직접 마운트해서 쓰는 구조는 아니다.
그래서 앞서 말한 것처럼 RGW는 ceph-csi의 대상이 아니다.

 

쿠버네티스 사용

Ceph 스토리지를 Kubernetes에 제공하기 위한 사전 준비 작업

Ceph에서의 작업

1. CSI가 사용할 RBD Pool 생성
2. Pool을 RBD 용도로 설정
3. Namespace 생성
4. CSI용 CephX 계정 생성
5. 계정의 인증키(Key) 발급
을 수행하는 Ceph 측 사전 준비 작업이다.

작업수행 위치
ceph osd pool create Ceph
ceph auth get-or-create Ceph
rbd namespace create Ceph
ceph fsid 조회 Ceph
CSI Driver 설치 Kubernetes
Secret 생성 Kubernetes
StorageClass 생성 Kubernetes
PVC 생성 Kubernetes

 

Kubernetes가

FSID
MON 주소
client.porthos-csi-rbd-controller Key
client.porthos-csi-rbd-node Key
 

를 받아 Secret과 StorageClass를 만들고 PVC를 사용할 수 있게 된다.