문서 목차
스토리지 설치 (Ceph)
Ansible 플레이북으로 cephadm 기반 Ceph 클러스터를 설치합니다. RBD(블록)와 CephFS(파일) 스토리지, S3 호환 오브젝트 스토리지(RGW)를 함께 구성합니다.
QUANTUM C&S
Ansible 플레이북으로 cephadm 기반 Ceph 클러스터를 설치합니다. RBD(블록)와 CephFS(파일) 스토리지, S3 호환 오브젝트 스토리지(RGW)를 함께 구성합니다.
ceph.yaml은 iaas.yaml에 포함되어 있는 단계입니다. iaas.yaml로 한 번에 설치한다면 이 문서의 수동 준비 작업(인벤토리 그룹, 디스크 볼륨)만 먼저 해두면 되고, 플레이북을 따로 실행할 필요는 없습니다. Ceph 단계만 따로 검증하거나 재실행하고 싶을 때 ceph.yaml을 직접 실행합니다.
설치 방식
분산 스토리지 클러스터는 Cephadm(기본) 또는 Rook(옵션) 두 가지 방식으로 구성할 수 있습니다. 이 문서는 실제 검증이 끝난 Cephadm 경로를 다룹니다. Rook은 Ceph 데몬을 Kubernetes Pod로 직접 띄우는 별도 방식(Operator + CRD 패턴)으로 코드는 존재하지만 아직 검증 전이라, 검증 완료 후 이 문서에 별도 섹션으로 추가될 예정입니다.
사전 준비 확인
노드가 Kubernetes 설치 단계까지 끝나 있어야 합니다.
cd /home/ubuntu/k8s
ansible -i inventory/qks/hosts.ubuntu kube-cluster -m ping
1. OSD용 디스크 볼륨 준비
Ceph는 OSD(실제 데이터 저장) 역할을 맡을 노드마다 초기화되지 않은 raw 디스크가 최소 1개씩 필요합니다.
- OpenStack이라면 Horizon(또는 CLI)에서 볼륨을 만들어 해당 노드에 연결합니다.
- 베어메탈이라면 물리 디스크를 그대로 사용합니다.
ceph-volume이 raw 상태에서 직접 초기화합니다. 이미 포맷했다면 wipefs -a <장치명>으로 시그니처를 지운 뒤 사용합니다.
볼륨을 연결한 뒤, 각 노드에 SSH로 접속해 실제 장치명을 확인합니다.
lsblk
부팅 디스크(/dev/vda 등) 외에 새로 보이는 디스크 이름을 기록해 둡니다. 이 이름을 3단계에서 씁니다.
2. 인벤토리에 Ceph 역할 배정
inventory/qks/hosts.ubuntu를 열어, Ceph 데몬별 그룹에 노드를 배정합니다. 이 그룹들은 Terraform이 자동으로 채우지 않으므로 직접 편집해야 합니다.
vi inventory/qks/hosts.ubuntu
ceph/ceph orch 명령을 처리하는 관리 노드입니다.같은 노드가 여러 역할을 겸해도 됩니다 — 오히려 표준적인 구성입니다. 워커가 3대라면 아래처럼 채우면 모든 최소 요건을 충족합니다.
[qks-ceph-admin]
k8s-ubuntu24-w01
[qks-ceph-mon]
k8s-ubuntu24-w01
k8s-ubuntu24-w02
k8s-ubuntu24-w03
[qks-ceph-osd]
k8s-ubuntu24-w01
k8s-ubuntu24-w02
k8s-ubuntu24-w03
[qks-ceph-mgr]
k8s-ubuntu24-w01
k8s-ubuntu24-w02
k8s-ubuntu24-w03
[qks-ceph-mds]
k8s-ubuntu24-w01
k8s-ubuntu24-w02
k8s-ubuntu24-w03
[qks-ceph-rgw]
k8s-ubuntu24-w01
k8s-ubuntu24-w02
k8s-ubuntu24-w03
[qks-ceph-monitoring]
k8s-ubuntu24-w01
terraform apply) 초기화됩니다. 인프라를 다시 프로비저닝할 계획이 있다면, 그 전에 이 설정을 별도로 백업해 두거나 재적용해야 합니다.
3. 설정값 확인
저장소 루트의 site 변수 파일(예: ubuntu.yaml)에서 Ceph 관련 값을 확인합니다.
qks_cephadm_enabled: true
qks_external_ceph_enabled: false
inventory/qks/group_vars/all/all-ceph.yaml에서 클러스터 공통 값을 확인합니다.
download.ceph.com)는 각 릴리즈 라인의 최신 패치 하나만 제공하므로, 이미 지난 패치 버전을 지정하면 설치가 실패합니다. 설치 전 대상 OS에서 apt-cache madison ceph-common(Ubuntu) 등으로 실제 존재하는 버전을 확인하고 맞춰줍니다.["/dev/vdb"]). 1단계에서 lsblk로 확인한 실제 장치명과 일치해야 합니다.ceph_ip / private_ip 대역과 일치해야 합니다.all-ceph.yaml의 기본값은 그대로 두고 site 변수 파일(ubuntu.yaml)에 같은 변수를 다시 적어 오버라이드합니다. 이렇게 하면 나중에 다른 사이트를 위해 공통 기본값을 최신으로 올려도 이미 배포된 이 사이트는 영향을 받지 않습니다.
4. 커널 버전 확인 — 7.0 이상 필수 (Ceph 20.2.4 이상)
qks_cephadm_ceph_version: 20.2.4 이상, CVE-2025-30156 대응)는 새 인증키 방식(AES256K)을 기본으로 사용합니다. 이 키를 커널이 이해하려면 Linux 커널 7.0 이상이 필요하며, 이보다 낮은 커널에서는 이 키를 쓰는 클라이언트(뒤에서 설치할 CSI 드라이버 포함)가 볼륨을 마운트하는 시점에 adding ceph secret key to kernel failed 에러로 실패합니다.
우분투 24.04 기본 커널은 6.8이므로, Ceph 클러스터에 접속할 모든 노드(마스터+워커 전체)에서 HWE 패키지로 커널을 올립니다.
sudo apt update
sudo apt install linux-generic-hwe-24.04
sudo reboot
재부팅 후 확인:
uname -r # 7.x.x-...-generic 이면 정상
여러 노드를 한 번에 재부팅하면 컨트롤플레인(etcd)이나 Ceph 쿼럼이 일시적으로 끊길 수 있으므로, 반드시 한 노드씩 순서대로 진행하고 다음 노드로 넘어가기 전에 kubectl get nodes와 ceph -s로 정상 복귀를 확인합니다.
qks_cephadm_ceph_version을 20.2.4 미만으로 낮춰서 이 문제를 피하는 방법도 있지만, CVE-2025-30156(CVSS 8.9, 인증 우회)에 취약한 버전으로 되돌아가는 것이라 권장하지 않습니다.
5. 플레이북 실행
./install.sh ubuntu ceph.yaml
설치 흐름
./install.sh ubuntu ceph.yaml
= ansible-playbook -i inventory/qks/hosts.ubuntu ceph.yaml -e @ubuntu.yaml
1. OS 기본 설정 (qks-bootstrap, hosts: qks-server)
2. Ceph 패키지 저장소 등록 + 설치 (qks-ceph-adm, OS별 apt/yum 저장소)
3. cephadm bootstrap (admin 노드에 최초 mon+mgr 생성)
4. admin → 나머지 노드 SSH 키 배포
5. Mon 노드 등록 + 서비스 적용 → 쿼럼 대기
6. OSD 노드 등록 + 서비스 적용 → 최소 개수 대기
7. MDS / RGW / MGR / Monitoring 노드 등록 + 서비스 적용
8. RBD 풀, CephFS 볼륨, S3 유저/버킷 생성
각 단계는 이전 단계의 결과를 이어받습니다. cephadm bootstrap이 admin 노드에 생성한 관리자 키 · 설정을
이후 모든 ceph orch 명령이 사용하고, mon 쿼럼이 형성된 뒤에야 OSD/MDS/RGW 등록이 진행됩니다. 이미
완료된 단계는 재실행 시 자동으로 건너뜁니다.
설치 내용
노드 46대 기준 약 2040분 소요됩니다. 패키지 · 컨테이너 이미지를 처음 받는 구간이라 네트워크 속도에 따라 더 걸릴 수 있습니다.
설치 확인
admin 노드([qks-ceph-admin]에 지정한 노드)에서 클러스터 상태를 확인합니다.
ssh <admin 노드>
sudo ceph -s
sudo 없이 실행하면 RADOS permission denied가 발생합니다. 관리자 키링(/etc/ceph/ceph.client.admin.keyring)이 root 전용 권한이라 정상적인 동작이니 항상 sudo를 붙여 실행합니다.
cluster:
id: ...
health: HEALTH_OK
services:
mon: 3 daemons, quorum ...
mgr: ... active
mds: ...
osd: 3 osds: 3 up, 3 in
rgw: 3 daemons active
health: HEALTH_OK이고 osd가 지정한 대수만큼 up/in이면 정상입니다.
sudo radosgw-admin bucket list로 qks, harbor, nexus-*, milvus 버킷이 생성됐는지 확인합니다.ceph mgr services로 나온 dashboard 주소로 접속해 확인할 수 있습니다.ceph 명령을 쓰고 싶다면, admin 노드에서
ceph orch host add <대상노드> <ceph_ip> 후 ceph orch host label add <대상노드> _admin을
실행합니다. 데몬을 추가로 띄우지 않고도 /etc/ceph/ceph.conf와 관리자 키링이 자동으로 동기화됩니다.
다음 단계
Ceph 클러스터 자체는 완성됐지만, Kubernetes 파드가 PVC로 사용하려면 CSI 드라이버 설치가 별도로 필요합니다.
kubectl get pods -A에 Ceph 관련 파드가 하나도 보이지 않습니다. cephadm은 Ceph 데몬을 쿠버네티스 바깥, 호스트 OS 위에서 직접 실행하기 때문입니다(Kubernetes 파드로 배포되는 Rook Ceph 방식과는 다릅니다). CSI를 설치해야 비로소 kubectl get storageclass에 항목이 나타납니다.