Red Hat OpenShift 가상 머신 워크로드를 위한 데이터 기반(ODF)
VM 워크로드에 Red Hat® OpenShift® Data Foundation(ODF)을 배포합니다: Ceph 스토리지 풀을 구성하고, 스토리지 클래스를 설정하며, 라이브 마이그레이션을 활성화하고, 백업 솔루션을 구현합니다.
Red Hat® OpenShift® Data Foundation(ODF)은 IBM Cloud® Red Hat OpenShift Kubernetes Service 에서 Red Hat OpenShift 가상화를 위해 검증되고 지원되는 스토리지 솔루션입니다. Red Hat OpenShift 가상화의 스토리지 백엔드로 ODF를 사용하는 것이 권장됩니다.
주요 이점
- 가상 머신을 위한 고성능: 최적화된 블록 스토리지는 가상 머신 워크로드의 부팅 디스크 및 데이터 디스크에 적합하도록 설계되어 지연 시간을 줄이고 높은 IOPS를 제공합니다.
- Red Hat OpenShift 가상화 환경을 위해 설계됨: Red Hat OpenShift 및 KubeVirt 와 원활하게 연동되어 스냅샷, 복제, 라이브 마이그레이션, 백업/복원을 지원하며, Containerized Data Importer(CDI)와도 완벽하게 호환됩니다.
- 높은 복원력과 가용성: 워커 노드 간 데이터 복제가 이루어지는 분산 스토리지, 디스크 또는 노드 장애 시 자동 복구 기능, 스토리지의 단일 장애 지점이 없음.
- Red Hat OpenShift Kubernetes Service 베어 메탈 인프라에 최적화: 로컬 NVMe 및 SSD 디스크를 공유 스토리지 풀에 통합하여 외부 네트워크 스토리지에 대한 의존성을 제거합니다.
- 완벽한 지원 및 라이프사이클 관리: Red Hat OpenShift Operators를 통해 설치 및 업그레이드가 이루어지며, 모니터링 및 알림 기능이 통합되어 있습니다. IBM® 및 Red Hat® 에서 공동으로 검증하고 지원합니다.
- 가상 서버와 컨테이너를 위한 통합 스토리지: ODF는 단일 플랫폼에서 이러한 워크로드 전반에 걸쳐 일관된 스토리지를 제공합니다.
ODF란 무엇인가요?
ODF는 Red Hat OpenShift 을 위해 구축된 소프트웨어 정의 스토리지 솔루션입니다. ODF는 Ceph®를 기반으로 하며, Red Hat OpenShift Operators를 통해 완벽하게 통합되고 라이프사이클 관리가 이루어집니다. Ceph는 일반 서버를 확장성이 뛰어나고 내결함성이 뛰어난 스토리지 클러스터로 변환해 주는 오픈 소스 분산 스토리지 시스템입니다.
ODF는 동일한 플랫폼에서 네 가지 유형의 스토리지를 제공합니다:
- 블록 스토리지(RBD) – 가상 머신 워크로드 디스크용
- 파일 저장소 ( CephFS ) – 공유 파일 시스템용
- 오브젝트 스토리지(RGW 및 S3-compatible ) – 오브젝트 워크로드용
- NFS ( CephFS-backed ) – NFS 기존 또는 외부 고객을 위한 수출
ODF에서 NFS 은 CephFS 에 의해 지원되며 Ceph NFS 가네샤 게이트웨이를 통해 노출됩니다. 게이트웨이는 Rook 의 CephNFS 사용자 지정 리소스를 통해 관리됩니다. 이는 별도의 스토리지 백엔드가 아닙니다. NFS 프로토콜을 통해 CephFS 에 접속할 수 있게 해줍니다. 주요 사용 사례는 Red Hat OpenShift 클러스터 외부의 클라이언트나 NFS 가 필요한 워크로드에 NFS 액세스를 제공하는 것입니다. NFS 가상 서버는 블록 스토리지(RBD)를 사용하기 때문에 가상 머신 워크로드 디스크에는 사용되지 않습니다.
IBM ( Red Hat OpenShift Kubernetes Service )에서 ODF는 일반적으로 워커 노드의 로컬 디스크를 사용하여 Red Hat OpenShift 내부에 고성능의 내결함성 스토리지 클러스터를 구축합니다.
데이터 보호에 대한 이해
ODF 클러스터를 계획하고 구축하기 전에, ODF가 데이터를 어떻게 보호하는지 이해하는 것이 중요합니다. 선택하는 데이터 보호 전략은 스토리지 용량, 성능 특성, 내결함성, 필요한 최소 노드 수에 영향을 미칩니다.
단일 ODF 클러스터는 각각 다른 데이터 보호 정책을 가진 여러 Ceph 풀을 동시에 실행할 수 있습니다. 각 풀은 자체 StorageClass 을 통해 워크로드에 노출됩니다. 가상 머신 워크로드를 생성할 때 각 디스크에 대해 StorageClass 을 선택합니다. 예를 들어, 가상 머신 워크로드는 루트 디스크로 rep3 StorageClass 를 사용하고, 중요도가 낮은 데이터 디스크로는 rep2 풀을 기반으로 하는 별도의 StorageClass 를 사용할 수 있습니다. 이 모델은 클러스터 전체에 대한 전부 아니면 전무의 선택이 아닙니다.
VMware 의 경우, 이 모델은 vSAN 의 스토리지 정책과 유사합니다. vSAN, 에서 가상 머신 워크로드 또는 VMDK별로 스토리지 정책(예: RAID-1 FTT=1, RAID-5 )을 할당합니다. ODF에서는 PVC당 Ceph 풀에 매핑되는 StorageClass 을 할당합니다. 개념은 동일하지만 동일한 클러스터의 워크로드마다 보호 수준이 다를 수 있습니다.
ODF는 Ceph 블록 풀에 대해 다음과 같은 데이터 보호 전략을 지원합니다:
복제된 풀(기본값)
기본 ODF 구성에서는 3방향 복제를 사용합니다. 모든 데이터는 서로 다른 노드에 3개의 복사본으로 저장되며, 최대 2개의 디스크 또는 노드가 동시에 고장 나더라도 데이터를 보호합니다.
- 장점: 간단한 아키텍처, 빠른 읽기 성능, 빠른 복구, 예측 가능한 지연 시간.
- 사용량 증가: 사용 가능한 데이터 1바이트당 3x 원시 저장 공간.
사본을 분실하면 어떻게 되나요 ( rep3 ):
| 남아 있는 사본 | 세프 상태 | I/O 동작 | 위험 |
|---|---|---|---|
| 3 중 3 | active+clean |
정상 작동. 읽기 작업은 어떤 복사본에서든 처리됩니다. | 없음. |
| 3 중 2 | active+degraded |
입출력이 정상적으로 계속됩니다. Ceph는 누락된 사본을 다른 OSD로 즉시 다시 복제하여 3개의 사본을 복원합니다. | 최소. 데이터는 2개의 독립된 OSD에서 계속 유지됩니다. 복구는 자동으로 이루어집니다. |
| 3 중 1 | active+degraded 또는 peered ( min_size)에 따라 다름) |
ODF 기본값인 ‘ min_size=2 ’가 설정된 경우, Ceph는 해당 배치 그룹에 복사본이 단 1개만 남아 있을 때 해당 배치 그룹에 대한 모든 I/O를 차단합니다. 일관성이 깨질 수 있는 불필요한 쓰기 작업을 방지합니다. 해당 PG에 데이터가 저장된 가상 서버에서 I/O 정체가 발생합니다. |
높음. 남아 있는 단 하나의 OSD에만 데이터가 1부만 남아 있습니다. 복구가 완료되기 전에 이 과정마저 실패하면 데이터는 영구적으로 손실됩니다. |
| 0 중 3 | incomplete |
I/O가 차단되었습니다. 사본이 존재하지 않습니다. | 데이터 유실. 데이터는 영구적으로 복구할 수 없습니다. |
min_size 매개변수는 Ceph가 I/O를 허용하기 전에 사용할 수 있어야 하는 최소 복사본 수를 제어합니다. ODF는 기본적으로 rep3 풀에 대해 min_size=2 를 설정하며, 이는 requireSafeReplicaSize: true 을 통해 적용됩니다. 즉, 2개 또는 3개의 복사본이 사용 가능한 경우 읽기 및 쓰기 작업이 정상적으로 진행됩니다.
사용 가능한 복사본이 1개뿐일 경우, Ceph는 추가적인 데이터 불일치를 방지하기 위해 I/O를 차단합니다.
이러한 동작은 가용성보다 데이터 무결성을 우선시하는 의도적인 안전 장치입니다.
두 번째 사본을 잃은 시점부터 재복제가 완료될 때까지의 기간이 가장 위험합니다. 이 기간 동안 세 번째 장애가 발생하면 영구적인 데이터 손실이 발생합니다. Ceph의 재복제 속도는 사용 가능한 클러스터 대역폭과 여유 공간에 따라 달라지기 때문에, 용량 계획이 중요한 것입니다. 과부하가 걸리거나 거의 가득 찬 클러스터는 재복제하는 데 더 오랜 시간이 걸리므로, 취약한 상태가 지속되는 기간이 길어집니다.
rep2 풀의 경우, 진행 속도가 더 빠릅니다. 사본 1개를 분실하면 사본 1개만 남습니다. min_size=2 (기본값)을 사용하면, 누락된 OSD가 복구되거나 새 사본이 복제될 때까지 해당 PG의 I/O가 즉시 차단됩니다. min_size=1 를 사용하면, 남아 있는 단일 사본에서 I/O 처리가 계속되지만, 두 번째 장애가 발생하면 데이터가 영구적으로 손실됩니다.
Red Hat OpenShift ( Kubernetes Service ) ODF 애드온은 ocs-storagecluster-cephblockpool 을 사용하여 rep3 풀만 자동으로 생성합니다. Rep2 풀은 애드온에 의해 생성되지 않습니다. replicated.size: 2 를 사용하여 사용자 지정 CephBlockPool 를 수동으로 생성하고, 이에 대응하는 StorageClass
도 함께 생성해야 합니다. 자세한 내용은 ‘가상화를 위한 사용자 지정 StorageClass 만들기’를 참조하십시오.
rep2 는 rep3 보다 내결함성이 낮으므로, 스토리지 비용 절감 효과가 해당 워크로드에 대한 증가된 위험을 상쇄할 만큼 충분한지 평가해야 합니다.
IBM 가용성과 데이터 내구성을 보장하기 위해 모든 프로덕션 가상화 워크로드에 3-way 복제를 권장합니다.
삭제 코드 풀
스토리지 용량 효율성이 우선시되는 환경을 위해 ODF는 삭제 코드(EC) 풀도 지원합니다. EC는 데이터를 k 데이터 청크와 m 패리티 청크로 분할하여, 복제 방식에 비해 원시 저장 공간 사용량을 줄이면서도 여전히 내결함성을 보장합니다.
지원 현황: ODF의 RBD 및 CephFS 에 대한 지우기 코딩(Erasure coding)은 개발자 미리 보기 기능으로, ODF에서 처음 도입되었습니다. 4.20. 개발자 미리보기 기능은 실제 운영 환경에서 지원되지 않습니다. 또한 이 사항들은 Red Hat 고객 포털의 사례 관리 대상에도 포함되지 않습니다. ODF 4.20 이전에는 RGW(오브젝트 스토리지) EC만이 개발자 프리뷰(ODF 4.16 ) 형태로 제공되었습니다. 기본 Ceph 스토리지 엔진은 Luminous 릴리즈(2017) 이후 RBD에 대한 EC 덮어쓰기를 지원하지만, ODF 운영자와 관리형 배포 모델은 아직 프로덕션 블록 스토리지 워크로드에 대한 EC 풀을 인증하지 않습니다. 모든 프로덕션 VM 스토리지에는 복제 풀( rep2 또는 rep3 )을 사용할 계획을 세우고, 개발자 프리뷰의 제한 사항이 허용 가능한 비프로덕션 환경에서만 EC 풀을 검토하십시오.
다음 표는 참고를 위해 사용 가능한 모든 풀 유형을 비교한 것입니다.
| 풀 유형 | 구성 | Raw 사용량 증가 | 결함 허용치 | 필요한 최소 호스트 |
|---|---|---|---|---|
| rep3 (기본값) | 3부 | 3.0x | 2번의 실패에서 살아남기 | 3 |
| rep2 | 2부 | 2.0x | 1회 실패 시 생존 | 2 |
| rep1 (비복원성) | 복사본 1장 | 1.0x | 없음. 장애 발생 시 데이터 손실 | 3 |
| ec-2-1 | k=2, m=1 | 1.5x | 1회 실패 시 생존 | 3 |
| ec-3-1 | k=3, m=1 | 1.33x | 1회 실패 시 생존 | 4 |
| ec-2-2 | k=2, m=2 | 2.0x | 2번의 실패에서 살아남기 | 4 |
| ec-4-2 | k=4, m=2 | 1.5x | 2번의 실패에서 살아남기 | 6 |
다음 목록은 지우기 코딩에 있어 고려해야 할 주요 사항들을 보여줍니다.
- EC 풀은 패리티 계산과 작업당 더 많은 청크를 기록해야 하기 때문에, 복제 풀보다 쓰기 지연 시간이 더 깁니다.
- EC 풀은 경쟁력 있는 순차 읽기 처리량을 제공하지만 랜덤 쓰기 IOPS가 감소할 수 있습니다.
- 오류 도메인의 수는 최소한 k+m개여야 합니다. 3노드 클러스터에서는 rep2, rep3, ec-2-1 만 가능합니다.
- 6노드 클러스터의 경우, 앞서 나열된 모든 풀 유형을 사용할 수 있습니다.
단일 리플리카 풀 (개발 및 테스트용으로만 사용되며, 내결함성이 없음)
ODF 애드온 버전 4.14, Red Hat OpenShift Kubernetes Service 는 addSingleReplicaPool 매개변수를 통해 단일 복제본( rep1 ) 풀을 지원합니다. 이 매개변수는 데이터 복제가 없으며, 각 데이터 블록이 한 번만 저장되는 Ceph 비복원형 블록 풀을 생성합니다.
ODF를 배포할 때 단일 리플리카 풀을 활성화하려면 다음 명령을 사용하십시오
ibmcloud oc cluster addon enable openshift-data-foundation -c <cluster_name> \
--version <version> \
--param "addSingleReplicaPool=true"
이 명령은 추가적인 StorageClass:
ocs-storagecluster-ceph-non-resilient-rbd:WaitForFirstConsumer볼륨 바인딩이 있는 단일 복제본 블록 스토리지.
이 기능을 사용하면 여전히 표준 replica-3 풀(ocs-storagecluster-cephblockpool)이 생성됩니다. 비복구형 풀은 별도의 옵트인 옵션입니다.
단일 레플리카 풀에는 다음과 같은 사용 사례가 있습니다.
- 개발 및 테스트 환경 - 데이터 내구성이 중요하지 않고 스토리지 비용 절감이 우선시되는 경우.
- 내장형 복제 기능을 갖춘 애플리케이션 - 이러한 애플리케이션은 애플리케이션 계층에서 자체적으로 데이터 중복성을 관리합니다. 이러한 애플리케이션은 노드 간에 여러 개의 복사본을 유지하므로, 스토리지 수준의 복제는 중복됩니다.
단일 복제본 풀은 제로 장애 허용 오차를 제공합니다. 하나의 OSD 또는 노드에 장애가 발생하면 해당 OSD의 모든 데이터는 영구적으로 복구할 수 없는 데이터 손실이 발생합니다. IBM Cloud 문서에서는 이 옵션이 데이터 손실, 데이터 손상 및 잠재적인 시스템 불안정의 위험을 증가시킨다고 명시적으로 경고하고 있습니다. 자세한 내용은 Ceph 문서를 참조하세요.
제한사항:
- 블록 스토리지 전용: 파일 스토리지는 단일 복제본으로는 지원되지 않습니다.
- 추가 디스크 필요: ‘ replica-3 ’ 풀에서 사용하는 디스크 외에 노드당 최소 한 개의 추가 사용 가능한 NVMe 디스크가 필요합니다. 이 추가 디스크가 없으면 replica-1 OSD가 시작되지 않고 스토리지 클러스터가 진행 중인 상태로 유지됩니다.
- 장애 도메인당 하나의 풀: ODF는 장애 도메인당 하나의 비복원성 CephBlockPool 을 생성하며, 이 볼륨은
WaitForFirstConsumer을 사용하여 바인딩하여 데이터 로캘리티를 확인합니다. - 가상 머신 워크로드 루트 디스크에는 권장되지 않습니다: 루트 디스크를 호스팅하는 OSD에 장애가 발생하면 가상 머신 워크로드가 영구적으로 손실됩니다. 개발 또는 테스트 가상 머신 워크로드에서 일회용 데이터 디스크에만 비복원성 풀을 사용하세요.
프로덕션 가상화 워크로드의 경우, 항상 replica-3 (또는 최소한 replica-2 ) 풀을 사용하십시오.
VMware vSAN 마이그레이션 비교
VMware ( vSAN™ )에서 마이그레이션하는 팀의 경우, 이러한 Ceph 풀 유형은 익숙한 vSAN 스토리지 정책과 다음과 같이 대응됩니다:
| 세프 풀 | 가장 가까운 vSAN 등가물 | 이용률 증대 | 결함 허용치 | 참고 |
|---|---|---|---|---|
| rep2 | RAID-1, FTT=1 | 2x | 1 실패 | 두 가지 모두 2개의 사본을 저장하는 것과 직접적으로 동일합니다. |
| rep3 | RAID-1, FTT=2 | 3x | 2번의 실패 | 두 경우 모두 3부를 저장하는 것과 동일합니다. |
| ec-2-1 | 직접적인 등가물 없음 | 1.5x | 1 실패 | RAID-5 와 같은 단일 패리티이지만 2+1 레이아웃을 사용합니다. vSAN RAID-5 보다 높은 사용량. |
| ec-3-1 | RAID-5, FTT=1 (3+1) | 1.33x | 1 실패 | 두 경우 모두 3개의 데이터 청크와 1개의 패리티 청크를 사용하는 것과 직접적으로 동일합니다. |
| ec-2-2 | 직접적인 등가물 없음 | 2x | 2번의 실패 | RAID-6 와 같은 이중 패리티이지만 2+2 레이아웃을 사용합니다. vSAN RAID-6 보다 더 많이 사용합니다. |
| ec-4-2 | RAID-6, FTT=2 (4+2) | 1.5x | 2번의 실패 | 두 경우 모두 4개의 데이터 청크와 2개의 패리티 청크를 사용하는 것과 동일합니다. |
다음과 주요 차이점 vSAN:
- 더 작은 호스트 최소값: Ceph는 클러스터 쿼럼과 데이터 배치를 분리합니다. rep3 풀은 각 호스트가 하나의 전체 사본을 저장하기 때문에 호스트 3대만 있으면 됩니다. vSAN RAID-1 FTT=2 는 호스트 5대가 필요합니다.
- rep2 표준 vSAN RAID-1: 과 일치합니다. 대부분의 vSAN 배포 환경에서는 FTT=1 을 사용하며, 여기에는 2개의 사본이 저장됩니다. Ceph의
rep2가 이에 직접적으로 해당합니다. - ec-3-1 vSAN 및 와 일치합니다. 두 경우 모두 3+1 레이아웃을 사용하며, 단일 고장 허용 능력에 있어 가장 공간 효율적인 옵션인 사용량을 달성합니다. RAID-5: 1.33x
- ec-4-2 vSAN 및 와 일치합니다. 두 제품 모두 4+2 레이아웃을 사용하며, 이중 고장 내성을 갖춘 사용량을 달성합니다. RAID-6: 1.5x
- ec-2-1 또한 ‘ ec-2-2 ’에는 ‘ vSAN ’에 해당하는 직접적인 개념이 없습니다. 데이터 청크 수가 더 적은 소규모 Ceph EC 구성으로, 바이트당 사용량은 더 많지만 필요한 호스트 수는 더 적습니다. 저장 효율성을 희생하는 대신 호스트 수를 줄일 수 있습니다.
ODF 클러스터 계획
데이터 보호 옵션을 이해했다면, 이제 ODF 배포를 위한 클러스터 규모 및 토폴로지를 계획할 수 있습니다.
계획 용량
ODF 클러스터를 계획할 때는 선택한 데이터 보호 정책에 따른 원시 스토리지 사용량을 고려해야 합니다. 사용 가능한 용량은 총 원시 NVMe 용량보다 적습니다.
사용 가능한 용량 공식은 Usable capacity = Total raw NVMe capacity / Replication or EC overhead factor 입니다.
노드당 8개의 3.2 TB NVMe 드라이브가 있는 3노드 클러스터의 다음 계산 예시( 76.8 TB 원시 합계)를 참조하세요:
| 데이터 보호 | 사용 계수 | 가용 용량 | 스토리지 효율성 |
|---|---|---|---|
| *ep3 (기본값) | 3.0x | 25.6 결핵 | 33% |
| rep2 | 2.0x | 38.4 결핵 | 50% |
| ec-2-1 | 1.5x | 51.2 결핵 | 67% |
| rep1 (비복원성) | 1.0x | 76.8 결핵 | 100%로 |
가상 머신 워크로드 용량 추정: 30GB 루트 디스크와 100GB 데이터 디스크가 있는 일반적인 가상 머신 워크로드는 130GB의 사용 가능한 스토리지를 사용합니다. rep3 을 사용하면 해당 가상 머신 워크로드에 390 GB의 원시 저장 공간이 필요합니다. 앞서 언급한 3노드 클러스터에서는 이 규모의 가상 머신 워크로드를 약 196개 정도 프로비저닝할 수 있습니다. 실제로는 성능을 유지하고 복구 작업을 지원하려면 Ceph 사용량을 75% 미만으로 유지하세요.
클러스터 사용량이 증가하면 Ceph 성능이 저하됩니다. ODF는 어떤 OSD의 사용률이 75%를 초과할 경우 ‘ CephOSDNearFull ’ Prometheus 경보를 발령합니다. 85%에 도달하면 Ceph는 네이티브 nearfull OSD 플래그(mon_osd_nearfull_ratio)를 설정하고, ODF는 CephOSDCriticallyFull 경보를 발령합니다. 90%에 도달하면 Ceph는 영향을 받은 OSD에 대한 백필 및 복구 작업을 중지합니다(mon_osd_backfillfull_ratio). 95%에 도달하면 Ceph는 해당 OSD를 full 로 표시하고(mon_osd_full_ratio), 모든 쓰기 작업을 차단하며, HEALTH_ERR 를 발생시킵니다. 정상
운영 시 사용률이 70% 미만으로 유지되도록 용량을 계획하여, 노드 유지보수 또는 장애 발생 시 데이터 복구 및 재조정 작업을 수행할 수 있는 여유 용량을 확보하십시오.
현재 클러스터 사용량을 확인하려면 다음 명령어를 실행하십시오:
oc exec -n openshift-storage $(oc get pods -n openshift-storage -l app=rook-ceph-tools -o name) -- ceph df
워커 노드 수 및 토폴로지
IBM Cloud 의 ODF 애드온에서 사용하는 장애 도메인 토폴로지는 클러스터 구성에 따라 달라집니다:
- 다중 가용 영역 클러스터(가용 영역 3개): 장애 도메인은
zone로 설정되어 있습니다. 워커 노드는 여러 존에 분산되어 있으며, 존 간의 균형을 유지하기 위해 ODF는 3의 배수로 확장되어야 합니다. 가용성, 성능 및 데이터 보안을 최적화하려면 ODF 스토리지 클러스터에 3개, 6개 또는 9개의 노드를 사용하십시오. 각 구역에는 동일한 수의 노드가 할당됩니다. - 단일 가용 영역 클러스터 또는 가용 영역이 3개 미만인 클러스터: 유연한 확장이 자동으로 활성화되며, 장애 도메인은 ‘
host’로 설정됩니다. 노드 3개로 시작하여 한 번에 하나씩 노드를 추가할 수 있습니다.
ODF 스토리지 클러스터에 참여하는 모든 노드는 베어메탈이어야 합니다. 동일한 ODF 클러스터 내에서 가상화된 노드와 베어메탈 노드를 혼합하는 것은 지원되지 않습니다.
다중 구역 클러스터의 경우: 3의 배수가 아닌 개수의 노드를 추가하면 구역 간 불균형이 발생합니다. 노드가 4개인 경우, 한 구역에는 노드가 2개 배정되고 나머지 구역에는 각각 1개씩 배정되므로, OSD 가중치 분배가 불균형해지고, 데이터 배치 효율이 떨어지며, 사용량이 고르지 않게 분산되고, 일부 OSD는 유휴 상태가 됩니다.
다중 영역 클러스터의 경우, 균형 잡힌 영역 토폴로지를 유지하기 위해 항상 3의 배수로 확장해야 합니다.
프로덕션에 6개의 노드가 실용적인 최소값인 이유
ODF는 최소 3개의 노드가 필요하지만, 3노드 클러스터로는 계획된 유지보수를 수행할 여유가 없습니다. 3개의 노드에서 rep3 를 실행 중일 때, 한 노드가 펌웨어 업데이트나 Red Hat OpenShift 업그레이드를 위해 격리되면 어떤 일이 발생하는지 살펴보겠습니다:
- 1개의 노드가 유지보수 중입니다. OSD가 다운된 상태이므로 Ceph는 해당 복사본들을 사용 불가능한 것으로 표시합니다. 클러스터가 ‘
active+degraded’ 상태로 전환되며, 남아 있는 2개의 노드에 걸쳐 3개의 복사본을 복원하기 위해 재복제를 시작합니다. - 해당 유지보수 기간 중에 두 번째 노드에 장애(디스크 장애, 커널 패닉, 전원 문제 등)가 발생하면, 일부 배치 그룹에는 사본이 단 1개만 남게 됩니다. 기본값
min_size=2을 사용하면 Ceph는 해당 PG에서 I/O를 차단합니다. 영향을 받은 배치 그룹에 데이터가 있는 가상 서버가 응답을 멈춥니다. - 유지 관리 노드와 장애 발생 노드가 모두 다운된 상태로 남아 있는 경우, 해당 2개 노드에 복사본이 있고 동일한 노드에 세 번째 OSD가 있는 모든 배치 그룹은 복사본이 0개가 되어 영구적인 데이터 손실이 발생합니다.
이러한 데이터 손실을 방지하려면, 2개의 노드가 동시에 고장 나더라도 모든 데이터에 대한 가용성을 유지할 수 있을 만큼 충분한 OSD를 확보할 수 있도록 ODF 클러스터의 규모를 조정하십시오.
| 노드 | 유지보수 + 장애 | 결과 |
|---|---|---|
| 3(최소) | 유지보수 중 1 + 장애 1 = 남은 1 | I/O 차단됨 (min_size=2). 데이터 손실 위험. |
| 6(권장) | 유지보수 중 1 + 장애 1 = 남은 4 | Ceph는 4개의 노드에 데이터를 다시 복제합니다. 입출력이 계속됩니다. 데이터 손실 위험이 없습니다. |
| 9 | 유지보수 중 1 + 장애 1 = 남은 7 | 재복제를 위한 충분한 용량. 성능에 미치는 영향 최소화. |
rep3 를 실행하는 프로덕션 클러스터의 경우, 6개의 노드로 시작하십시오. 이 설정은 데이터 가용성이나 데이터 손실의 위험 없이 계획된 유지보수 및 예기치 않은 장애 발생 시 한 개의 노드에 충분한 용량을 제공하는 N+2 헤드룸을 제공합니다. 다운타임과 데이터 손실이 허용되는 개발, 테스트 또는 개념 증명에만 3노드 클러스터를 사용하세요.
다음 명령을 실행하여 클러스터의 노드 토폴로지 할당 정보를 확인할 수 있습니다:
oc get nodes -l node-role.kubernetes.io/worker= \
-o custom-columns='NAME:.metadata.name,RACK:.metadata.labels.topology\.kubernetes\.io/rack'
두 가지 배포 옵션이 있습니다.
-
선택지 A – 전체 근로자 풀 활용
- ODF 구성 시 작업자 풀 이름만 지정하세요.
- 다중 영역 클러스터의 경우, 풀에 베어 메탈 노드가 3개, 6개 또는 9개(3의 배수) 포함되어 있는지 확인하십시오. 단일 구역 클러스터의 경우, 최소 3개의 노드가 필요합니다.
-
옵션 B – 특정 노드 선택
- 풀에 노드가 더 많거나, 일부 노드를 연산 전용 워크로드용으로 예약하려는 경우, ODF에 참여할 노드를 선택하십시오. 다중 영역 클러스터의 경우, 노드를 3의 배수로 선택해야 하며, 단일 영역 클러스터의 경우 3개 이상이면 개수에 관계없이 유효합니다.
ODF 구독 요금제
귀하의 요구 사항에 가장 적합한 요금제를 선택하세요:
-
필수
- 비용 절감
- 내부 모드 배포 전용
- 재해 복구, 스트레치 클러스터 또는 외부 모드 배포를 지원하지 않습니다
- 테스트 및 개발 환경, 개념 검증(PoC) 또는 소규모 배포에 가장 적합합니다
-
고급
- 재해 복구, 스트레치 클러스터, 외부 모드 배포, 고급 세분화된 암호화, 다중 클러스터 지원을 포함한 포괄적인 기능 세트
- 가상 머신을 사용하는 프로덕션 가상화 워크로드에 권장됩니다
두 플랜 모두 블록 풀에 대한 BlueStore 압축, 씬 프로비저닝, 스냅샷 및 복제 기능을 포함합니다. 각 플랜 간의 차이점은 스토리지 효율성 기능보다는 재해 복구, 암호화 세분화 수준, 배포 유연성과 관련이 있습니다.
ODF는 MCG(멀티클라우드 오브젝트 게이트웨이)를 통한 오브젝트 스토리지에 대해서만 중복 제거를 지원합니다. 블록 스토리지는 중복 제거를 지원하지 않습니다. 이 지원은 Essentials 요금제와 Advanced 요금제 모두에 적용됩니다. RBD를 위한 업스트림 Ceph 중복 제거는 아직 실험 단계이며 ODF에서 사용하도록 인증되지 않았습니다.
자세한 내용은 ‘ODF 기초’와 ‘ODF 심화’를 참조하십시오.
ODF 설정 Red Hat OpenShift Kubernetes Service
Red Hat OpenShift Red Hat OpenShift 의 가상화 VPC 클러스터는 현재 베어 메탈 워커 노드만 지원합니다. Kubernetes Service 가상화된 워커 노드는 ODF 스토리지 클러스터에 지원되지 않습니다.
Red Hat OpenShift Kubernetes Service 클러스터에 Red Hat CoreOS 에서 실행되는 베어 메탈 서버를 사용하는 워커 풀이 최소 하나 이상 포함되어 있는지 확인하십시오. Red Hat OpenShift. Red Hat OpenShift 가상화 기능을 사용하려면 버전 4.17 이상이 필요합니다. 지원되는 베어메탈 옵션은 bx2d.metal.96x384, cx2d.metal.96x192,
mx2d.metal.96x768 입니다.
이러한 베어 메탈 노드에 ODF 스토리지 클러스터를 배포하여 로컬 NVMe 디스크를 사용하고 가상 머신에 고성능 블록 스토리지를 제공하세요.
VPC 기반 Red Hat OpenShift Kubernetes Service 클러스터에 ODF를 배포하는 방법에 대한 지침은 VPC 클러스터에 Red Hat OpenShift Data Foundation 배포를 참조하세요.
스토리지 유형
- 로컬 저장소를 선택합니다.
- 로컬 스토리지는 베어메탈 워커 노드에서 사용 가능한 로컬 NVMe 인스턴스 스토리지를 사용합니다.
- NVMe 드라이브는 가상 머신 워크로드 디스크에 필요한 낮은 지연 시간과 높은 IOPS 성능을 제공합니다.
ODF 리소스 프로필
ODF는 Ceph 데몬을 위해 예약된 CPU와 메모리를 제어하는 세 가지 리소스 할당 프로필을 제공합니다.
- 린: 최소한의 리소스 할당. Lean 프로필은 리소스가 제한된 환경, 테스트, 개발 및 개념 증명에 적합합니다. Lean은 생산 환경의 가상화 워크로드에는 권장되지 않습니다.
- 균형 잡힌: Red Hat OpenShift Kubernetes Service 의 기본 프로필입니다. 균형 잡힌 프로필은 범용 워크로드를 위한 리소스 소비와 성능 간의 균형을 제공합니다.
- 성능: Ceph 데몬에 더 많은 CPU와 메모리를 할당하여 데몬 측 병목 현상의 위험을 줄입니다. 높은 IOPS를 요구하는 워크로드, 대량의 가상 서버, 그리고 고성능이 필요한 애플리케이션에 가장 적합합니다.
로컬 NVMe 드라이브를 사용하는 베어메탈 배포의 경우, ‘성능 ’ 리소스 프로필을 사용하십시오. 노드당 8개 이상의 NVMe 드라이브를 갖춘 베어메탈 노드는 호스트당 OSD 수가 많아지게 됩니다. 'Balanced' 프로필을 사용할 경우, 기본 NVMe 하드웨어가 포화 상태에 이르기도 전에 Ceph 데몬의 CPU 및 메모리 한도에 먼저 도달하는 경우가 많으며, 이로 인해 IOPS가 제한되고 지연 시간이 증가합니다. ‘성능’ 프로필은 베어메탈 환경에서 Red Hat OpenShift 가상화 워크로드를 운영할 때 권장되는 최소 프로필입니다.
ODF 설치 중 Red Hat OpenShift 웹 콘솔에 표시되는 리소스 요구 사항은 클러스터 OSD 수에 따라 동적으로 계산됩니다. 따라서 NVMe 드라이브가 더 많은 클러스터일수록 그에 비례하여 더 많은 리소스가 필요합니다. 값은 고정되어 있지 않습니다. 특정 클러스터 구성에 대해 콘솔에 표시되는 요구 사항을 항상 확인하세요.
프로필은 Red Hat OpenShift 웹 콘솔의 성능 구성 화면을 통해 StorageSystem 생성 시 선택됩니다. 리소스가 부족하게 할당된 Ceph 데몬은 숨겨진 병목 현상이 되어, 기본 스토리지 하드웨어가 제공할 수 있는 수준보다 IOPS가 감소하거나 지연 시간이 증가할 수 있습니다.
베어 메탈 서버 프로필을 선택한 프로필에 표시된 리소스 요구 사항에 맞출 수 있습니다: IBM Cloud VPC 베어 메탈 서버 프로파일.
베어메탈 서버에서는 약간의 리소스 초과 구독이 허용되는 경우가 많습니다. 단, 표시된 최소 요구 사항보다 훨씬 적은 용량을 할당해서는 안 됩니다. 그렇게 할 경우 ODF의 성능과 안정성이 저하됩니다.
노드당 OSD 디스크 수
- 각 베어 메탈 서버에서 사용 가능한 로컬 NVMe 드라이브의 수를 확인하십시오.
- 노드당 구성된 OSD의 수가 사용 가능한 NVMe 드라이브의 수를 초과하지 않도록 하십시오.
- 최적의 성능과 장애 격리를 위해 NVMe 드라이브당 OSD 1개를 사용하는 것이 권장됩니다.
- 일반적으로 OSD 디스크의 개수가 베어 메탈 노드당 NVMe 드라이브의 개수와 일치하도록 해야 합니다. UI에 표시되는 저장 용량 계산값은 로컬 저장소 구성의 실제 사용 가능 용량을 반영하지 않으므로 무시해도 됩니다.
StorageSystem 을 생성할 때 노드를 선택할 때는 클러스터 내의 모든 노드를 선택하지 않도록 하십시오. 모든 노드를 선택하면 nodeSelector 가 없는 LVS( LocalVolumeSet )가 생성됩니다. 향후 클러스터에 추가되는 모든 워커 노드는, 비록 스토리지 용도로 설계되지 않았더라도 ODF에 의해 자동으로 감지됩니다. 예기치 않게 감지된 노드는 LVS에서
수동으로 제거해야 합니다. 이를 방지하려면 전용 스토리지 워커 풀에 속한 노드만 선택하거나, StorageSystem를 생성하기 전에 해당 노드에 cluster.ocs.openshift.io/openshift-storage 레이블이 부여되어 있는지 확인하십시오.
클러스터의 기본값 StorageClass
ODF가 배포된 후에는 일반적으로 다음의 followingStorageClasses 파일이 생성됩니다:
ocs-storagecluster-ceph-rbd: 블록 스토리지ocs-storagecluster-cephfs: 파일 저장소ocs-storagecluster-ceph-rgw: 개체 스토리지
워크로드가 별도의 구성 없이도 ODF 기반의 고성능 영구 블록 스토리지를 자동으로 사용할 수 있도록 하려면, ODF 애드온을 설치한 후 기본 스토리지 클래스로 ‘ Ceph RADOS 블록 장치(RBD) 사용 ’를 선택하거나, 클러스터의 기본 StorageClass 로 ‘ RBD ’ (ocs-storagecluster-ceph-rbd)을 수동으로
설정하십시오.
-
RBD를 기본값으로 표시합니다:
oc patch storageclass ocs-storagecluster-ceph-rbd -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}' -
필요한 경우, 이전에 설정된 기본값에서 ‘default’를 제거하십시오:
oc patch storageclass <previous-default-name> -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"false"}}}'
ODF 구성 체크리스트
- 클러스터에 하나 이상의 베어메탈 서버 풀이 포함되어 있습니다
- Red Hat OpenShift 4.17 이상 버전
- ODF 애드온 및 운영자가 설치되어 실행 중입니다
- 베어 메탈 서버에는 사용 가능한 로컬 NVMe 드라이브가 충분합니다
- 선택한 리소스 프로필이 노드 용량과 일치합니다
- ODF 스토리지 클러스터는 최소 3개의 노드를 사용하며, 다중 구역 클러스터의 경우 3의 배수(3, 6, 9, …)를 사용해야 합니다 구역 균형을 유지하기 위해
- 모든 ODF 참여 노드는 베어메탈입니다
- RBD StorageClass 가 생성되고 기본값으로 설정되는 것이 좋습니다
- ODF 클러스터 상태는 ‘Ready’입니다 (
oc get storagecluster -n openshift-storage) - Ceph 상태는 HEALTH_OK입니다 (
oc -n openshift-storage rsh $(oc get pod -l app=rook-ceph-tools -o name) ceph status)
ODF에서 가상 서버 실행
다음 정보를 참고하여 ODF에서 가상 서버를 실행하십시오.
필수 조건: Red Hat OpenShift 가상화 오퍼레이터를 설치하십시오
IBM Cloud 에서 Red Hat OpenShift 가상화 기능을 사용하기 전에, Red Hat OpenShift Kubernetes Service 클러스터에 Red Hat OpenShift 가상화 운영자가 설치되어 있는지 확인하십시오.
Red Hat OpenShift 가상화 운영자는 Kubernetes 네이티브 가상 머신 워크로드 관리를 지원합니다. 또한 필요한 컨트롤러, CRD, 스토리지 및 네트워킹 구성 요소와의 통합을 제공합니다.
자세한 내용은 IBM Cloud 에서 Red Hat OpenShift 가상화를 참조하세요.
가상 머신 워크로드에 ODF 스토리지 사용
Red Hat OpenShift Data Foundation(ODF)은 Red Hat OpenShift 에서 실행되는 가상화 워크로드를 위한 영구적인 소프트웨어 정의 스토리지를 제공합니다. 가상 머신의 스토리지 백엔드로 ODF를 사용할 경우, 성능과 안정성을 보장하고 모든 기능을 완벽하게 호환시키려면 올바른 ‘ StorageClass ’를 선택하는 것이 매우 중요합니다.
다음과 같은 상황에서는 적절한 StorageClass 를 지정해야 합니다:
- 가상 서버가 생성됩니다
- 가상 서버를 가져오거나 복제합니다
- 가상 서버가 Red Hat OpenShift Kubernetes Service 클러스터로 마이그레이션됩니다
기본 가상화 StorageClass
Red Hat OpenShift 가상화 오퍼레이터가 설치되고 ODF 클러스터가 사용 가능한 경우, 가상화 워크로드에 최적화된 StorageClass 가 자동으로 생성됩니다:
ocs-storagecluster-ceph-rbd-virtualization
이 StorageClass 입니다:
- 랜덤 읽기, 쓰기 및 지속적인 처리량과 같은 디스크 I/O 패턴에 맞게 조정됨
- 시작, 중지, 라이브 마이그레이션 및 스냅샷과 같은 가상화 수명 주기 작업에 대해 검증되었습니다
- 프로덕션 환경에서 완벽하게 지원 및 권장 Red Hat OpenShift 가상화 환경
대부분의 사용 사례에서는 수정 없이 StorageClass 을 사용하세요.
라이브 마이그레이션 스토리지 요구 사항
라이브 마이그레이션은 실행 중인 가상 머신 워크로드를 다운타임 없이 한 워커 노드에서 다른 워커 노드로 이동합니다. 성공적인 라이브 마이그레이션을 위해서는 소스 노드와 대상 노드 모두에서 동시에 스토리지에 액세스할 수 있어야 합니다. 라이브 마이그레이션을 수행하려면 다음 설정이 필요합니다.
ReadWriteMany가상 머신 워크로드 PVC의 액세스 모드를 설정합니다. Ceph RBD는 ODF 가상화의 기본 구성인 블록 모드에서 RWX를 지원합니다 StorageClass.ocs-storagecluster-ceph-rbd-virtualization( StorageClass )는 RBD 블록 모드를 통해ReadWriteMany를 지원하도록 사전 구성되어 있습니다. StorageClass 을 사용하는 가상 서버는 추가 구성 없이 라이브 마이그레이션할 수 있습니다.- 일반
ocs-storagecluster-ceph-rbdStorageClass 은 기본적으로ReadWriteOnce액세스 모드를 사용합니다. RWO PVC를 사용하는 가상 서버는 라이브 마이그레이션을 수행할 수 없습니다. 소스에 연결된 상태에서 대상 노드에 PVC를 마운트할 수 없기 때문에 마이그레이션이 실패합니다.
라이브 마이그레이션이 필요한 가상 서버용 PVC( customStorageClasses )를 생성하는 경우, 해당 PVC가 accessModes: [ReadWriteMany] 및 volumeMode: Block 설정으로 생성되었는지 확인하십시오.
실시간 마이그레이션도 필요합니다:
- 적절한 마이그레이션 정책으로 Red Hat OpenShift 가상화 운영자 구성하기
- 대상 노드에서 충분한 CPU와 메모리를 사용할 수 있는지 확인하기
일반 RBD에 비해 가상화에 특화되어 있습니다 StorageClass
가상 머신은 일반 Ceph RBD StorageClass, 를 사용할 수 있지만, 가상화 전용 StorageClass 는 가상 머신 워크로드 디스크의 고유한 I/O 및 수명 주기 특성에 최적화되어 있습니다.
| 요소(Aspect) | 가상화 관련 StorageClass | 일반 RBD StorageClass |
|---|---|---|
| 워크로드 최적화 | 가상 머신 워크로드 디스크 액세스 패턴에 맞게 조정됨 | 컨테이너화된 워크로드에 최적화 |
| 커널 RBD 매핑 | VM-친화적인 RBD 매핑 옵션 사용(예: krbd:rxbounce) |
기본 매핑 옵션을 사용할 수 있습니다 |
| 성능 일관성 | 게스트 OS I/O의 지연 시간 예측 가능성 향상 | 잠재적으로 더 많은 지연 시간 |
| 가상 머신 워크로드 수명 주기 운영 | 가상 머신 워크로드 시작, 중지, 라이브 마이그레이션 및 스냅샷 워크플로우에 대해 검증되었습니다 | 가상 머신 워크로드 작업에 대해 명시적으로 검증되지 않음 |
| 지원 가능성 | Red Hat OpenShift 가상화 완전 지원 및 권장 | 지원되지만 VM 디스크에는 권장되지 않습니다 |
| Day-2 운영 | 업그레이드 및 마이그레이션 중 위험 감소 | 예상치 못한 성능 저하 위험 증가 |
일반 RBD( StorageClasses )는 컨테이너 워크로드에 여전히 적합하지만, 프로덕션 가상화 환경에서는 가상화 전용 StorageClass 를 사용하는 것이 권장됩니다.
컴퓨팅과 스토리지를 위한 별도의 워커 풀 분리
Red Hat OpenShift ( Kubernetes Service )에서 컴퓨팅 및 스토리지를 위한 별도의 워커 풀을 구현하려면, 먼저 전용 워커 풀을 포함하는 클러스터 아키텍처를 계획하십시오. ODF에 최적화된 스토리지 프로파일을 사용하는 스토리지 워커 풀을 만듭니다. 그런 다음 애플리케이션 워크로드에 대해 균형 잡힌 또는 컴퓨팅에 최적화된 프로필을 사용하는 컴퓨팅 워커 풀을 하나 이상 생성합니다.
ODF 애드온을 설치할 때 스토리지 워커 풀을 지정하면, 해당 스토리지 워커 풀 노드에 스토리지와 무관한 파드나 가상 머신이 스케줄링되는 것을 방지하기 위해 테인트가 자동으로 적용됩니다.
-
전용 스토리지 워커 풀을 만듭니다:
- IBM Cloud 에서 스토리지 노드용 새 워커 풀을 생성합니다.
- 스토리지(로컬 디스크 또는 높은 I/O 프로필)에 최적화된 베어메탈 프로필을 선택하십시오.
- 용량 및 복원력 요구 사항에 따라 필요한 워커 노드 수를 추가하세요.
-
스토리지 노드에 테인트를 적용합니다:
- IBM Cloud 에서 ODF 애드온을 Red Hat OpenShift Kubernetes Service 클러스터에 설치한 후, ‘용량 및 워커 노드 ’ 섹션으로 이동하십시오.
- '워커 풀' 필드에 지정된 스토리지 워커 풀의 이름을 입력하십시오.
- 테인트 노드 옵션을 활성화합니다.
ODF 애드온 설치가 완료되면, ‘
node.ocs.openshift.io/storage=true:NoSchedule’ 테인트가 선택한 워커 풀의 모든 노드에 자동으로 적용됩니다.ODF 설치 중에 테인트 노드 옵션을 선택하지 않은 경우, 나중에 Red Hat OpenShift 에서
oc adm taint명령을 사용하여 스토리지 노드에 수동으로 테인트를 적용할 수 있습니다.oc get node -l ibm-cloud.kubernetes.io/worker-pool-name=<your storage workerpool name> -o=name | \ xargs -I {} oc adm taint nodes {} node.ocs.openshift.io/storage=true:NoSchedule -
노드가 성공적으로 오염되었는지 확인합니다:
- Red Hat OpenShift 에서 컴퓨팅 > 노드 로 이동하세요.
- 를 선택하여 Node 을 클릭하여 상태를 확인한 다음 YAML 탭을 클릭합니다.
- 사양 섹션에서 다음 매개변수의 값을 확인합니다:
Taints: Key: node.ocs.openshift.io/storage Value: 'true' Effect: Noschedule
고급 구성
다음 섹션은 기본 ODF StorageClasses, 의 기능을 넘어, 사용자 지정 Ceph 풀을 생성하거나, 특정 성능 조정이 적용된 사용자 지정 StorageClasses 를 구성하거나, 암호화 기능을 활성화해야 하는 팀을 위한 내용입니다.
가상화를 위한 사용자 지정 StorageClass 만들기
일부 시나리오에서는 특정 성능, 복원력 또는 용량 요구 사항을 충족하기 위해 사용자 지정 StorageClass 이 필요할 수 있습니다.
사용자 지정 StorageClass 리퀘스트를 생성하려면, 먼저 사용자 지정 CephBlockPool 를 생성해야 합니다. 사용자 지정 풀을 만들 때는 풀에 targetSizeRatio 을 설정해야 합니다. 이 설정이 없으면 Ceph 배치 그룹 자동 확장 기능은 풀에 배치 그룹을 단 1개만 할당합니다. 이 할당으로 인해 모든 I/O가 단일 OSD에서 병목 현상이 발생하여, 기본 풀보다 성능이 저하됩니다.
가상화 워크로드에 대한 사용자 지정 StorageClass 을 만들 때 다음 매개 변수가 올바르게 구성되어 있는지 확인합니다.
-
프로비저너
StorageClass 는 ODF에서 제공하는 Ceph RBD CSI 프로비저너를 사용해야 합니다:
openshift-storage.rbd.csi.ceph.com이 프로비저너를 사용하면 ODF 클러스터가 백업하는 Ceph RBD 볼륨을 동적으로 프로비저닝할 수 있습니다.
-
스토리지 풀
가상 머신 워크로드 디스크를 백업하는 CephBlockPool 을 지정합니다. 다음 옵션 중 하나를 선택할 수 있습니다.
- 기본 블록 풀입니다. ODF에 의해 생성된 기본 3방향 복제된 Ceph 블록 풀입니다:
ocs-storagecluster-cephblockpool ``` - 사용자 지정 블록 풀. 사용자 정의 CephBlockPool. 성능 함정을 피하려면 풀에 다음 설정이 포함되어야 합니다: ```yaml apiVersion: ceph.rook.io/v1 kind: CephBlockPool metadata: name: my-custom-pool namespace: openshift-storage spec: failureDomain: zone # Default for multi-zone clusters — data copies spread across zones; use host for single-zone flexible-scaling clusters deviceClass: ssd # Match OSD device class enableCrushUpdates: true # Keep CRUSH rules current on topology changes enableRBDStats: true # Enable per-volume I/O monitoring replicated: size: 3 requireSafeReplicaSize: true targetSizeRatio: 0.1 # CRITICAL — prevents 1-PG bottleneck ``` The `targetSizeRatio` instructs the placement group autoscaler to proportionally preallocate placement groups based on the expected capacity share. Without it, the pool receives 1 PG and all I/O is funneled through a single OSD. -
이미지 기능
StorageClass 에는 워크로드 성능에 중요한 RBD 이미지 기능이 포함되어 있어야 합니다:
imageFeatures: layering,deep-flatten,exclusive-lock,object-map,fast-diffRBD 이미지 기능 및 용도 기능 용도 exclusive-lock쓰기백 캐싱 및 단일 라이터 최적화를 활성화합니다. 이 기능이 없으면 쓰기 IOPS가 최대 7x 더 나빠질 수 있습니다. object-map희소 이미지에 할당된 오브젝트의 비트맵 추적을 활성화합니다. fast-diff스냅샷 차이점 및 DataVolume 복제 작업을 가속화하여 부팅 시간을 단축합니다. deep-flatten클론을 평평하게 만든 후 완전히 독립적으로 만듭니다. layeringDataVolume 복제에 필요한 복사 시 쓰기 복제를 활성화합니다. -
지도 옵션
mapOptions: krbd:rxbounce이 옵션은 Windows 가상 서버에서 커널 RBD 드라이버를 사용할 때 발생하는 데이터 손상 문제를 해결합니다. 호환성을 보장하기 위해 커널이 수신된 데이터에 대해 바운스 버퍼를 사용하도록 강제합니다. 이 옵션은 모든 워크로드 StorageClasses 에서 설정되어야 합니다.
-
완전한 사용자 지정 StorageClass 예제
apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: my-custom-virt-sc provisioner: openshift-storage.rbd.csi.ceph.com parameters: clusterID: <your-cluster-id> pool: my-custom-pool imageFormat: "2" imageFeatures: layering,deep-flatten,exclusive-lock,object-map,fast-diff mapOptions: krbd:rxbounce csi.storage.k8s.io/provisioner-secret-name: rook-csi-rbd-provisioner csi.storage.k8s.io/provisioner-secret-namespace: openshift-storage csi.storage.k8s.io/controller-expand-secret-name: rook-csi-rbd-provisioner csi.storage.k8s.io/controller-expand-secret-namespace: openshift-storage csi.storage.k8s.io/node-stage-secret-name: rook-csi-rbd-node csi.storage.k8s.io/node-stage-secret-namespace: openshift-storage csi.storage.k8s.io/fstype: ext4 reclaimPolicy: Delete allowVolumeExpansion: true volumeBindingMode: Immediate클러스터의
clusterID주소를 찾으려면 다음 명령을 실행합니다:oc get sc ocs-storagecluster-ceph-rbd -o jsonpath='{.parameters.clusterID}'삭제 코딩 풀(개발자 미리 보기 전용)의 경우, ‘데이터 보호 이해’를 참조하고, EC 풀을 가리키는
dataPool을 추가하며,pool은 기본 복제 풀을 가리키도록 유지하십시오:parameters: pool: ocs-storagecluster-cephblockpool # Replicated pool for metadata dataPool: my-ec-pool # EC pool for data blocks
압축
ODF는 Ceph 블록 풀에서 BlueStore 인라인 압축을 지원하므로 디스크에서 사용하는 원시 저장 공간을 줄일 수 있습니다. 압축은 OSD 계층에서 투명하게 적용되므로, 가상 머신 워크로드와 해당 게스트 OS는 데이터가 압축되고 있다는 사실을 인식하지 못합니다.
작업 방식
- 청크가 원래 크기의 87.5 % 이상으로 압축되지 않는 경우
- Ceph는 미미한 성능 향상으로 인해 CPU 자원을 낭비하지 않기 위해 압축을 해제하여 데이터를 저장합니다.
- 압축 기능이 활성화되기 전에 기록된 데이터는 소급하여 압축되지 않으며, 새로 기록되는 데이터에만 적용됩니다.
압축 알고리즘
| 알고리즘 | 일반적인 공간 절약 | 성능 영향 | 권장사항 |
|---|---|---|---|
| Snappy | 16-23% | 12-38% IOPS 감소 | 기본값. 속도와 비용 절감의 최적의 균형. |
| lz4 | 최소-중간 | 가장 작은 CPU 비용 | CPU 사용량을 최소화하는 데 사용합니다. |
| ZLIB | 중간 | 중간 | Snappy와 zstd의 중간 지점. |
| zstd | 36-50% | 21-66% IOPS 감소 | 압축률이 가장 좋지만 CPU 비용이 가장 높습니다. 지연 시간에 민감한 워크로드에는 권장되지 않습니다. |
압축 사용 사례
압축은 압축 가능한 데이터, 텍스트, 로그, 압축이 해제된 애플리케이션 데이터, 그리고 여유 공간이 있는 OS 파일 시스템에서 가장 효과적입니다. 다음과 같은 데이터 상황에서는 이점이 거의 없거나 전혀 없습니다:
- 데이터는 이미 압축되어 있습니다
- 데이터는 애플리케이션 계층에서 암호화됩니다
- 고엔트로피 데이터를 생성하는 워크로드에서 생성된 데이터
VM과 Ceph OSD가 노드를 공유하는 하이퍼컨버지드 클러스터에서는 압축 작업으로 인해 CPU 사용량이 증가하여, 이로 인해 VM 워크로드와 CPU 리소스를 경쟁하게 됩니다. 압축 기능이 활성화된 후 모니터 OSD의 CPU 사용량을 확인하고, Ceph 데몬에 추가적인 CPU 여유 용량을 확보할 수 있도록 성능 리소스 프로필을 검토하십시오.
사용자 정의에서 압축 사용 설정하기 CephBlockPool
압축을 활성화하려면 풀의 ‘Parameters ’ 섹션에서 Compression_mode를 설정하십시오:
apiVersion: ceph.rook.io/v1
kind: CephBlockPool
metadata:
name: compressed-block-pool
namespace: openshift-storage
spec:
failureDomain: zone # Default for multi-zone clusters; use host for single-zone flexible-scaling clusters
deviceClass: ssd
enableCrushUpdates: true
enableRBDStats: true
replicated:
size: 3
requireSafeReplicaSize: true
targetSizeRatio: 0.1
parameters:
compression_mode: "aggressive"
다음과 같은 유효한 Compression_mode 값을 확인하십시오:
none: 압축하지 않음(기본값).passive: 클라이언트가 데이터를 압축할 수 있다고 힌트하면 압축합니다.aggressive: 클라이언트가 해당 데이터가 압축 불가능하다고 명시하지 않는 한 압축한다. 압축을 활성화하는 경우 권장됩니다.force: 힌트와 상관없이 항상 압축을 시도하세요.
Red Hat OpenShift 웹 콘솔을 통해 기본 풀에서 압축을 사용 설정하려면 다음 단계를 따르세요.
- 이동하기 저장소 > 데이터 기반 > StorageSystems
- 원하는 항목을 선택하고 StorageSystem 선택한 후 BlockPools 탭을 클릭하세요
- 풀의 동작 메뉴를 클릭하고 블록 풀 편집을 클릭한 다음 압축 확인란을 활성화합니다.
- 압축을 활성화한 후 압축 풀을 참조하는 StorageClass 을 생성합니다.
자세한 내용은 앞서 소개한 사용자 정의 StorageClass 예제를 참조하십시오. 풀에 있는 기존 PVC는 영향을 받지 않습니다. 풀에 대한 새로운 쓰기만 압축됩니다.
암호화
ODF는 독립적으로 활성화할 수 있는 여러 계층의 저장 데이터 암호화를 지원합니다.
- IBM Cloud 인프라 암호화: 물리적 NVMe 드라이브에 대한 전체 디스크 암호화 - IBM Cloud 에서 관리합니다.
- ODF 클러스터 전체 암호화: 모든 Ceph OSD 디스크는 장치 수준에서 dm-crypt를 사용하여 암호화됩니다. 스토리지 클러스터 CR의 ‘
encryption.clusterWide: true’을 통해 활성화되었습니다. 물리적 디스크 도난으로부터 보호합니다. - ODF 볼륨별 암호화: 개별 RBD 볼륨은 LUKS2 를 사용하여 암호화되며, 각 볼륨마다 고유한 데이터 암호화 키가 할당됩니다. 테넌트 격리 및 세분화된 키 관리 기능을 제공합니다.
Red Hat OpenShift Kubernetes Service 에서 ODF는 클러스터 전체 및 볼륨별 암호화를 위한 외부 키 관리 서비스로 IBM Key Protect 와 통합됩니다. 볼륨별 암호화를 사용하도록 설정하면 ODF는 -encrypted StorageClass 변형(예: ocs-storagecluster-ceph-rbd-encrypted)을 자동으로 생성합니다.
제한사항
다음 제한 사항을 고려하세요.
Ceph CSI 드라이버는 암호화되지 않은 볼륨의 스냅샷에서 암호화된 볼륨을 생성할 수 없습니다. 이러한 제한 사항은 가상 머신 워크로드 생성에 직접적인 영향을 미칩니다. Red Hat OpenShift 가상화 기능은 미리 캐시된 골든 이미지에서 루트 디스크를 복제하여 가상 머신 워크로드를 부팅하며, 이 골든 이미지는 암호화되지 않은 볼륨으로 저장됩니다. 루트 디스크에 암호화된 StorageClass 을 선택하면 복제가
자동으로 실패하고 가상 머신 워크로드가 Provisioning 에 멈춘 상태로 유지됩니다.
이 제한을 극복하려면 루트 디스크에 비암호화된 StorageClass 을 사용하세요(클러스터 전체 암호화는 여전히 물리적 계층에서 데이터를 보호합니다). 볼륨별 암호화가 필요한 데이터 디스크의 경우, 암호화된 StorageClass 을 사용하는 두 번째 디스크를 추가합니다. 또는 복제 경로를 우회하는 source: registry 을 사용하여 운영 체제 이미지를 암호화된 PVC로 직접 가져와서 해당
PVC의 스냅샷에서 재사용 가능한 암호화된 데이터 소스를 만들 수도 있습니다.
IBM Key Protect 을 사용하여 암호화를 구성하는 방법에 대한 자세한 내용은 Red Hat OpenShift 데이터 기반 이해를 참조하세요.
NVMe 베어메탈 환경에서의 Ceph 성능 튜닝
Ceph의 기본 구성은 일반적인 워크로드에 최적화되어 있습니다. 다음 매개변수 값들은 mx2d.metal.96x768 베어메탈 프로필에서 유효성이 검증되었으며, 해당 프로필에서 VM 디스크 워크로드의 IOPS를 크게 향상시키고 지연 시간을 줄여줍니다. 다른 베어메탈 프로필을 사용하는 경우, 이 내용을 기본 참고 자료로 삼고 특정 프로필의 NVMe 드라이브 수와 사용 가능한 CPU에 따라 값을 조정하십시오.
| 매개변수 | 권장 값 | 근거 |
|---|---|---|
osd_memory_target |
8589934592 (8 GB)에서 12884901888 (12 GB)로 |
각 OSD에서 사용할 수 있는 BlueStore 캐시의 용량을 늘립니다. 캐시를 늘리면 읽기 증폭이 줄어들고 무작위 읽기 IOPS가 향상됩니다. 기본값은 4GB이며, 이는 고밀도 NVMe 노드에는 부족합니다. |
osd_op_num_shards_ssd |
16 |
각 샤드는 I/O 작업 큐를 처리합니다. 코어 수가 많은 베어메탈 노드에서 샤드 수를 8개에서 16개로 늘리면 더 많은 요청을 병렬로 처리할 수 있으며, 샤드당 큐 깊이를 줄일 수 있습니다. |
osd_op_num_threads_per_shard_ssd |
2 |
샤드당 워커 스레드의 수를 제어합니다. 이 값을 샤드 수와 함께 늘리면 NVMe 드라이브의 동시 I/O 처리량이 향상됩니다. |
bluestore_prefer_deferred_size_ssd |
0 |
NVMe에 대한 지연 쓰기 기능을 비활성화합니다. 지연 쓰기는 WAL(사전 쓰기 로그)을 통해 이중 쓰기를 유발하여 오버헤드를 발생시킵니다. NVMe 드라이브는 무작위 쓰기 성능이 충분히 빠르기 때문에 지연 쓰기가 오히려 역효과를 낳을 수 있습니다. |
RocksDB rocksdb_write_buffer_size |
268435456 (256 MB) |
RocksDB 의 메모리 테이블 크기를 늘립니다. 더 큰 쓰기 버퍼는 디스크로 플러시하기 전에 ( VM 프로비저닝 및 스냅샷 작업 중에 흔히 발생하는) 메타데이터 쓰기 버스트를 흡수하여 쓰기 지연을 줄여줍니다. |
RocksDB rocksdb_max_write_buffer_number |
16 - 32 |
메모리 내 쓰기 버퍼의 최대 개수를 제어합니다. NVMe의 기본값인 64를 16~32로 줄이는 것만으로도 충분하며, 메모리 부하를 줄일 수 있습니다. |
RocksDB rocksdb_max_background_jobs |
12 - 16 |
동시에 실행되는 압축 및 플러시 스레드의 수를 제어합니다. NVMe 노드에서 이 값을 늘리면, 지속적인 쓰기 부하가 가해질 때 ‘ RocksDB ’ 압축 작업이 병목 현상이 되는 것을 방지할 수 있습니다. |
Ceph 툴박스 포드에서 ceph config set 명령어를 사용하여 각 매개변수를 적용하십시오:
TOOLS_POD=$(oc get pod -n openshift-storage -l app=rook-ceph-tools -o name)
# OSD memory and shard tuning
oc exec -n openshift-storage ${TOOLS_POD} -- ceph config set osd osd_memory_target 8589934592
oc exec -n openshift-storage ${TOOLS_POD} -- ceph config set osd osd_op_num_shards_ssd 16
oc exec -n openshift-storage ${TOOLS_POD} -- ceph config set osd osd_op_num_threads_per_shard_ssd 2
oc exec -n openshift-storage ${TOOLS_POD} -- ceph config set osd bluestore_prefer_deferred_size_ssd 0
# RocksDB tuning
oc exec -n openshift-storage ${TOOLS_POD} -- ceph config set osd rocksdb_write_buffer_size 268435456
oc exec -n openshift-storage ${TOOLS_POD} -- ceph config set osd rocksdb_max_write_buffer_number 16
oc exec -n openshift-storage ${TOOLS_POD} -- ceph config set osd rocksdb_max_background_jobs 12
신청 후, 설정이 승인되었는지 확인하십시오:
oc exec -n openshift-storage ${TOOLS_POD} -- ceph config dump | grep -E "osd_memory_target|osd_op_num_shards|bluestore_prefer_deferred|rocksdb"
ceph config set 를 변경하더라도 OSD 포드를 다시 시작할 필요는 없습니다. Ceph는 구성을 동적으로 적용합니다. 그러나 BlueStore 의 캐시 변경 사항(osd_memory_target)은 각 OSD 포드가 재활용된 후에야 완전히 적용됩니다. 유지보수 시간대에는 I/O를 중단하지 않고 OSD 포드를 한 번에 하나씩 재활용할 수 있습니다.
벤치마크 참고 자료: 200개의 VM과 무제한 IOPS를 갖춘 3노드 mx2d.metal.96x768 클러스터에서 수행한 내부 테스트 결과, 16개의 샤드, 8GB OSD 메모리, 256MB RocksDB 쓰기 버퍼를 조합했을 때 약 194,000 IOPS와 758 MB/s의 처리량을 달성한 것으로 나타났습니다.
샤드 수를 8개에서 16개로 늘리는 것은 모든 테스트 구성에서 일관되게 IOPS 측면에서 가장 큰 단일 개선 효과를 가져왔습니다.
백업 및 데이터 보호
프로덕션 가상화 환경에서는 백업 및 재해 복구가 매우 중요합니다. Red Hat OpenShift 의 ODF 기반 가상화 환경에서, 백업은 현재 Ceph RBD( VolumeSnapshots )에 의존하고 있습니다. 각 백업은 영구 볼륨의 전체 시점 스냅샷을 생성합니다.
스냅샷 기반 백업
ODF는 Ceph RBD 볼륨에 대해 Kubernetes VolumeSnapshots 을 지원합니다. 디스크의 스냅샷을 찍으려면 다음 명령을 사용하세요:
oc apply -f - <<EOF
apiVersion: snapshot.storage.k8s.io/v1
kind: VolumeSnapshot
metadata:
name: my-vm-snapshot
spec:
volumeSnapshotClassName: ocs-storagecluster-rbdplugin-snapclass
source:
persistentVolumeClaimName: my-vm-data-disk
EOF
VolumeSnapshots 는 쓰기 즉시 복사할 수 있고 거의 즉시 만들 수 있습니다. 이를 통해 가상 머신 워크로드를 이전 상태로 복원하거나 디스크를 복제할 수 있습니다. 또한 Red Hat OpenShift Virtualization은 구성 및 모든 디스크를 포함한 가상 머신 워크로드의 전체 상태를 단일 작업으로 캡처하는 내장형 VM 스냅샷 및 복원 API를 제공합니다.
애플리케이션 일관성 스냅샷을 위한 가상 머신 워크로드 대기 중지
실행 중인 가상 머신 워크로드의 스냅샷을 생성할 때는 디스크상의 데이터가 일관된 상태여야 합니다. 스냅샷은 대기 시간 없이 부분적으로 기록된 트랜잭션, 더티 버퍼, 비행 중 I/O를 포함하여 해당 시점의 디스크에 있는 모든 것을 캡처합니다. 이 프로세스는 크래시 일관성 스냅샷을 생성하며, 복원 시 애플리케이션 수준 복구가 필요할 수 있습니다.
애플리케이션 일관성 있는 스냅샷을 생성하려면, 스냅샷 생성 전에 게스트 파일 시스템을 동결하고, 스냅샷 생성 후에 다시 해제해야 합니다. Red Hat OpenShift Virtualization은 QEMU 게스트 에이전트를 사용하여 이 과정을 자동화합니다.
스냅샷 컨트롤러가 QEMU 게스트 에이전트를 감지합니다. 스냅샷을 생성하기 전에, 모든 파일 시스템 I/O를 중지시키는 guest-fsfreeze-freeze 명령을 실행합니다. 파일 시스템이 정지된 상태에서 VolumeSnapshot이 생성됩니다. 스냅샷이 완료되면 guest-fsfreeze-thaw 명령이 I/O를 재개합니다.
스냅샷 상태는 달성된 일관성 수준을 나타냅니다. 각 상태의 의미는 다음 표를 참조하십시오.
| 표시 | 의미 |
|---|---|
| GuestAgent | 게스트 에이전트가 파일 시스템을 성공적으로 동결했습니다. 스냅샷은 애플리케이션 일관성을 유지합니다. |
| NoGuestAgent | 게스트 에이전트가 설치되지 않았거나 준비되지 않았습니다. 스냅샷은 크래시 일관성만 유지합니다. |
| QuiesceFailed | 파일 시스템 정지를 시도했지만 실패했습니다. 스냅샷이 애플리케이션과 일관되지 않을 수 있습니다. |
모든 운영 환경의 가상 머신에는 QEMU 게스트 에이전트를 설치하는 것이 권장됩니다. Linux 게스트에서는 다음 명령을 사용하십시오.
# RHEL / CentOS / Fedora
sudo dnf install -y qemu-guest-agent
sudo systemctl enable --now qemu-guest-agent
# Ubuntu / Debian
sudo apt-get install -y qemu-guest-agent
sudo systemctl enable --now qemu-guest-agent
Windows 게스트의 경우 QEMU 게스트 에이전트 서비스가 포함된 VirtIO 드라이버 패키지를 설치합니다.
애플리케이션용 사용자 정의 동결/해제 후크: 파일 시스템 동결 외에도 추가적인 정지 처리가 필요한 데이터베이스 및 기타 상태 유지형 애플리케이션의 경우, /etc/qemu-ga/fsfreeze-hook.d/ 위치에 게스트 가상 머신 워크로드 내에 사용자 정의 후크 스크립트를 배치하십시오. 이 스크립트들은 파일 시스템이 동결되기 전에는 freeze 인수를,
파일 시스템이 해제된 후에는 thaw 인수를 받아 게스트 에이전트에 의해 자동으로 실행됩니다. 훅 실행 로그는 /var/log/qga-fsfreeze-hook.log 에 기록됩니다.
예를 들어 다음 PostgreSQL 고정 후크는 /etc/qemu-ga/fsfreeze-hook.d/postgresql.sh 에 배치할 수 있습니다:
#!/bin/bash
case "$1" in
freeze)
sudo -u postgres psql -c "SELECT pg_backup_start('snapshot');" 2>/dev/null || true
;;
thaw)
sudo -u postgres psql -c "SELECT pg_backup_stop();" 2>/dev/null || true
;;
esac
VMware 비교: 이 예시는 애플리케이션 일관성 스냅샷을 생성하기 위해 VMware Tools와 함께 사용되는 ‘ VMware ’의 프리프리즈(pre-freeze) 및 포스트-토우(post-thaw) 스크립트와 유사합니다. QEMU 게스트 에이전트는 스냅샷 정지 기능에 있어 VMware Tools와 동일한 역할을 수행합니다.
변경된 블록 추적 제한 사항
변경된 블록 추적(Changed Block Tracking) 기능은 마지막 백업 이후 변경된 블록만을 식별하여 증분 백업을 가능하게 합니다. VMware 의 VADP( vStorage, 데이터 보호용 API)는 이 메커니즘을 활용하여 효율적인 증분 백업을 제공합니다.
Red Hat OpenShift 가상화에서는 ODF 및 Ceph RBD에 대한 CBT를 사용할 수 없습니다. 현재 백업은 전체 스냅샷에 의존하고 있어, 이로 인해 백업 시간이 길어지고 스토리지 사용량이 증가할 수 있습니다.
CBT 개발은 여러 단계로 진행 중입니다:
| 계층 | 상태 | 세부사항 |
|---|---|---|
| Kubernetes CSI CBT API | 알파 ( Kubernetes 1.31 ) | 스냅샷 간에 변경된 블록을 식별하기 위해 SnapshotMetadata CSI 서비스를 도입합니다. 볼륨만 차단합니다. |
| KubeVirt 증분 백업 | 개발 중 | VEP 25는 점진적인 VM 백업을 위한 QEMU 수준의 CBT를 목표로 합니다. 알파 계획 KubeVirt 1.7. |
| Ceph RBD | 기본 기능 존재 | Ceph는 차등 스냅샷(rbd diff)을 기본적으로 지원하지만, CSI CBT API 통합 기능은 구현되어 있지 않습니다. |
Ceph RBD는 스냅샷 간 변경된 블록을 식별하는 기본 rbd diff 기능을 지원하지만, 이 기능은 아직 Kubernetes CSI 변경 블록 추적 API를 통해 제공되지 않습니다. 전체 스택이 준비될 때까지(CSI CBT API + Ceph CSI 드라이버 지원 + KubeVirt 통합) 블록 레벨의 증분 백업은 사용할 수 없습니다.
백업 솔루션
여러 백업 업체들이 현재의 스냅샷 기반 모델 내에서 작동하는 ‘ Red Hat OpenShift ’ 가상화용 솔루션을 제공하고 있습니다:
- Veeam® Kasten: Kubernetes- Red Hat OpenShift 가상화 지원 및 ODF용 증분 스냅샷 기능을 통한 기본 데이터 보호. 자세한 내용은 빔 카스텐 참조 아키텍처를 참조 하세요.
- Kubernetes: Red Hat OpenShift 가상화 워크로드에 대한 백업 및 복구, ODF 통합. 자세한 내용은 Trilio Red Hat OpenShift 가상화 지원을 참조하세요.
- 베리타스 NetBackup: 엔터프라이즈 백업과 Red Hat OpenShift 가상화 지원. 자세한 내용은 다음을 참조하십시오. NetBackup- 포괄적인 기업 데이터 보호.
VMware 마이그레이션에 대한 권장 사항
현재 VMware 환경이 CBT 기반 증분 백업에 의존하는 경우 다음 권장 사항을 고려하세요:
- 전체 스냅샷 백업을 계획하세요. 증분 백업 대신 전체 백업( VolumeSnapshots )을 기준으로 백업 시간대 및 스토리지 요구 사항을 평가하십시오.
- Kubernetes-네이티브 백업 도구 평가하기. Veeam Kasten 및 Trilio는 Kubernetes 및 Red Hat OpenShift 가상화 환경을 위해 설계되었으며, 현재의 스냅샷 모델 내에서 작동합니다.
- Ceph 스냅샷의 효율성을 활용하세요. Ceph RBD 스냅샷은 쓰기 시 복사(Copy-on-Write) 방식을 채택하고 있으며, 스냅샷 생성 후에는 변경된 블록에 대해서만 저장 공간을 사용하므로, 전체 복사본에 비해 지속적인 스냅샷 저장이 더 효율적입니다.
Day-2 운영
IBM Cloud Red Hat OpenShift Kubernetes Service 에 ODF를 배포한 후에는 Day-2 운영에 주력하십시오. 이러한 운영 작업에는 스토리지 인프라를 안정적이고, 고성능이며, 최신 상태로 유지하고, 변화하는 워크로드 요구 사항에 유연하게 대응할 수 있도록 하는 지속적인 관리, 모니터링 및 유지보수 작업이 포함됩니다. 이 가이드에서는 ‘ Day-2 ’ 운영의 다음 세 가지 핵심 측면에 중점을 둡니다:
- 모니터링
- 업그레이드
- 데이터 센터의
ODF 및 Ceph 상태 모니터링
가용성과 성능을 유지하려면 ODF 스토리지 클러스터를 정기적으로 모니터링하는 것이 필수적입니다. 다음 섹션에서는 주요 명령어와 해당 출력을 설명합니다.
전반적인 Ceph 상태 확인
ODF의 건전성을 위해 가장 중요한 명령어는 다음과 같습니다:
TOOLS_POD=$(oc get pods -n openshift-storage -l app=rook-ceph-tools -o name)
oc exec -n openshift-storage ${TOOLS_POD} -- ceph status
출력 결과 해석:
cluster:
id: a1b2c3d4-...
health: HEALTH_OK ← What you want to see
services:
mon: 3 daemons ← Should be 3 (quorum)
mgr: 1 active ← Manager daemon running
osd: 24 osds: 24 up, 24 in ← All OSDs healthy (should match your NVMe count)
data:
pools: 4 pools, 353 pgs
objects: 12.5k objects, 48 GiB
usage: 152 GiB used, 69 TiB / 70 TiB avail ← Cluster usage
건강 상태:
| 상태 | 의미 | 조치 |
|---|---|---|
HEALTH_OK |
모든 구성 요소가 올바르게 작동하고 모든 데이터가 완전히 복제됩니다. | 없음, 정상 작동. |
HEALTH_WARN |
중요하지 않은 문제. 클러스터가 작동 중이지만 주의가 필요한 부분이 있습니다. | ceph health detail 으로 조사하십시오. 일반적인 원인: 거의 꽉 찬 OSD, 성능 저하된 PG 복구, 월요일 사이의 시계 왜곡. |
HEALTH_ERR |
중요한 문제입니다. 데이터 가용성 또는 내구성이 위험에 처할 수 있습니다. | 즉시 조사하십시오. 일반적인 원인: OSD 다운, PG가 복구되지 않음, 클러스터가 꽉 찼습니다. |
자세한 경고를 보려면 다음 명령을 사용하세요:
oc exec -n openshift-storage ${TOOLS_POD} -- ceph health detail
OSD 상태 확인
OSD는 스토리지 데몬으로, NVMe 드라이브 하나당 하나의 데몬이 있습니다. 모든 OSD는 up 및 in 상태여야 합니다. 다음 명령어를 사용하여 상태를 확인하십시오.
oc exec -n openshift-storage ${TOOLS_POD} -- ceph osd tree
다음 정보를 확인합니다.
- 모든 OSD
up: OSD에 “down” 메시지가 표시되면 NVMe 드라이브나 해당 데몬에 문제가 있는 것입니다. - 모든 OSD
in:outOSD는 Ceph가 해당 OSD가 고장날 가능성이 있어 데이터 배치에서 제외했음을 의미합니다. - 일관된 가중치: 동일한 노드에 있는 모든 OSD는 동일한 가중치를 가져야 합니다.
클러스터 사용량 확인
클러스터 사용량을 확인하려면 다음 명령을 실행하십시오.
oc exec -n openshift-storage ${TOOLS_POD} -- ceph df
주요 열:
- 사용된 %RAW: 전체 클러스터 사용량입니다. 최적의 작동을 위해 70% 미만으로 유지하세요.
- 풀당 최대 허용량*: 복제를 고려하여 풀에 기록할 수 있는 추가 데이터의 양입니다.
풀 통계 확인
풀 통계를 확인하려면 다음 명령을 실행하십시오.
oc exec -n openshift-storage ${TOOLS_POD} -- ceph osd pool stats
이 명령어는 풀별로 실시간 I/O 통계를 출력하며, 이를 통해 부하가 걸린 풀을 파악하는 데 도움이 됩니다.
Red Hat OpenShift 웹 콘솔을 통해 모니터링
ODF는 Red Hat OpenShift 웹 콘솔과 통합되어 다음 정보를 제공합니다.
- ‘스토리지 > 데이터 파운데이션’ 대시보드에는 상태, 용량 및 성능 지표가 표시됩니다.
- ‘관찰 > 알림’에서는 Ceph 상태 경고(예:
CephClusterNearFull,CephOSDDown,CephPGNotScrubbed)에 대한 자동 알림을 표시합니다. - Ceph 메트릭에 대한
Prometheus기반 쿼리의 메트릭을 확인하려면 [관찰] > [메트릭]을 참조하십시오(예:ceph_osd_op_r_latency,ceph_osd_op_w_latency).
ODF 업그레이드 Red Hat OpenShift Kubernetes Service
IBM Cloud Red Hat OpenShift 의 Data Foundation(ODF) 애드온은 동일한 마이너 릴리스 내에서 z-stream 업데이트를 자동으로 적용합니다. 이러한 업데이트는 IBM Cloud 를 통해 관리됩니다.
그러나 메이저 및 마이너 버전 업그레이드(예: 4.18 → 4.19 )는 자동으로 이루어지지 않습니다. 데이터의 안전성과 클러스터의 안정성을 보장하기 위해 수동 업그레이드 절차를 따르십시오.
Red Hat OpenShift Kubernetes Service 클러스터에서 ODF 업데이트는 두 가지 주요 단계로 구성되며, 두 단계 모두 성공적인 업그레이드를 위해 필요합니다.
-
ODF 워커 노드를 업그레이드하거나 교체합니다.
- ODF는 스토리지 구성 요소를 호스팅하기 위해 전용 또는 레이블이 지정된 작업자 노드를 사용합니다.
- 메이저 또는 마이너 업그레이드 중에는 이러한 작업자 노드를 대상 Red Hat OpenShift 및 ODF 버전에 맞게 업그레이드하거나 교체해야 합니다.
- 이 프로세스를 통해 ODF 포드(예: Ceph OSD, MON 및 관리자)가 올바르게 예약되고 데이터 손실 없이 계속 작동하도록 할 수 있습니다.
- 스토리지 가용성을 유지하려면 이 단계를 시작하기 전에 충분한 용량과 노드 상태가 양호한지 확인하십시오.
-
ODF 애드온을 업데이트합니다.
- 워커 노드를 업그레이드하거나 교체한 후 ODF 애드온을 업데이트합니다.
- 이 단계에서는 ODF 연산자, CSI 드라이버 및 관련 구성 요소를 대상 버전으로 업그레이드합니다.
- 애드온 업데이트가 완료되면 클러스터가 자동으로 ODF 리소스를 조정하고 필요한 변경 사항을 적용합니다.
업그레이드 후 유효성 검사를 실행하여 다음 사항을 확인하십시오:
- ODF 및 Ceph 클러스터 상태
- StorageClasses 가용성
- 애플리케이션별 성공적인 PVC 읽기 및 쓰기 작업
자세한 내용은 VPC 클러스터에서 ODF 업데이트하기를 참조하세요.
ODF 스토리지 확장 Red Hat OpenShift Kubernetes Service
따라서 워크로드가 증가하고 스토리지 수요가 늘어남에 따라 스토리지 인프라를 확장하는 것이 필수적입니다. ODF 확장은 실행 중인 애플리케이션을 중단하지 않고도 스토리지 용량을 늘리고 성능을 개선하며 복원력을 유지할 수 있는 2일차 핵심 작업입니다.
IBM Cloud Red Hat OpenShift Kubernetes Service 환경에서 확장에는 일반적으로 스토리지 워커 풀을 확장하는 작업이 포함됩니다. 이 작업은 최소한의 다운타임으로 수행되므로 스토리지 클러스터를 원활하게 확장할 수 있습니다.
-
VPC 클러스터에 워커 노드를 추가하세요. 스토리지 클러스터가 3개의 가용 영역에 걸쳐 있는 다중 영역 클러스터의 경우, 영역 간 균형을 유지하기 위해 워커 노드를 3의 배수(예: 3, 6, 9)로 추가하십시오. 유연한 확장 기능이 활성화된 단일 영역 클러스터의 경우, 노드를 한 번에 하나씩 추가할 수 있습니다.
-
노드가 추가된 후, 해당 노드를 ODF에 등록하십시오. 클러스터의 모든 워커 노드에서 ODF가 실행 중이라면, 새로운 노드가 스토리지 토폴로지에 자동으로 추가됩니다. ODF가 일부 워커 노드에서만 실행되는 경우, 다음 단계로 진행하십시오.
-
클러스터의 모든 워커 노드에서 ODF가 실행되는 경우, 새 워커 노드가 ODF 스토리지 클러스터 토폴로지에 자동으로 추가됩니다. ODF가 일부 워커 노드에서만 실행되는 경우,
OcsCluster사용자 정의 리소스에서매개변수를 지정하십시오. 사용자 지정 리소스 정의를 편집하여 새 작업자 노드의 이름을 ODF 배포에 추가합니다. OcsCluster 사용자 정의 리소스를 다음과 같이 수정하십시오:-
ocscluster 찾기
oc get ocscluster -
ocscluster 사용자 정의 리소스 파일을 편집하고 새로운 워크노드를 추가합니다
oc edit ocscluster <ocs cluster name> -o yaml -
OcsCluster 사용자 정의 리소스 파일을 저장하여 클러스터에 다시 적용하십시오.
-
-
OcsCluster 사용자 정의 리소스에서
'numOfOsd'값을 늘리면, OCS가 새로 추가된 워커 노드에 ODF 구성 요소를 배포하고 스토리지 클러스터에 추가 OSD를 프로비저닝할 수 있게 됩니다.'numOfOsd' 에 대한 조정 값은 노드당 OSD 디스크 수와 추가된 노드 수 모두에 따라 달라집니다. 예를 들어, 각 노드에 OSD 전용 NVMe 디스크가 8개씩 장착되어 있는 경우, 노드를 3개 추가하면 ‘ 'numOfOsd' ’가 8개 증가하고, 6개를 추가하면 16개 증가합니다.
-
다음 명령을 실행하여 결과를 확인하십시오:
oc exec -n openshift-storage ${TOOLS_POD} -- ceph osd tree -
새로운 워커 노드가 추가되었는지, 그리고 (다중 존 클러스터의 경우) 각 존에 고르게 분산되어 있는지, 또는 (단일 존 유연한 확장 클러스터의 경우) 개별 호스트 버킷으로 표시되는지, 또한 각 노드에 할당된 OSD의 수가 일치하는지 확인하십시오.
자세한 내용은 ‘VPC 클러스터에 워커 노드를 추가하여 ODF 확장하기’를 참조하십시오.
유연한 스케일링
IBM Cloud 의 ODF 애드온은 클러스터 구성에 따라 서로 다른 장애 도메인 토폴로지를 사용합니다:
- 다중 가용 영역 클러스터(가용 영역 3개): 장애 도메인은
zone로 설정되어 있습니다. OSD는 존 간 데이터 복제 및 고가용성을 유지하기 위해 3의 배수로 프로비저닝되며, 존당 한 세트씩 할당됩니다. 존 간의 균형을 유지하려면 스토리지 클러스터의 용량을 3의 배수로 확장해야 합니다. - 단일 가용 영역 클러스터 또는 가용 영역이 3개 미만인 클러스터: 유연한 확장 기능이 자동으로 활성화됩니다. 장애 도메인은
host``로 설정되어 있으며, 이는 각 노드가 서로 다른 장애 도메인을 구성함을 의미합니다. 한 번에 하나의 노드를 추가할 수 있으며, 스토리지 용량을 세밀하게 확장할 수 있습니다.
ODF 4.21 부터는 유연한 확장 동작이 초기 배포 시 클러스터 토폴로지에 따라 자동으로 결정되며, 이후에는 변경할 수 없습니다.
단일 영역 또는 유연한 확장 방식의 배포 환경에서는, replica-3 풀이 단일 호스트의 장애가 발생하더라도 계속 작동합니다. 다중 구역 배포 환경에서, replica-3 풀은 전체 구역이 손실되더라도 계속 작동합니다. ODF를本番 환경에 배포하기 전에, 클러스터 토폴로지와 이에 따른 내결함성이 복원력 요구 사항을 충족하는지 평가하십시오.
추가 매개변수의 전체 목록과 콘솔 기반 설치 단계에 대해서는 ‘VPC 클러스터에 OpenShift Data Foundation 배포’를 참조하십시오.
노드 확장 시 성능: 유연한 확장 기능을 지원하는 ODF 클러스터에 노드를 추가하면 Ceph 데이터 재조정 작업이 실행됩니다. 아래에서 설명하는 내부 테스트에서 IOPS와 처리량은 안정적인 수준을 유지한 반면, 쓰기 지연 시간은 일시적으로 증가했습니다. 50,000 IOPS에서 100대의 가상 머신이 구동되는 3노드 클러스터를 대상으로 한 내부 테스트에서 다음과 같은 결과가 관찰되었습니다:
| 스테이지 | IOPS | 처리량 | 읽기 대기 시간 | 쓰기 대기 시간 |
|---|---|---|---|---|
| 노드를 추가하기 전에 | 50,000건 | 195 MB/s | 0.69 ms | 1.37 ms |
| 노드 추가 중 | 50,000건 | 195 MB/s | 1.24 ms | 2.22 ms |
| 노드를 추가한 후 | 50,000건 | 195 MB/s | 0.67 ms | 1.22 ms |
재조정 완료 후 쓰기 지연 시간이 기준치로 돌아옵니다. 워크로드가 쓰기 지연 시간 급증에 민감한 경우, VM 활동이 적은 시간대에 노드 추가를 계획하십시오.
요약 및 모범 사례
- 대부분의 Red Hat OpenShift 가상화 배포에는
ocs-storagecluster-ceph-rbd-virtualization을 사용하세요. - 특정 요구 사항이 있는 경우에만 사용자 지정 StorageClass 을 만듭니다.
- 사용자 지정 CephBlockPools, 을 만들 때는 항상
targetSizeRatio(예:0.1)을 설정하고 StorageClass 에 필요한 모든imageFeatures(특히exclusive-lock)을 포함해야 합니다. - RBD용 이레이저 코딩 풀은 개발자 미리 보기 기능(ODF 4.20 이상)이며, 실제 운영 환경에서는 지원되지 않습니다. 모든 프로덕션용 VM 스토리지에는 복제 풀( rep2 또는 rep3 )을 사용하십시오.
- 사용하기 전에 항상 비프로덕션 환경에서 사용자 지정 StorageClasses 의 유효성을 검사하세요.
- 프로덕션 환경에서는 VM 디스크에 일반 RBD StorageClasses 를 사용하지 마세요.
- 암호화된 VM 스토리지의 경우, 루트 디스크에는 비암호화( StorageClass ), 데이터 디스크에는 암호화된 변형을 사용하세요.
- 클러스터 사용률이 70% 미만을 유지하도록 용량을 계획하십시오. 다중 구역 클러스터의 경우, ODF 노드를 3의 배수로 확장해야 하며, 단일 구역 및 유연한 확장 클러스터는 세밀하게 확장할 수 있습니다.
- 애플리케이션 일관성 스냅샷을 위해 모든 프로덕션 가상 머신에 QEMU 게스트 에이전트를 설치합니다.
- Ceph 상태를 정기적으로 모니터링하고 문제가 확대되기 전에
HEALTH_WARN에서 즉시 조사하세요. - 모든 베어메탈 NVMe 운영 환경 배포에는 ‘성능’ 리소스 프로필을 사용하십시오. 'Balanced' 프로필은 고밀도 NVMe 노드에 충분한 Ceph 데몬 리소스를 제공하지 않으며, 하드웨어가 포화 상태에 이르기 전에 IOPS를 제한합니다.
- 베어메탈에 ODF를 배포한 후, 권장되는 Ceph NVMe 튜닝 매개변수(
osd_memory_target,osd_op_num_shards_ssd, RocksDB 쓰기 버퍼 설정)를 적용하여 VM 디스크 워크로드의 IOPS를 극대화하십시오. NVMe 베어메탈용 Ceph 성능 튜닝을 참조하십시오. - StorageSystem 을 생성할 때 노드를 선택할 때는 모든 클러스터 노드가 아닌, 전용 스토리지 워커 풀에 속한 노드만 선택하십시오. 모든 노드를 선택하면
nodeSelector가 없는 LocalVolumeSet 가 생성되는데, 이로 인해 향후 ODF가 아닌 워커 노드가 자동으로 감지되어 수동으로 정리해야 합니다. - 단일 존(single-zone) 및 다중 존( fewer-than-3-AZ ) 클러스터의 경우 유연한 확장 기능이 자동으로 활성화됩니다. 이러한 배포 환경은 다중 노드 장애 도메인(
host)을 사용하며, 세분화된 확장이 가능합니다. 다중 영역 클러스터는zone장애 도메인을 사용하며, 3의 배수로 확장되어야 합니다. 유연한 확장 방식은 초기 배포 시점에 고정되며, 이후에는 변경할 수 없습니다.