$30 off During Our Annual Pro Sale. View Details »

プロダクショングレードストレージシステム on Kubernetes

プロダクショングレードストレージシステム on Kubernetes

以下イベントの発表スライドです。

https://cndata.connpass.com/event/219690/

Satoru Takeuchi
PRO

September 17, 2021
Tweet

More Decks by Satoru Takeuchi

Other Decks in Technology

Transcript

  1. プロダクショングレード
    ストレージシステム
    on Kubernetes
    Sep. 17th, 2021
    サイボウズ ストレージチーム
    sat
    1

    View Slide

  2. はじめに
    ▌サイボウズのインフラ基盤はKubernetesクラスタ
    ▌ストレージ基盤もK8sクラスタ上に構築
    ▌今日はこのストレージ基盤について解説
    2

    View Slide

  3. もくじ
    ▌前提知識
    ▌アーキテクチャ
    ▌使い方と管理方法
    ▌課題と今後
    3

    View Slide

  4. 前提知識
    4

    View Slide

  5. 必要なストレージの種類
    ▌高速ローカルブロックストレージ
    ⚫顧客データを扱うMySQLなど
    ▌中速&スケーラブルなブロックストレージ
    ⚫ファイルシステムを前提としたアプリのデータやメトリクスなど
    ▌大容量&スケーラブルなオブジェクトストレージ
    ⚫ログや添付ファイルなど
    5

    View Slide

  6. その他要件
    ▌可能な限りオペレーションを自動化
    ⚫宣言的管理
    ▌ラック障害耐性
    ⚫1ラック失っても運用継続
    ⚫2ラックデータロスト無し
    ▌Bit-rot耐性
    6

    View Slide

  7. ストレージに対する考え方
    ▌要件
    ⚫ユーザデータの喪失は是が非でも避けたい
    ⚫障害時に即応したい
    ▌商用製品は後者が難しい
    ⚫ソースを見られないand/or手を入れられない
    ▌OSSの自前運用が有力な選択肢
    7

    View Slide

  8. 選定結果
    ▌高速ローカルブロックストレージ
    ⚫自作
    ▌スケーラブルなストレージ
    ⚫OSSの分散ストレージCephを利用
    ⚫OSSのCeph管理ソフトウェアRookを利用
    8

    View Slide

  9. 高速ローカルブロックストレージ
    ▌以下要件を満たす既存ソフトが無かった
    ⚫ローカルストレージ用
    ⚫Dynamic volume provisioning
    ⚫Topology/capacity aware scheduling
    ⚫ 空き容量がもっとも多いノードにPVCを使うPodをスケジュール
    ▌TopoLVMというCSIドライバを自作
    ▌可用性やデータの冗長性などはアプリが担保
    9

    View Slide

  10. スケーラブルなストレージ
    ▌Cephが全ての要件を満たしていた
    ⚫ブロックストレージとオブジェクトストレージを提供
    ⚫データのレプリケーション可能
    ⚫ラック障害耐性設定可能、bit-rot耐性あり
    ▌その他選定要件
    ⚫ペタバイトスケールまで運用実績あり
    ⚫20年以上にわたって企業のバックアップを受けてアクティブに開発さ
    れてきた
    10

    View Slide

  11. Cephのアーキテクチャ(簡略版)
    11
    アプリ
    ストレージプール
    Ceph
    node
    disk disk
    node
    disk disk
    node
    disk disk

    ブロックデバイス オブジェクト
    ブロックデバイス
    ブロックデバイス オブジェクト
    オブジェクトストレージ
    アプリ
    アプリ
    OSD OSD OSD OSD OSD OSD

    View Slide

  12. Cephの管理方法
    ▌課題: 生のCephは使いにくい
    ⚫複雑なコマンド体系
    ⚫ドキュメントが充実していない
    ▌Rookを使って管理することにした
    ⚫Kubernetes上で動作する
    ⚫CNCF公式プロジェクト
    ⚫大手企業がバックアップして活発に開発されている
    ⚫「K8s上でCephならRook」というCephコミュニティの方針あり
    12

    View Slide

  13. Rook
    Rookのアーキテクチャ(簡略版)
    13
    アプリ
    ストレージプール
    Ceph
    node
    disk disk
    node
    disk disk
    node
    disk disk

    ブロックデバイス オブジェクト
    ブロックデバイス
    ブロックデバイス オブジェクト
    オブジェクトストレージ
    アプリ
    アプリ
    OSD OSD OSD OSD OSD OSD
    PV PV PV PV PV PV
    PV
    PVC Object Bucket Claim(OBC)
    Object Bucket(OB)
    PV
    PV
    PVC
    CSIドライバが管理

    View Slide

  14. 使い方と管理方法
    14

    View Slide

  15. ブロックストレージの使い方
    ▌Storage classを指定してPVCを作るだけ
    ⚫ローカルブロックストレージ: topolvm-provisioner
    ⚫Cephブロックストレージ: ceph-block
    ▌自動拡張もサポート
    ⚫PVC autoresizerという自社OSSを使う
    15

    View Slide

  16. Cephのオブジェクトストレージの使い方
    ▌Bucketを使うためのCustomResourceを書く
    16
    kind: ObjectBucketClaim
    metadata:
    name: test-object-bucket
    namespace: default
    spec:
    generateBucketName: test-object-bucket
    storageClassName: ceph-bucket
    kind: Pod
    metadata:
    name: app-pod
    spec:
    containers:
    - name: foo
    envFrom:
    - configMapRef:
    name: test-object-bucket
    - secretRef:
    name: test-object-bucket
    • 今後はK8sの公式Container Object Storage Interfaceを使うように変更される見込み
    • COSIはK8s v1.23でのalphaサポートを目標に開発中
    Bucketにアクセスする
    ための情報が入っている

    View Slide

  17. インフラ基盤のハードウェア構成
    ▌2種のサーバを詰めたラックを並べる
    17
    rack
    CS
    SS
    SS
    rack
    CS
    CS
    SS
    rack
    CS
    CS
    SS
    SS

    CS
    SS
    • Computing Server
    • 全サービスが使う
    • ストレージはNVMe SSD
    • Storage Server
    • Ceph専用
    • ストレージはHDD
    CS
    SS

    View Slide

  18. ストレージシステムの構成
    18
    Rook/Cephクラスタ Rook/Cephクラスタ
    オブジェクトストレージ ブロックストレージ
    HDD
    SS
    CS
    SSD
    HDD
    HDD SSD
    NVMe SSD
    LogicalVolume LogicalVolume
    LogicalVolume
    LogicalVolume LogicalVolume
    LogicalVolume TopoLVMが管理
    OB PV
    PV
    PV
    アプリ
    アプリ
    アプリ
    PVC
    PVC
    OBC
    PV VolumeGroup

    View Slide

  19. ▌CephCluster Custom Resource(CR)を書く
    19
    Rook/Cephクラスタの管理
    storage:

    count: 3
    volumeClaimTemplates:
    - spec:
    resources:
    requests:
    storage: 1Ti
    storageClassName:
    OSD用PVCのテンプレート
    OSDの数 • Cluster on HDD
    • local-storage storage classを指定
    • クラスタ on NVMe SSD
    • topolvm-provisioner storage classを指定

    View Slide

  20. ▌管理者がcountフィールドを増やすだけ
    ▌後はRookなどが勝手にやってくれる
    1. RookがOSD用PVCを作る
    ⚫ クラスタ on HDD: 対応するPVがすでに存在している
    ⚫ クラスタ on NVMe: 対応するPVはTopoLVMが動的に作成
    2. RookがPV上にOSDのデータ構造を作る
    3. RookがOSDをクラスタに組み込む
    20
    Cephクラスタの拡張

    View Slide

  21. 現状と今後
    21

    View Slide

  22. 日常業務
    ▌ストレージシステム開発
    1. 試験用DCで検証、開発
    2. 開発DC及び本番DCへのdeploy
    3. 運用
    ▌開発DCでは週に一回の全台再起動
    ▌CephやRookに問題があれば可能な限りupstreamで直す
    22

    View Slide

  23. 現状
    ▌単一サイト運用のための基本的な機能検証は完了
    ▌制限
    ⚫性能は気にしないものとする
    ⚫可用性は保証しない
    23

    View Slide

  24. 使用感
    ▌ユーザとして使うのは楽
    ⚫他のstorage classと変わらない
    ▌管理は基本的には楽
    ⚫トラブル発生時もログやメトリクスを保存してある
    ▌Cephクラスタで障害が起きたときはつらい
    ⚫運用ノウハウが足りない
    ⚫Cephの問題なのかハードウェアの問題なのか切り分けに時間がかかる
    24

    View Slide

  25. これまでに遭遇した問題(1/5)
    ▌RookがOSD on LVMをサポートしない
    ⚫検証時にTopoLVMを使ってOSDを作ろうとしたときに発見
    ▌現状
    ⚫Upstream Rookを修正して解決
    25

    View Slide

  26. これまでに遭遇した問題(2/5)
    ▌ノードを再起動するとOSDが壊れる
    ▌全台再起動試験において検出
    ▌原因
    ⚫コンテナ環境におけるOSD操作の排他制御漏れ
    ▌現状
    ⚫Upstream Rookを修正して解決
    26

    View Slide

  27. これまでに遭遇した問題(3/5)
    ▌ノードを再起動するとOSDが壊れる(前述のものとは別)
    ▌全台再起動試験において検出
    ▌原因
    ⚫ページキャッシュに不整合がある
    ⚫根本原因は特定できていない
    ▌現状
    ⚫ パラメタ設定で回避中
    ⚫修正はまだ無い
    27

    View Slide

  28. これまでに遭遇した問題(4/5)
    ▌オブジェクトストレージのindex再作成関連が終わらない
    ⚫運用中に検出
    ▌原因
    1. サービス用Pod上でindex再作成処理がはじまる
    2. index再作成中はlivenessProbeに応答しないことがある
    3. Podが殺される。1に戻る
    ▌現状
    ⚫Upstream Rookのissueで対処方法議論中
    28

    View Slide

  29. これまでに遭遇した問題(5/5)
    ▌複数台同時にノードを再起動すると一部データがロスト
    ▌全台再起動試験中に検出
    ▌現状
    ⚫原因不明
    ⚫Upstream Cephにissue発行済
    ⚫再現試験予定。結果はissueにfeedback
    29

    View Slide

  30. 今後について
    ▌やること
    ⚫未解決の問題を片づける
    ⚫性能チューニング&可用性を高める
    ⚫引き続き運用/開発技術の強化
    ⚫機能追加
    ⚫ リモートレプリケーション
    ⚫ バックアップ/リストア
    ▌一緒に働いてくれるかたを募集中!
    30

    View Slide

  31. 31
    おわり

    View Slide