Slide 1

Slide 1 text

KubeCon EU 2021 Recap ~Rook Intro & Ceph Deep Dive~ sat@Cybozu May 20th, 2021 1

Slide 2

Slide 2 text

すすめかた 1. セッション紹介 2. サイボウズのRook/Cephクラスタ 2

Slide 3

Slide 3 text

セッション紹介 3

Slide 4

Slide 4 text

4

Slide 5

Slide 5 text

5

Slide 6

Slide 6 text

6

Slide 7

Slide 7 text

7

Slide 8

Slide 8 text

8 • 📝コード全体のうち2/3以上がCephのもの • コミットもほとんどCephに対するもの • 📝 最新版(v1.6)でメンテされていない ストレージプロバイダが3つ削除された

Slide 9

Slide 9 text

9

Slide 10

Slide 10 text

Cephのアーキテクチャ 10 アプリ ストレージプール Cephクラスタ node disk disk node disk disk node disk disk … ブロックデバイス オブジェクト ブロックデバイス ブロックストレージ オブジェクト ファイルシステム アプリ アプリ ブロックデバイス ブロックデバイス オブジェクトストレージ OSD OSD OSD OSD OSD OSD Cephのデータ領域 &管理デーモン

Slide 11

Slide 11 text

K8sクラスタ Rookのアーキテクチャ 11 アプリ ストレージプール Cephクラスタ node disk disk node disk disk node disk disk … ブロックデバイス オブジェクト ブロックデバイス ブロックストレージ オブジェクト ファイルシステム アプリ アプリ(Pod) ブロックデバイス ブロックデバイス オブジェクトストレージ OSD pod OSD OSD pod OSD OSD pod OSD OSD pod OSD OSD pod OSD OSD pod OSD Ceph-csiドライバ lib-bucket-provisioner Rook PV,PVC OB,OBC

Slide 12

Slide 12 text

K8sクラスタ Rookのアーキテクチャ 12 アプリ ストレージプール Cephクラスタ node disk disk node disk disk node disk disk … ブロックデバイス オブジェクト ブロックデバイス ブロックストレージ オブジェクト ファイルシステム アプリ アプリ(Pod) ブロックデバイス ブロックデバイス オブジェクトストレージ OSD pod OSD OSD pod OSD OSD pod OSD OSD pod OSD OSD pod OSD OSD pod OSD Ceph-csiドライバ lib-bucket-provisioner Rook PV,PVC OB,OBC 📝 K8s v1.22 + Rook v1.7(次期安定版)では Container Objest Storage Interface(COSI)を サポート予定

Slide 13

Slide 13 text

13

Slide 14

Slide 14 text

14

Slide 15

Slide 15 text

15 1. ユーザがCountを増やす 2. RookがOSD PodとPVCを作成 3. RookがPVC上にOSDを作る

Slide 16

Slide 16 text

PVC-based clusterの課題 ▌K8sでは通常podのスケジュール先は不定 ▌例: 2node, 4disk, OSD数2, データのレプリカ数2 16 node0 disk disk 望ましくない配置(node0障害で全データ喪失) 望ましい配置(1node失ってもデータは残る) OSD Pod PVC OSD OSD Pod PVC OSD node1 disk disk node1 disk disk OSD Pod PVC OSD node0 disk disk OSD Pod PVC OSD

Slide 17

Slide 17 text

TopologySpreadConstraints(TSC) ▌Kubernetesの機能 ▌所定のドメイン間でPodを均等分散配置 17 apiVersion: v1 kind: Pod metadata: name: mypod spec: topologySpreadConstraints: - topologyKey: topology.Kubernetes.io/zone Podを分散させるべきドメイン apiVersion: v1 kind: Node metadata: name: mynode topology.Kubernetes.io/zone: myrack Nodeごとにドメインを設定

Slide 18

Slide 18 text

TSCを使ったOSDの均等分散配置 ▌実現までの流れ 1. TSCによってOSD Podをドメイン間で均等分散配置 2. OSD Podが使うPVC、それに対応するOSDも同様 ▌他のストレージ on K8sにも使える技法 18 node2 disk disk OSD Pod PVC OSD node1 disk disk OSD Pod PVC OSD Kube-scheduler TSC

Slide 19

Slide 19 text

サイボウズのRook/Cephクラスタ 19

Slide 20

Slide 20 text

なぜRook/Cephなのか ▌機能要件を全て満たす ⚫スケーラブルな分散ストレージ ⚫ブロックストレージ、オブジェクトストレージ ⚫ラック障害時に運用継続可能、データロストなし ⚫宣言的に管理可能 ▌自分達で機能追加可能、有事の速やかな修正が可能 ⚫RookもCephもOSSなので、自前運用なら可能 ⚫📝 ストレージ障害はお客様及び自社の損害が大きい&取返し不可能 20

Slide 21

Slide 21 text

社内Rook/Cephクラスタ開発方法 1. 検証&構築&実機上で運用 2. 課題が見つかればissue発行&必要あれば自分達で直す 3. 1に戻る 21

Slide 22

Slide 22 text

これまでのRookへの貢献 ▌TSCのサポート ▌データ破壊問題の解決 ▌XFS on Cephブロックストレージ使用時の 問題検出&デフォルトfsの変更 ▌Disaster recovery手順改善 ▌バグ修正&テスト追加 22

Slide 23

Slide 23 text

完成予想図 23 K8sクラスタ リモート K8sクラスタ * 左図と 同様の構成 レプリケーション Rook/CephクラスタA Rook/CephクラスタB アプリ アプリ アプリ オブジェクト ストレージ ブロック ストレージ ブロック ストレージ HDD node node SSD HDD HDD SSD NVMe SSD

Slide 24

Slide 24 text

現状 24 K8sクラスタ レプリケーション 監視ツール& ログ基盤 Rook/CephクラスタA Rook/CephクラスタB アプリ アプリ アプリ オブジェクト ストレージ ブロック ストレージ ブロック ストレージ 現行インフラ リモート K8sクラスタ * 左図と 同様の構成 HDD node node SSD HDD HDD SSD NVMe SSD

Slide 25

Slide 25 text

成熟度 ▌ユーザは制限付きでデータを置いてよい ⚫性能を気にしない ⚫長時間ダウンしても問題ない ▌毎週全サーバを順番に再起動しているが、 最近は問題が起きていない 25

Slide 26

Slide 26 text

今後 ▌性能チューニング&可用性を高める ▌機能追加 ⚫リモートレプリケーション ⚫スナップショット、バックアップ/リストア ▌既存データを(徐々に)移行 26

Slide 27

Slide 27 text

27 おわり ▌セッションのページ(スライド引用元) ⚫ https://kccnceu2021.sched.com/event/iE6R ▌Production-grade Deployment of PVC-based Rook/Ceph Cluster ⚫ https://blog.kintone.io/entry/2020/09/18/175030