본문으로 건너뛰기

Ceph OSD 관리

Disk 준비

아래 중 하나에 해당하는 Disk를 준비해야합니다.

  • Raw devices (파티션 또는 파일 시스템이 없는 디바이스)
  • Raw partitions (파일 시스템이 없는 파티션)
  • LVM Logical Volumes (파일 시스템이 없는 논리적 볼륨)
  • Block모드로 사용가능한 PV(다른 StorageClass에 의해 프로비저닝 됨)

Raw device를 사용하는 경우

sudo dd if=/dev/zero of=/dev/<device> bs=1M count=100 oflag=direct,dsync

Logical Volume(LV)를 사용하는 경우

Data 흐름


https://access.redhat.com/documentation/en-us/red_hat_ceph_storage/4/html/storage_strategies_guide/overview
  • Data
    • block device image(RBD), object(RGW), file(CephFS)
    • Data는 저장을 위한 Object로 분할되고(e.g. 4 MB), Object는 stripe unit으로 분할됩니다(e.g. 64 KB).
    • Data Striping
  • Pool
    • 클라이언트가 인식하는 추상화된 저장공간입니다.
    • Pool은 Placement Group(PG)들로 나뉩니다.
    • 하나의 PG는 하나의 Pool에만 속합니다.
  • CRUSH 알고리즘
    • PG를 OSD에 할당합니다.(primary OSD와 secondary OSDs로 구성)
    • Object를 PG 중 하나에 할당합니다.
  • CRUSH 맵
    • Bucket 계층 구조, OSD 리스트, Pool 내에서 데이터를 복제 규칙을 정의한 맵입니다.
    • OSD가 추가되면 host Bucket에 자동으로 추가됩니다.
    • 기본적으로 root-host-osd 구조가 주어집니다.
    • root-region-zone-datacenter-room-pod-pdu-row-rack-chassis-host-osd 구조로 확장 가능합니다.
kubectl rook-ceph ceph osd tree

OSD 추가하기

apiVersion: ceph.rook.io/v1
kind: CephCluster
spec:
resources:
osd: {}
placement:
all: {}
osd: {}
storage:
useAllNodes: false
useAllDevices: false
경고

동일한 설정이 있는 경우 범위가 좁은 것이 적용됩니다. 예를 들어 storage.configstorage.nodes.config가 있고 해당 장치가 속한 Node에 config가 있는 경우 storage.nodes.config가 적용됩니다.

  • resources
    • osd: {}
    • osd-<deviceClass>: {}
      • <deviceClass>에는 hdd, ssd, nvme 등이 올 수 있습니다.
    • 메모리 설정은 자동으로 osd_memory_target 설정에 적용됩니다.
  • placement
    • all
    • osd
      • nodeAffinity
      • podAffinity
      • podAntiAffinity
      • tolerations
      • topologySpreadConstraints
  • storage
    • config: <config>
    • deviceSelection(임베딩)
    • storageClassDeviceSets: []
    • onlyApplyOSDPlacement: <bool>
      • PV가 아닌 장치를 사용하는 경우 .spec.placement.osd.spec.placement.all의 병합 여부입니다.
      • PV 장치를 사용하는 경우 storageClassDeviceSets에 정의된 placement와 .spec.placement.all의 병합 여부입니다.
    • useAllNodes: <bool>: 모든 노드에서 장치를 감지할지 여부입니다.
    • nodes: []
      • name: <nodeName>
      • config: <config>
        • 노드에 있는 모든 장치에 적용될 설정입니다.
      • deviceSelection(임베딩)
      • resources: {}
        • 메모리 설정은 자동으로 osd_memory_target 설정에 적용됩니다.


resources에 memory 설정을 하는 경우 osd_memory_target 설정에 반영됩니다. 스토리지만을 위한 Node의 경우 osd_memory_target_autotuneautotune_memory_target_ratio을 활용하는 것이 좋습니다.