Slide 1

Slide 1 text

Rook/Ceph upstream最新状況 Japan Rook Meetup #3 Cybozu, Inc. Neco Project Satoru Takeuchi Twitter: @satoru_takeuchi 1

Slide 2

Slide 2 text

はじめに ▌サイボウズとRook/Cephの関係 ⚫次期インフラ基盤にRook/Cephを採用 ⚫upstream firstでバグ修正&機能追加する方針 ▌本セッションの目的 ⚫Rook/Cephクラスタ開発で得た知見を共有

Slide 3

Slide 3 text

目次 1. 前提知識 2. Rook最新安定版(v1.3)の変更点 3. Rook次期安定版(v1.4)の開発状況 4. Rookを取り巻く状況 3

Slide 4

Slide 4 text

目次 1. 前提知識 2. Rook最新安定版(v1.3)の変更点 3. Rook次期安定版(v1.4)の開発状況 4. Rookを取り巻く状況 4

Slide 5

Slide 5 text

デバイス OSD on device ユーザが指定 OSD on PVC PVC template (Block Volume) Cephクラスタの カスタムリソース Kubernetes Linux Cephクラスタの カスタムリソース OSDの設定 CSIドライバ ユーザはここを 気にしなくていい ユーザが指定 5 2種類のOSD作成方法 OSDの設定 ボリュームを作成

Slide 6

Slide 6 text

OSD on device ▌ノード上のデバイス名を直接指定 spec: … storage: … nodes: - name: “node0“ devices: - name: “sdb” - name: “node1“ deviceFilter: “^sd[^a]“ sda sdb sdc 6 node0 node1 sda sdb sdc OSD OSD OSD OSD Pod OSD Pod OSD Pod • クラスタ管理者にハードウェア構成の知識が必要 • 大規模になるほどマニフェストを書くのがツラい

Slide 7

Slide 7 text

• クラスタ管理者はOSD podのありかを気にしなくてよい OSD on PVC ▌CSIドライバ提供のraw block volumeを使う spec: … storageClassDeviceSets: - name: set0 count: 2 … volumeClaimTemplates: - metadata: name: data spec: resources: requests: storage: 10Gi storageClassName: my-class 7 PVC set0-1 OSD OSD Pod PVC set0-2 OSD OSD Pod • ボリュームの提供方法も気にしなくてよい

Slide 8

Slide 8 text

OSD on PVCの理想的な状態 8 PVC PVC OSD OSD OSD Pod OSD Pod CSIドライバが管理 Dynamic provisioningで 自動作成 disk disk disk disk disk TopoLVM: LVMベースのローカルディスク用CSIドライバ PV PV

Slide 9

Slide 9 text

▌OSD on Deviceのかわりに使える 自分でPVを作るという手段もある 9 PVC PVC OSD OSD OSD Pod OSD Pod CSIドライバが管理 static provisioningで 手動作成 disk disk disk disk disk PV PV

Slide 10

Slide 10 text

目次 1. 前提知識 2. Rook最新安定版(v1.3)の変更点 3. Rook次期安定版(v1.4)の開発状況 4. Rookを取り巻く状況 10

Slide 11

Slide 11 text

OSD on PVCの均等分散配置 ▌K8sにTopologySpreadConstraintsという機能がある(後述) ⚫所定のPodをfailure domain間で均等分散配置可能 ⚫入れ子構造も可能 ⚫名前が長いので、これ以降はTSCと記載 ▌OSD PodにおいてTSCをサポート ⚫サイボウズ作 11

Slide 12

Slide 12 text

背景 ▌以下構成を例に必要性を説明 ⚫要件:ラック&ノード障害耐性 ⚫データのレプリカ数: 2 12 rack1 rack0 node0 node1 node2 node3

Slide 13

Slide 13 text

