Rook/Ceph OSD on PVC in practice

Rook/Ceph OSD on PVC in practice

This slide introduces "OSD on PVC" feature of Rook/Ceph.

842515eaf8fbb2dfcc75197e7797dc15?s=128

Satoru Takeuchi

December 09, 2019
Tweet

Transcript

  1. 6.

    デバイス 従来のデバイス指定 ユーザが 指定 OSD on PVC PVC (Block Volume)

    Rookの クラスタリソース Kubernetes Linux Rookの クラスタリソース OSDの設定 CSIドライバ ユーザはここを 気にしなくていい ユーザが 指定 6 OSD on PVC OSDの設定
  2. 7.

    従来の方法の設定 ▌ノード上のデバイス名を直接使う apiVersion: ceph.rook.io/v1 kind: CephCluster … spec: … storage:

    … nodes: - name: “node0” devices: - name: "sdb" - name: “node1“ deviceFilter: "^sd[^a]“ sda sdb sdc 7 node0 node1 sda sdb sdc OSD OSD OSD OSD Pod OSD Pod OSD Pod • ノードとデバイス構成の詳細な知識が クラスタ管理者に必要 • K8sの枠外で自力構成
  3. 8.

    どこのノードにあるのかは不明 OSD on PVC設定 ▌CSIドライバ提供のblock volumeを使う spec: … storageClassDeviceSets: -

    name: set0 count: 3 … volumeClaimTemplates: - metadata: name: data spec: resources: requests: storage: 10Gi storageClassName: my-class 8 PVC Set0-0 PVC set0-1 OSD OSD OSD Pod OSD Pod PVC set0-2 OSD OSD Pod PVCの提供方法は不明
  4. 11.
  5. 12.
  6. 13.

    ノードの構成: 理想 13 NVMe SSD NVMe SSD PVC PVC PVC

    OSD OSD アプリAのPod OSD Pod OSD Pod CSIドライバが管理 Dynamic provisioning
  7. 15.

    解決方法: 要件を満たすCSIドライバを自作 15 NVMe SSD NVMe SSD Volume Group Logical

    Volume Logical Volume Logical Volume PVC PVC PVC OSD OSD アプリAのPod OSD Pod OSD Pod TopoLVMという 自作CSIドライバが管理 Dynamic provisioning
  8. 16.

    デバイス 従来のデバイス指定 ユーザが 指定 OSD on PVC PVC (Block Volume)

    Rookの クラスタリソース Kubernetes Linux Rookの クラスタリソース OSDの設定 OSD on PVC(TopoLVM) 物理デバイス 物理デバイス 物理デバイス Volume Group Logical Volume Logical Volume Logical Volume PVC (Block Volume) Rookの クラスタリソース TopoLVM CSIドライバ ユーザはここを 気にしなくていい ユーザが 指定 ユーザが 指定 16 OSD on PVC(TopoLVM) OSDの設定 OSDの設定
  9. 17.

    どこのノードにあるのかは不明 OSD on PVC(TopoLVM)設定 ▌TopoLVM提供のblock volumeを使う storageClassDeviceSets: - name: set0

    count: 3 … volumeClaimTemplates: - metadata: name: data spec: resources: requests: storage: 10Gi storageClassName: topolvm-provisioner 17 PVC Set0-0 PVC set0-1 OSD OSD OSD Pod OSD Pod PVC set0-2 OSD OSD Pod PVCはLogical Volume
  10. 18.

    どこのノードにあるのかは不明 運用イメージ ▌TopoLVM提供のblock volumeを使う storageClassDeviceSets: - name: set0 count: 3

    … volumeClaimTemplates: - metadata: name: data spec: resources: requests: storage: 10Gi storageClassName: topolvm-provisioner 18 PVC Set0-0 PVC set0-1 OSD OSD OSD Pod OSD Pod PVC set0-2 OSD OSD Pod PVCはLogical Volume • 設定例 • ノード数 * NVMe SSDの枚数 * NVMe SSD一枚あたりのOSD数 • 高速ストレージ用の容量は除く • 設定例 • NVMe SSD一枚の容量/一枚あたりのOSD数
  11. 27.

    PodAntiAffinityの問題 ▌“required…”: all or nothing。1ノードに1OSD Podしか置けない ⚫ 複数OSD per NVMe

    SSDによる性能向上ができない ▌“preferred”: ノード数より多いOSD Podがあるときに均等分散配置され る保証が無い ▌→現状のOSD on PVCはほぼ実用不可能 27 rack1 rack0 node0 node1 node2 node3 OSD Pod OSD Pod OSD Pod OSD Pod Preferred
  12. 29.

    PodTopologySpreadConstraintsの使用方法 29 Metadata: name: osd topologySpreadConstraints: - topologyKey: rack labelSelector:

    matchLabels: name: osd Nodeのマニフェスト Podのマニフェスト Metadata: labels: - rack: rack0 Metadata: labels: - rack: rack1 rack0 OSD Pod rack1 OSD Pod OSD Pod OSD Pod OSD Pod OSD Pod OSD Podを均等に分散配置
  13. 30.

    Necoにおける設定 ▌PodTopologySpreadConstraintsをrackとnodeに対して使う 30 Metadata: name: osd topologySpreadConstraints: - topologyKey: rack

    labelSelector: matchLabels: name: osd - topologyKey: node labelSelector: matchLabels: name: osd Nodeのマニフェスト Podのマニフェスト Metadata: labels: - rack: rack0 - node: node0 Metadata: labels: - rack: rack0 - node: node1 Metadata: labels: - rack: rack1 - node: node2 Metadata: labels: - rack: rack1 - node: node3
  14. 31.

    新規OSD Podスケジューリングの様子 31 rack0 node0 OSD Pod OSD Pod node1

    OSD Pod OSD Pod rack1 node2 OSD Pod OSD Pod node3 OSD Pod OSD Pod 1. rack0のOSD Pod数 > rack1のOSD Pod数 →rack1にスケジュール 2. node2のOSD Pod数 > node3のOSD Pod数 →node3にスケジュール
  15. 35.
  16. 36.

    参考リンク ▌ストレージオーケストレーターRookへのサイボウズのコミット方針 ⚫ https://blog.cybozu.io/entry/2019/12/03/114746 ⚫ 本記事で述べたものを含めたNecoプロジェクトのRookへの貢献 ▌賢く「散らす」ための Topology Spread Constraints

    https://speakerdeck.com/ytaka23/kubernetes-meetup-tokyo-25th PodTopologySpreadConstraintsの解説 ▌Kubernetesでローカルストレージを有効活用しよう ⚫ https://blog.cybozu.io/entry/2019/11/08/090000 ⚫ TopoLVMの解説 36