Rook Ceph
- Rook-Ceph는 Kubernetes 환경에서 Ceph 클러스터를 쉽게 관리하고 배포할 수 있는 오픈소스 스토리지 오케스트레이션 솔루션입니다.
- Rook는 Ceph 클러스터의 설치, 구성, 관리를 자동화하여 Kubernetes 네이티브 스토리지 솔루션을 제공합니다. 이를 통해 복잡한 스토리지 설정이 Kubernetes 관리 방식을 통해 간소화되고, 확장 가능한 분산 스토리지를 쉽게 사용할 수 있습니다.
Rook Ceph 개념
Ceph는 객체, 블록, 파일 스토리지 등 다양한 유형의 스토리지 서비스를 제공하는 분산 스토리지 시스템입니다. 이를 Kubernetes 환경에서 쉽게 통합하는 Rook-Ceph는 다양한 컴포넌트로 구성되어 있으며, 각각의 역할을 통해 Ceph 클러스터의 전체적인 운영과 관리를 돕습니다.
Rook Ceph 구성 요소
- Rook Operator
- Rook-Ceph의 핵심 구성 요소로, Ceph 클러스터의 생성 및 관리를 담당합니다.
- Kubernetes Operator 패턴을 사용하여 Ceph 클러스터의 설치, 확장, 업데이트, 복구를 자동으로 수행합니다.
- 사용자나 다른 Kubernetes 리소스의 요청을 받아 Ceph 구성 요소를 관리합니다.
- Ceph Monitors (MON)
- Ceph 클러스터의 핵심 구성 요소 중 하나로, 클러스터의 상태를 유지하고 관리합니다.
- 클러스터의 모든 노드에서 저장된 데이터를 추적하고 관리하여 Ceph 클러스터의 전체적인 상태를 모니터링합니다.
- 클러스터에서 장애가 발생하거나 노드가 추가될 때, 클러스터 지도를 업데이트하여 장애 복구 및 확장성을 유지합니다.
- Ceph Manager (MGR)
- Ceph 클러스터의 모니터링과 메트릭 수집, 클러스터 관리를 담당하는 구성 요소입니다.
- 다양한 클러스터 메트릭을 수집하고, 이를 기반으로 Rook Operator와 상호작용하여 클러스터를 최적화합니다.
- 대시보드 기능을 통해 Ceph 클러스터의 상태를 시각화하고, 알림 기능도 제공합니다.
- Ceph OSD (Object Storage Daemon)
- 실제 데이터를 저장하는 Ceph의 스토리지 노드로, 디스크에 데이터를 쓰고 읽는 작업을 수행합니다.
- 각 OSD는 하나의 디스크에 대한 스토리지 데몬이며, Ceph의 CRUSH 알고리즘에 따라 데이터를 분산하여 저장하고, 복제본을 관리합니다.
- OSD는 데이터 가용성을 보장하고 데이터 복구 작업을 수행하여 장애 시 데이터를 복구하는 역할을 합니다.
- Ceph Metadata Server (MDS)
- Ceph Filesystem (CephFS)을 사용할 때 필요한 구성 요소로, 파일 시스템의 메타데이터를 관리합니다.
- CephFS에서 파일과 디렉토리의 메타데이터를 관리하여, 파일 시스템과 관련된 작업을 처리하고 파일 시스템의 성능을 최적화합니다.
- MDS는 파일 시스템 요청에 대한 메타데이터를 캐싱하여 성능을 향상시킵니다.
- Ceph Rados Gateway (RGW)
- Ceph의 객체 스토리지 서비스를 제공하는 구성 요소로, S3 및 Swift API를 사용하여 객체 스토리지에 접근할 수 있게 합니다.
- 오브젝트 스토리지 용도로 설계되었으며, AWS S3와의 호환성을 제공하여 외부 애플리케이션이 Ceph에 쉽게 접근할 수 있도록 지원합니다.
Rook Ceph의 주요 기능
- 자동화된 클러스터 운영: Ceph의 복잡한 구성과 운영 작업을 자동화하여 Kubernetes 네이티브 환경에서 간편하게 Ceph를 운영할 수 있습니다.
- 확장성과 고가용성: OSD, MON, MGR 등의 구성 요소가 자동으로 확장 및 복구되어 데이터 가용성을 보장합니다.
- 다양한 스토리지 인터페이스: 블록 스토리지, 파일 스토리지, 객체 스토리지 모두를 지원하여 Kubernetes 클러스터 내에서 다양한 스토리지 요구사항을 충족할 수 있습니다.
Rook-Ceph 최소 사양
- Rook-Ceph를 Kubernetes 클러스터에 배포하기 위한 최소 사양은 다음과 같습니다.
- 이 사양은 테스트 또는 소규모 환경에 적합하며, 실제 프로덕션 환경에서는 높은 가용성과 성능을 보장하기 위해 더 큰 리소스가 필요할 수 있습니다.
Rook-Ceph 최소 사양
- 노드 수: 최소 3개의 노드
- Ceph는 분산 스토리지 시스템으로 고가용성을 위해 최소 3개의 노드를 권장합니다.
- 1개의 노드에서도 동작은 가능하나, 장애 시 데이터 유실 가능성이 높습니다.
- CPU:
- 각 노드당 최소 2개 이상의 CPU 코어 권장
- Ceph의 모니터, 매니저, OSD 등 여러 데몬이 실행되므로, 충분한 CPU 리소스가 필요합니다.
- 메모리:
- 각 노드당 최소 8GB RAM 권장
- 테스트 환경에서는 4GB까지도 가능하지만, 실질적인 사용을 위해 8GB 이상이 필요합니다.
- Ceph OSD와 같은 데이터 저장 및 관리 데몬이 높은 메모리 사용량을 요구하므로 노드의 RAM 용량은 더 많이 확보하는 것이 좋습니다.
- 디스크:
- 각 노드에 최소 1개의 디스크
- Ceph OSD용으로 최소 1개의 여분 디스크가 필요합니다.
- 클러스터 성능 및 용량 확장을 위해 더 많은 디스크 추가가 권장됩니다.
- Rook-Ceph는 스토리지 및 데이터 저장 용도로 사용 가능한 여분 디스크가 있어야 합니다. 기본적으로 이 디스크는 Kubernetes 노드의 루트 디스크와는 분리되어야 합니다.
- 네트워크:
- 고속 네트워크 인터페이스 (최소 1Gbps 이상)
- Ceph는 클러스터 간 많은 데이터 이동이 발생하므로, 안정적인 네트워크 대역폭이 필요합니다.
Kubernetes 클러스터 요구사항
- Kubernetes 버전: Kubernetes 1.21 이상
- kubectl 접근 권한: Rook-Ceph 배포 및 관리를 위해 클러스터 관리자 권한 필요
- StorageClass: Rook-Ceph는 Kubernetes에서 StorageClass를 사용하여 Persistent Volume을 제공합니다.
사양 요약 예시 (테스트 환경 기준)
항목 최소 요구 사양 (테스트 환경)
노드 수 | 3 노드 이상 |
CPU | 2 코어/노드 이상 |
메모리 | 8GB/노드 이상 |
디스크 | 1개 이상의 여분 디스크 |
네트워크 | 1Gbps 이상 네트워크 대역폭 |
Kubernetes 버전 | 1.21 이상 |
프로덕션 환경 고려 사항
프로덕션 환경에서는 노드 수와 리소스를 더욱 확장하여 가용성과 성능을 높이는 것이 좋습니다.
Rook Ceph Kubernets 배포
- Kubernetes 클러스터에 Rook-Ceph를 배포하는 방법은 다음과 같습니다. 이 단계들은 Rook의 기본 설치를 기반으로 하며, Ceph의 다양한 기능을 사용하는 환경에 따라 추가적인 설정이 필요할 수 있습니다.
1. 사전 준비 사항
- Kubernetes 클러스터 설정: Rook-Ceph를 배포할 Kubernetes 클러스터가 준비되어 있어야 합니다. 최소 3개 노드가 권장됩니다.
- kubectl 설정: 클러스터에 접근할 수 있는 kubectl이 설치되어 있어야 합니다.
- 여분의 디스크: Ceph의 데이터 저장을 위해 각 노드에 별도의 디스크가 필요합니다.
2. Rook-Ceph 설치 파일 다운로드
Rook 프로젝트의 GitHub 저장소에서 rook을 다운로드합니다.
# Rook GitHub 저장소를 클론합니다.
git clone --single-branch --branch v1.11.10 <https://github.com/rook/rook.git>
cd rook/deploy/examples
위 예시는 Rook의 최신 버전(v1.11.10)을 기준으로 진행합니다. 최신 버전이 필요할 경우 Rook GitHub 저장소에서 최신 릴리스를 확인하세요.
3. Rook Operator 배포
Rook Operator는 Ceph 클러스터의 생성과 관리를 자동화합니다. 다음 명령어로 Operator를 배포합니다.
# rook-ceph namespace 생성
kubectl create namespace rook-ceph
# CRDs(Custom Resource Definitions) 적용
kubectl apply -f crds.yaml
# Rook Operator 배포
kubectl apply -f common.yaml
kubectl apply -f operator.yaml
이 단계에서 rook-ceph 네임스페이스가 생성되고 Rook Operator가 배포됩니다.
4. Ceph 클러스터 생성
Rook Operator가 배포되었으면, 이제 Ceph 클러스터를 생성할 수 있습니다. cluster.yaml 파일을 적용하여 Ceph 클러스터 리소스를 만듭니다.
# Ceph 클러스터 설정 파일을 적용하여 클러스터 생성
kubectl apply -f cluster.yaml
Note: cluster.yaml 파일에서 사용하려는 노드와 디스크 구성을 확인하거나 필요한 경우 수정해야 합니다. 특히 storageClassDeviceSets나 directories 섹션에서 Ceph가 사용할 디스크나 디렉터리를 정의합니다.
5. Ceph 파일 시스템, 블록 및 오브젝트 스토리지 설정 (선택 사항)
Ceph는 파일 시스템, 블록 스토리지, 오브젝트 스토리지 인터페이스를 제공하므로 원하는 유형에 맞게 설정할 수 있습니다.
- Ceph Filesystem (CephFS): 파일 기반 스토리지가 필요한 경우, 파일 시스템을 생성합니다.
kubectl apply -f filesystem.yaml
- Rados Block Device (RBD): 블록 스토리지를 설정하려면 블록 스토리지를 생성합니다.
kubectl apply -f block.yaml
- Object Storage (Ceph RGW): 오브젝트 스토리지 서비스를 생성하려면 다음 파일을 적용합니다.
kubectl apply -f object.yaml
6. StorageClass 생성
Kubernetes에서 PVC(PersistentVolumeClaim)를 사용할 수 있도록 StorageClass를 설정합니다.
# 블록 스토리지용 StorageClass 설정
kubectl apply -f storageclass.yaml
StorageClass는 cluster.yaml에서 설정한 클러스터의 OSD와 연동되어 작동합니다.
7. 클러스터 상태 확인
Ceph 클러스터의 상태를 확인하여 정상적으로 배포되었는지 확인합니다.
# Rook Ceph 모니터링 명령어
kubectl -n rook-ceph get pods
kubectl -n rook-ceph get cephcluster
이 명령어를 통해 클러스터 상태가 HEALTH_OK로 표시되는지 확인합니다. 문제가 있는 경우, 로그를 확인하여 설정을 수정해야 합니다.
8. PersistentVolumeClaim 생성
이제 애플리케이션에서 Ceph 스토리지를 사용할 수 있도록 PVC를 생성할 수 있습니다.
# PVC 예제 (블록 스토리지용)
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: my-ceph-block-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
storageClassName: rook-ceph-block
이 YAML 파일을 kubectl apply -f <파일명>.yaml로 적용하여 PVC를 생성하면, Ceph 클러스터가 자동으로 PVC에 스토리지를 할당합니다.
요약
- Rook Operator 배포
- Ceph 클러스터 생성
- Ceph 스토리지 (파일 시스템, 블록 스토리지, 오브젝트 스토리지) 설정
- StorageClass 설정
- PVC를 생성하여 애플리케이션에서 사용
Rook-Ceph는 자동으로 Ceph 클러스터를 모니터링하고 관리하므로, Kubernetes에서 안정적으로 스토리지를 제공합니다.
결론
Rook-Ceph는 Kubernetes 환경에서 Ceph 클러스터의 배포와 관리를 간소화하면서도, Ceph가 제공하는 모든 기능을 그대로 사용할 수 있는 강력한 스토리지 솔루션입니다.
'Kubernetes > Rook Ceph' 카테고리의 다른 글
rook-ceph pvc할당 이슈 (0) | 2024.10.26 |
---|