Cloud Native Days Tokyo 2022の発表スライドです。 https://event.cloudnativedays.jp/cndt2022/talks/1525
Rook/Cephストレージシステムを開発しながらupstream OSSに成果を還元してきた取り組みNov. 21st, 2022Cybozu, Inc.Satoru Takeuchi1
View Slide
今日伝えること▌サイボウズがOSSベースのストレージシステムを開発の延長としてupstreamに還元してきた経験▌成果の還元で得られたOSSコミュニティとのつきあいかたのベストプラクティス2
もくじ3▌サイボウズとサイボウズのインフラ▌これまでの開発&OSS貢献実績⚫検証中に見つけたRook/Cephの機能追加、バグ修正⚫upstream Cephのテスト改善提案⚫Upstream OSS最新情報チェック▌OSSコミュニティとつきあうベストプラクティス
もくじ4▌サイボウズとサイボウズのインフラ▌これまでの開発&OSS貢献実績⚫検証中に見つけたRook/Cephの機能追加、バグ修正⚫upstream Cephのテスト改善提案⚫Upstream OSS最新情報チェック▌OSSコミュニティとつきあうベストプラクティス
サイボウズ▌様々なグループウェアを提供している⚫kintone, Garoonなどなど▌提供形態⚫クラウドサービス(今日の主題はこちら)⚫一部パッケージ製品もある5
サイボウズのインフラ▌OSSベースのオンプレシステムを自前運用⚫有事に自ら即座に詳細調査や修正提供したい▌現行インフラの限界が見えてきたので新インフラを開発中▌新インフラはK8sクラスタで、ストレージシステムにはRook/Cephを使用⚫Ceph: OSSの分散ストレージ⚫Rook: K8s上で動くCephのオーケストレーション6
Cephのアーキテクチャ7アプリストレージプールCephクラスタnodedisk disknodedisk disknodedisk disk…ブロックデバイス オブジェクトストレージOSD OSD OSD OSD OSD OSDファイルシステム
Rookのアーキテクチャ8RookストレージプールCephクラスタnodedisk disknodedisk disknodedisk disk…ブロックデバイス オブジェクトストレージアプリOSD OSD OSD OSD OSD OSDPV PV PV PV PV PVPVPVC Object Bucket Claim(OBC)Object Bucket(OB)PVCPVCPVCPVCファイルシステムPVPVCPVCPVC
Rook/Cephクラスタの完成予想図9K8sクラスタ リモートK8sクラスタ* 左図と同様の構成レプリケーションHDD Rook/Cephクラスタ SSD Rook/Cephクラスタアプリ アプリオブジェクトストレージブロックストレージHDDnode node SSDHDDHDD SSDNVMe SSDバックアップ
もくじ10▌サイボウズとサイボウズのインフラ▌これまでの開発&OSS貢献実績⚫検証中に見つけたRook/Cephの機能追加、バグ修正⚫upstream Cephのテスト改善提案⚫Upstream OSS最新情報チェック▌OSSコミュニティとつきあうベストプラクティス
基本的な開発の流れ▌以下の繰り返し1. VM上に構築した仮想DCを使って開発2. 開発用オンプレDCにdeploy3. 本番オンプレDCへのdeploy▌問題が見つかれば可能な限りupstreamで修正⚫成果がすべてのupstream Rook/Cephユーザのためになる⚫手元だけで修正するとメンテが大変11
使用するコンテナ▌Upstream OSSの最新版をもとに独自ビルドしたもの▌独自パッチを当てたコンテナを運用することもある⚫重要な修正がupstreamにマージされていない⚫マージされたが新版がリリースされていない12
もくじ13▌サイボウズとサイボウズのインフラ▌これまでの開発&OSS貢献実績⚫検証中に見つけたRook/Cephの機能追加、バグ修正⚫upstream Cephのテスト改善提案⚫Upstream OSS最新情報チェック▌OSSコミュニティとつきあうベストプラクティス
問題1: OSDが作れない!1. SSD Rook/CephクラスタはOSDをLVM上に作る2. RookがOSD on LVMをサポートしていなかった3. Upstream Rookに機能追加して解決14
問題2: OSDが壊れる!1. ノード再起動時にOSDが壊れる問題が多発2. RookにOSD操作の排他制御漏れがあった3. Upstream Rookを修正して解決15
問題3: OSDが作れない!(その2)1. OSDを増やそうとすると稀に作成に失敗。テストにも支障が出ていた2. Upstream Cephのissue trackerに報告3. Upstream Cephを修正してもらった16
問題4: オブジェクトストレージが動かない!1. 突然オブジェクトストレージが応答しなくなった2. オブジェクト数の増加時にサービスが長時間停止するバグがあった3. Upstream Rookを修正して解決17
貢献が認められRookのメンテナに就任▌プロジェクトの意思決定にかかわれる▌KubeConのメンテナセッションで登壇できる▌メンテナのおしごと⚫リリース作業、ドキュメント改善、テスト改善⚫社外の人が作ったIssue対応,PRレビュー⚫サイボウズに直接関係ないものも多い18
OSS開発業務を支える会社のポリシー▌OSSポリシーを定めている⚫https://cybozu-oss-policy.readthedocs.io/ja/latest/▌ポリシーを定める目的 (前文より抜粋)⚫当社及び従業員がOSS関連活動を過大な負担なく行えるよう支援すること⚫当社がオープンソースコミュニティで良き一員であるために必要な規定を定めること19
もくじ20▌サイボウズとサイボウズのインフラ▌これまでの開発&OSS貢献実績⚫検証中に見つけたRook/Cephの機能追加、バグ修正⚫upstream Cephのテスト改善提案⚫upstream OSS最新情報チェック▌OSSコミュニティとつきあうベストプラクティス
Cephについて浮かんだ疑問▌なぜサイボウズでは頻繁にOSDの作成失敗や再起動時にOSDが破れるのか?⚫前述したもの以外にもいくつかの類似バグを検出▌なぜupstreamのテストで検出されなかったか▌手元のデータとupstreamのテスト履歴を分析することに21
分析の結果わかったこと22▌サイボウズの開発スタイルではOSDを再起動する頻度がupstreamのテストよりもはるかに高い⚫UpstreamのテストでOSD再起動の負荷試験をすればバグ検出率が上がるかも▌ほとんどの問題はHDD上で検出していた⚫UpstreamのテストでHDDを使っていない疑いがある⚫もしそうならHDDを使うようにするとよいのでは
Upstream Cephへのはたらきかけ23▌Ceph Virtualというイベントで問題提起⚫テストの改善を提案▌今後はMLなどで議論継続
もくじ24▌サイボウズとサイボウズのインフラ▌これまでの開発&OSS貢献実績⚫検証中に見つけたRook/Cephの機能追加、バグ修正⚫upstream Cephのテスト改善提案⚫Upstream OSS最新情報チェック▌OSSコミュニティとつきあうベストプラクティス
upstream OSS最新情報チェック25▌RookとCephの動向を毎日全てチェック⚫ML, issue tracker, GitHub, slack…▌目的⚫深刻なバグの早期発見⚫問題に遭遇する前にワークアラウンド実施⚫暫定的に自前パッチ適用&リリース版へバックポート
例1: オブジェクトストレージのデータロスト261. Upstream Cephにオブジェクトストレージのデータロスト問題の修正PRが投稿された⚫オブジェクトのPUT時に特定のタイミングでネットワークが切れるとオブジェクトがロスト2. mainマージ後にバックポートPR作成⚫現在マージ待ち状態
例2: オブジェクトストレージの性能問題1. 開発用クラスタでオブジェクトストレージの性能劣化が起きていた2. この問題を解決しそうなPRがCephのmainbranchに取り込まれた3. 安定版にバックポートしたパッチを当てたサイボウズ独自コンテナにアップグレード4. 性能改善!27
ところが…4. クラスタが異常を報告しはじめる5. データが一部壊れる⚫この後upstream Cephの安定版リリース時のテストで性能改善PRのバグが検出された6. 残ったデータの退避、及びバグ修正後のPRを適用した開発用クラスタを再作成28
原因▌性能改善PRは、ある程度以上古いバージョンで作ったOSDのデータをうまく扱えなかった▌条件に合うOSDが開発用クラスタに存在した▌サイボウズではこのようなケースをテストしていなかった29
PRマージ前に検出されなかった理由▌Upstreamのテストにはupgrade suiteがある⚫古いバージョンのCephでOSDを作ってから最新版にアップグレード▌しかし個々のPRのテストではupgradeテストは動かないことが判明30
Cephコンテナのアップグレードポリシーの変更▌古い形式のOSDを考慮したテストを追加▌CephのアップグレードでOSDの形式が変われば、既存の古いOSDは可能な限り全て最新版で作り直す▌Upstreamのテストで流す全テストをローカル環境で流せるようにする(継続中)⚫これができるまで自前パッチを当てる運用は禁止31
Rook/Cephクラスタ開発の進捗32K8sクラスタレプリケーションRook/CephクラスタA Rook/CephクラスタBオブジェクトストレージブロックストレージ現行インフラリモートK8sクラスタ* 左図と同様の構成HDDnode node SSDHDDHDD SSDNVMe SSD一部アプリバックアップアプリ アプリ
人材育成もやってます▌当初upstream対応は一人が専任に近い形でやっていて、SPOFになっていた▌現在できる人を増やしつつある⚫upstream OSSチェックは2人体制⚫Upstream OSS関連作業は慣れている人と慣れていない人がペアになってノウハウを伝達33
もくじ34▌サイボウズとサイボウズのインフラ▌これまでの開発&OSS貢献実績⚫検証中に見つけたRook/Cephの機能追加、バグ修正⚫upstream Cephのテスト改善提案⚫Upstream OSS最新情報チェック▌OSSコミュニティとつきあうベストプラクティス
基本的な考え方▌OSSへの貢献を特別なものと捉えない▌OSSを使っていれば自然と貢献に繋げられる1. 自社システムの課題を見つける2. 課題をOSSコミュニティに共有3. コミュニティ全体の利益になるよう一緒に解決▌企業同士の協業に近い(同じではない)35
はじめの一歩▌簡単なバグ報告/修正から始める⚫ドキュメント修正やテスト追加もアリ▌具体的にどうするか⚫貢献方法が書いている公式ドキュメントを見る⚫GitHubなどを見て真似する⚫経験がある人に助けてもらう36
最初から肯定的な反応を期待しない▌否定的な反応は注目されているサイン⚫落としどころを見つけるために議論を重ねる⚫無理筋なときは引き下がる。無理強いは嫌われる▌無視が一番困る⚫単に忘れられているだけでpingを打つと反応があることも⚫説明しなおせば相手してもらえることも⚫ × 「これが直らないと弊社が困るんです」⚫ 〇 「これはみんながハマりうる問題です」37
押さえておきたいこと▌どこでコミュニケーションをとればいいか▌Main branchやリリース版へのマージ条件▌リリースサイクル▌キーマンは誰か38
会社のサポートがあるとよい▌OSSへの理解があるとうれしい⚫自社のスケジュール通りには進まない⚫自社の利益に直結しないタスクをすることも⚫ ポリシーとして明文化されているとよい▌Open Source Program Office(OSPO)があると楽⚫ライセンスの使用可否の判断、知見蓄積⚫OSSコミュニティとのやりとりのアドバイス39
まとめ▌サイボウズはRook/Cephクラスタ開発の一環としてupstream OSSに成果を還元してきた▌この結果、OSSとのつきあいかたについてのノウハウを蓄積した▌これからもこの方法で開発を進める▌一緒に働いてくれる仲間を募集中!40
That’s all, thank you!41