Kubernetesの仕様のおさらい ▌Podはどのノードにもスケジュールされうる ⚫OSD on PVCにおけるOSD Podも同様 ▌例) OSD数を2にすると以下のようになるかも… 13 rack1 rack0 node0 node1 node2 node3 OSD Pod OSD Pod

Slide 14

Slide 14 text

問題 ▌ここでrack0が故障するとデータ消失 ▌→ラック障害耐性の要件を満たせない 14 rack1 rack0 node0 node1 node2 node3 OSD Pod OSD Pod

Slide 15

Slide 15 text

OSD Podのスケジューリング with TSC 15 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にスケジュール

Slide 16

Slide 16 text

TSCの詳細

Slide 17

Slide 17 text

ストレージプロバイダ ▌Minioのコードが削除された ⚫理由: 誰もメンテしていない

Slide 18

Slide 18 text

その他 ▌パーティション上のOSD作成をサポート ▌FileStoreの新規作成が不可能に ⚫今後作成されるOSDは全てBlueStore ⚫既存のFileStore OSDのサポートは継続 18

Slide 19

Slide 19 text

目次 1. 前提知識 2. Rook最新安定版(v1.3)の変更点 3. Rook次期安定版(v1.4)の開発状況 4. Rookを取り巻く状況 19

Slide 20

Slide 20 text

Scheduling profileのサポート ▌Kubernetesの機能(v1.18ではalpha) ▌Pod単位でスケジューリング方針を簡単に設定可能 1. profileを任意の数だけ定義 2. Podごとに使うprofileを指定 ▌OSD Podへのprofile設定をサポート ⚫サイボウズ作 20

Slide 21

Slide 21 text

背景 ▌システムの運用中にハード構成は変わる ⚫ラック/ノード/デバイスの追加/削除/故障 ▌TSCで強い制約を付けるのは現実的ではない ⚫例: Node間のOSD pod数の差 <= 1 21 rack0 node0 node1 disk0 disk1 disk2 disk0 disk1 disk2 時間が経つと… rack0 node0 node1 disk0 disk1 disk2 disk0 disk1 disk2 node2 disk0 disk1 disk2 追加 このディスクは上記制約が あると使えない

Slide 22

Slide 22 text

解決案1: TSCのmaxSkewフィールド ▌Failure domain間で許容するPod数の差を決める ▌欠点: 根拠のある数値を決めづらい ⚫小さすぎる値: 前ページの問題が発生 ⚫大きすぎる値: そもそも分散されない 22

Slide 23

Slide 23 text

解決案2: TSCのwhenUnsatisfiableフィールド 23 https://kubernetes.io/docs/concepts/workloads/pods/pod-topology-spread-constraints/#api • TSCの制約を満たせないとき: • DoNotSchedule (デフォルト): Podをスケジュールさせない • ScheduleAnyway: できる限り差分を最小化するようスケジュール これだ!

Slide 24

Slide 24 text

辛い現実 24 https://kubernetes.io/docs/concepts/workloads/pods/pod-topology-spread-constraints/#api • TSCの制約を満たせないとき: • DoNotSchedule (デフォルト): Podをスケジュールさせない • ScheduleAnyway: できる限り差分を最小化するようスケジュール 実際の動き • DoNotSchedule (デフォルト): TSCの制約を満たすようスケジュール 満たせなければスケジュールしない • ScheduleAnyway: TSCの制約を満たそうという努力を一切しない • Pod数の偏りをスコアリングの参考にするだけ • 偏りが大きくてもスコアへの影響は少ない • 例えばCPU負荷が高いnodeにはまずOSD Podは作られない コレジャナイ!

Slide 25

Slide 25 text

upstream k8sでの議論 ▌スケジューラ開発者たちの見解 ⚫記述が間違っているけどいまさら変えられない ⚫スコアリングルールを変えて対処するしかない 25

Slide 26

Slide 26 text

最終的な対処方法 ▌OSD pod専用のScheduling profileを利用 1. TSCのスコアへの寄与が高いprofileを作る 2. OSD podに上記profileを指定 3. 他の因子の影響を受けずにOSD podを均等分散可能 26

Slide 27

Slide 27 text

Scheduling profileの詳細

Slide 28

Slide 28 text

OSD on PVCがサポートするデバイスタイプの増加 ▌現状 ⚫ディスク全体、パーティション、Logical Volume ▌追加 ⚫Mpath: merged ⚫Crypt: サイボウズが追加予定 28

Slide 29

Slide 29 text

ストレージプロバイダ ▌EdgeFS本体がclosed source化 ▌今後はCeph一極化が加速? ストレージプロバイダ V1.2.0~v1.3.0のコミット数 V1.3.0~のコミット数 Ceph 277 215 EdgeFS 13 5 NFS 6 9 Cassandra 3 5 YugabyteDB 5 2 CockroachDB 1 1 Minio 2 ※ ひとまずremoveは回避された

Slide 30

Slide 30 text

リモートレプリケーション ▌RBD mirroring専用のCR: マージ済 ⚫v1.3以前からのUpgrade時に要注意 ▌Object Store Multisite CR: 開発中

Slide 31

Slide 31 text

その他 ▌カスタムリソースのバリデーション改善: 開発中 ⚫Admission controllerを使用 ▌Reviewer(approved権限保持者)の増員: マージ済 ⚫Satoru Takeuchi@サイボウズ ⚫Madhu Rajanna@Red Hat

Slide 32

Slide 32 text

v1.4開発への主な貢献者 コミット数 名前 所属 備考 176 Sébastien Han Red Hat メンテナ 151 Travis Nielsen Red Hat メンテナ 36 Satoru Takeuchi サイボウズ レビューア 26 Madhu Rajanna Red Hat レビューア、ceph-csiメンテナ 12 Jiffin Tony Thottan Red Hat メンテナ 7 Umanga Chapagain Red Hat 7 n.Fraison 不明 7 Dmitry Yusupov Nexenta EdgeFSメンテナ 7 Alexander Trost Cloudical 5 Binoue サイボウズ

Slide 33

Slide 33 text

目次 1. 前提知識 2. Rook最新安定版(v1.3)の変更点 3. Rook次期安定版(v1.4)の開発状況 4. Rookを取り巻く状況 33

Slide 34

Slide 34 text

プロジェクトの成熟度 ▌プロダクション環境で少なくとも20社が使用中 ⚫Github.com/rook/rook/ADOPTERS.md ▌CNCFのGraduatedプロジェクト目指して活動中 ⚫現在はIncubatingプロジェクト ⚫順調に進行中 34

Slide 35

Slide 35 text

Rook/Cephを使う製品 ▌Red Hat OpenShift Container Storage4 ⚫4月にv4.3がリリース済 ▌Containerized SUSE Enterprise Storage 6 on CaaS Platform 4 Kubernetes Cluster ⚫Technical Preview

Slide 36

Slide 36 text

まとめ ▌Rook/Cephは成熟度を高めながら活発に開発中 ▌ユーザも増え続けている ▌サイボウズは今後も継続的に貢献 ⚫機能/テスト/ドキュメント追加 ⚫バグ修正 ⚫ユーザサポート 36

Slide 37

Slide 37 text

参考リンク ▌ストレージオーケストレーターRookへのサイボウズのコミット方針 ⚫ https://blog.cybozu.io/entry/2019/12/03/114746 ▌賢く「散らす」ための Topology Spread Constraints ⚫ https://speakerdeck.com/ytaka23/kubernetes-meetup-tokyo-25th ▌Scheduling Profileが実現するPod配置戦略の最前線 ⚫ https://speakerdeck.com/ytaka23/infra-study-meetup-2nd ▌Kubernetesでローカルストレージを有効活用しよう ⚫ https://blog.cybozu.io/entry/2019/11/08/090000 37

Slide 38

Slide 38 text

38 Thank you! Any question?